mirror of
https://github.com/LukeHagar/prettier-plugin-openapi.git
synced 2025-12-06 04:21:03 +00:00
Saving current state
This commit is contained in:
204
README.md
Normal file
204
README.md
Normal file
@@ -0,0 +1,204 @@
|
||||
# Prettier Plugin OpenAPI
|
||||
|
||||
A Prettier plugin for formatting OpenAPI/Swagger JSON and YAML files with intelligent key sorting and proper indentation.
|
||||
|
||||
## Features
|
||||
|
||||
- 🎯 **OpenAPI/Swagger Support**: Formats both JSON and YAML OpenAPI specifications
|
||||
- 🔄 **Smart Key Sorting**: Automatically sorts OpenAPI keys in the recommended order
|
||||
- 📝 **YAML & JSON**: Supports both `.yaml/.yml` and `.json` file formats
|
||||
- 🎨 **Consistent Formatting**: Applies consistent indentation and line breaks
|
||||
- ⚡ **Fast**: Built with performance in mind using modern JavaScript
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install --save-dev prettier-plugin-openapi
|
||||
# or
|
||||
yarn add --dev prettier-plugin-openapi
|
||||
# or
|
||||
bun add --dev prettier-plugin-openapi
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Command Line
|
||||
|
||||
```bash
|
||||
# Format a single file
|
||||
npx prettier --write api.yaml
|
||||
|
||||
# Format all OpenAPI files in a directory
|
||||
npx prettier --write "**/*.{openapi.json,openapi.yaml,swagger.json,swagger.yaml}"
|
||||
|
||||
# Format with specific options
|
||||
npx prettier --write api.yaml --tab-width 4 --print-width 100
|
||||
```
|
||||
|
||||
### Configuration
|
||||
|
||||
Add the plugin to your Prettier configuration:
|
||||
|
||||
**package.json**
|
||||
```json
|
||||
{
|
||||
"prettier": {
|
||||
"plugins": ["prettier-plugin-openapi"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**.prettierrc**
|
||||
```json
|
||||
{
|
||||
"plugins": ["prettier-plugin-openapi"],
|
||||
"tabWidth": 2,
|
||||
"printWidth": 80
|
||||
}
|
||||
```
|
||||
|
||||
**.prettierrc.js**
|
||||
```javascript
|
||||
module.exports = {
|
||||
plugins: ['prettier-plugin-openapi'],
|
||||
tabWidth: 2,
|
||||
printWidth: 80,
|
||||
};
|
||||
```
|
||||
|
||||
## Supported File Extensions
|
||||
|
||||
- `.openapi.json`
|
||||
- `.openapi.yaml`
|
||||
- `.openapi.yml`
|
||||
- `.swagger.json`
|
||||
- `.swagger.yaml`
|
||||
- `.swagger.yml`
|
||||
|
||||
## Key Sorting
|
||||
|
||||
The plugin automatically sorts OpenAPI keys in the recommended order:
|
||||
|
||||
### Top-level keys:
|
||||
1. `openapi`
|
||||
2. `info`
|
||||
3. `servers`
|
||||
4. `paths`
|
||||
5. `components`
|
||||
6. `security`
|
||||
7. `tags`
|
||||
8. `externalDocs`
|
||||
|
||||
### Info section:
|
||||
1. `title`
|
||||
2. `description`
|
||||
3. `version`
|
||||
4. `termsOfService`
|
||||
5. `contact`
|
||||
6. `license`
|
||||
|
||||
### Components section:
|
||||
1. `schemas`
|
||||
2. `responses`
|
||||
3. `parameters`
|
||||
4. `examples`
|
||||
5. `requestBodies`
|
||||
6. `headers`
|
||||
7. `securitySchemes`
|
||||
8. `links`
|
||||
9. `callbacks`
|
||||
|
||||
## Examples
|
||||
|
||||
### Before (unformatted):
|
||||
```yaml
|
||||
paths:
|
||||
/users:
|
||||
get:
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
components:
|
||||
schemas:
|
||||
User:
|
||||
type: object
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
version: 1.0.0
|
||||
title: My API
|
||||
```
|
||||
|
||||
### After (formatted):
|
||||
```yaml
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: My API
|
||||
version: 1.0.0
|
||||
paths:
|
||||
/users:
|
||||
get:
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
components:
|
||||
schemas:
|
||||
User:
|
||||
type: object
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
### Setup
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
bun install
|
||||
|
||||
# Build the plugin
|
||||
bun run build
|
||||
|
||||
# Run tests
|
||||
bun test
|
||||
|
||||
# Run demo
|
||||
bun run test/demo.ts
|
||||
```
|
||||
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
src/
|
||||
index.ts # Main plugin implementation
|
||||
test/
|
||||
plugin.test.ts # Unit tests
|
||||
demo.ts # Demo script
|
||||
examples/
|
||||
petstore.yaml # Example OpenAPI file
|
||||
```
|
||||
|
||||
## Configuration Options
|
||||
|
||||
The plugin respects standard Prettier options:
|
||||
|
||||
- `tabWidth`: Number of spaces for indentation (default: 2)
|
||||
- `printWidth`: Maximum line length (default: 80)
|
||||
- `useTabs`: Use tabs instead of spaces (default: false)
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch
|
||||
3. Make your changes
|
||||
4. Add tests for new functionality
|
||||
5. Run the test suite
|
||||
6. Submit a pull request
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
|
||||
## Related Projects
|
||||
|
||||
- [Prettier](https://prettier.io/) - The core formatter
|
||||
- [OpenAPI Specification](https://swagger.io/specification/) - The OpenAPI specification
|
||||
- [Swagger](https://swagger.io/) - API development tools
|
||||
Reference in New Issue
Block a user