microcms_sdk_generator
Version:
A type-safe MicroCMS SDK Generator
156 lines (111 loc) • 4.03 kB
Markdown
# microcms_sdk_generator
`microcms_sdk_generator` is a Deno tool designed to automatically generate
TypeScript SDKs from your [microCMS](https://microcms.io/) API schema. The tool
leverages [Zod](https://zod.dev/) schemas to ensure TypeScript type safety.
Installation and usage are easily handled via npm or Deno.
## Table of Contents
- [Features](#features)
- [Getting Started](#getting-started)
- [Installation with Deno](#installation-with-deno)
- [Installation with npm](#installation-with-npm)
- [Usage](#usage)
- [SDK Usage](#sdk-usage)
- [Schema Files](#schema-files)
- [Contributing](#contributing)
- [License](#license)
- [FAQ](#faq)
## Features
- Generates TypeScript SDKs from your [microCMS](https://microcms.io/) API
schema automatically.
- Utilizes [Zod](https://zod.dev/) schemas to maintain TypeScript type safety.
- Supports usage in both server-side and client-side environments.
## Getting Started
### Installation with Deno
Execute the following command for installation using Deno.
```sh
deno install --allow-read --allow-write https://deno.land/x/microcms_sdk_generator/microcms_sdk_generator.ts
```
> [microcms\_sdk\_generator \| Deno](https://deno.land/x/microcms_sdk_generator)
Or execute directly.
```sh
deno run --allow-read --allow-write https://deno.land/x/microcms_sdk_generator/microcms_sdk_generator.ts
```
### Installation with npm
Execute the following command for installation using npm.
```sh
npm install --global microcms_sdk_generator
```
> [microcms\_sdk\_generator \- npm](https://www.npmjs.com/package/microcms_sdk_generator)
Or execute directly.
```sh
npx microcms_sdk_generator
```
## Usage
To use the tool, specify the directory of the schema files and the destination
TypeScript file.
```sh
microcms_sdk_generator <schema directory> <destination typescript file>
```
For example, execute the following command on the root of this repository.
```sh
microcms_sdk_generator ./src/testdata/schemas ./src/testdata/generated.ts
```
## SDK Usage
### Initialize
Initialize the client with your service domain and API key.
```typescript
const client = createClient({
serviceDomain: "YOUR_SERVICE_DOMAIN",
apiKey: "YOUR_API_KEY",
});
```
### Making Requests
Use the client to make requests as follows.
```typescript
const resp = await client[`${endpointName}`].list({...})
const resp = await client[`${endpointName}`].get({...})
const resp = await client[`${endpointName}`].post({...})
const resp = await client[`${endpointName}`].put({...})
const resp = await client[`${endpointName}`].patch({...})
const resp = await client[`${endpointName}`].delete({...})
const resp = await client[`${endpointName}`].listMetadata({...})
const resp = await client[`${endpointName}`].getMetadata({...})
const resp = await client[`${endpointName}`].patchStatus({...})
```
For example, for the `sampleForListApi` endpoint.
```typescript
const listResp = await client.sampleForListApi.list({
limit: 2,
orders: ["-createdAt"],
});
if (!listResp.ok) {
throw listResp;
}
console.log(listResp.data.contents);
```
## Schema Files
Schema files need to be placed under the schema directory in the following
structure:
- {schema directory}
- list
- {endpointName}.json
- ...
- object
- {endpointName}.json
- ...
NOTE: microCMS currently does not support exporting schemas per endpoint. You
will need to use the exported schema file, but this file does not resolve
`endpointName` and `API type (list or object)`. Therefore, you should structure
your files as shown above.
## Contributing
We welcome bug reports and feature requests through GitHub issues. Pull requests
are also welcome.
## License
This project is open-sourced under the MIT License. See the [LICENSE](./LICENSE)
file for details.
## FAQ
### How can I set up a retry policy?
You can prepare a fetcher capable of retrying, and specify it as a customFetcher
in option.
e.g.
[vercel/async\-retry: Retrying made simple, easy and async](https://github.com/vercel/async-retry)