npm package: @midi-dev/prettier
Description: A unified prettier formatter with presets and easy project integration
Author: HEMIDI Development Team
Latest version: 1.0.15
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# @hemidi/prettier

> Gói định dạng mã nguồn Prettier đơn giản và dễ sử dụng.

## Giới thiệu

`@hemidi/prettier` là một gói định dạng mã nguồn dựa trên Prettier, được thiết kế để cung cấp trải nghiệm định dạng mã nguồn nhất quán và dễ sử dụng cho các dự án JavaScript và TypeScript.

### Tính năng chính

- **Đơn giản**: Tập trung vào các lệnh cốt lõi
- **Dễ sử dụng**: Cài đặt và sử dụng nhanh chóng
- **Tích hợp dễ dàng**: Tự động thêm scripts vào package.json
- **Hỗ trợ nhiều định dạng**: JavaScript, TypeScript, JSON, CSS, HTML, Markdown...

## Cài đặt

```bash
npm i -D @hemidi/prettier
```

## Bắt đầu nhanh

### Bước 1: Khởi tạo trong dự án

```bash
npx midi-prettier init        # hoặc 'npx midi-prettier --init'
```

Lệnh này sẽ:

- Tạo file cấu hình `.prettierrc`
- Tạo file `.prettierignore` với các ignore patterns chuẩn
- Thêm scripts vào package.json

### Bước 2: Sử dụng các lệnh định dạng

```bash
npm run format        # Định dạng tất cả các file
npm run format:check  # Kiểm tra định dạng (dùng cho CI)
npm run format:watch  # Tự động định dạng khi file thay đổi
```

## Tham chiếu Scripts

### Scripts cơ bản

| Script         | Mô tả                               | Mục đích          |
| -------------- | ----------------------------------- | ----------------- |
| `format`       | Định dạng tất cả các file           | Sử dụng hàng ngày |
| `format:check` | Kiểm tra định dạng, không sửa       | CI/CD pipeline    |
| `format:watch` | Tự động định dạng khi file thay đổi | Development       |

## Tham số dòng lệnh

### Tùy chọn cơ bản

| Option        | Mô tả                                        | Ví dụ                            |
| ------------- | -------------------------------------------- | -------------------------------- |
| `--write`     | Ghi thay đổi vào file                        | `midi-prettier --write .`        |
| `--check`     | Chỉ kiểm tra, không sửa                      | `midi-prettier --check .`        |
| `--watch`     | Tự động định dạng khi file thay đổi          | `midi-prettier --watch .`        |
| `--init`      | Khởi tạo prettier trong dự án                | `midi-prettier --init`           |
| `--log-level` | Mức độ log: silent, error, warn, info, debug | `midi-prettier --log-level=info` |

## Định dạng file hỗ trợ

- TypeScript (`.ts`, `.tsx`)
- JavaScript (`.js`, `.jsx`)
- JSON (`.json`)
- Markdown (`.md`)
- CSS/SCSS (`.css`, `.scss`)
- HTML (`.html`)
- YAML (`.yml`, `.yaml`)

## Cấu hình mặc định

### .prettierrc

```json
{
  "semi": true,
  "singleQuote": true,
  "trailingComma": "all",
  "tabWidth": 2,
  "printWidth": 100,
  "arrowParens": "always"
}
```

### .prettierignore

Package tự động tạo file `.prettierignore` với các ignore patterns chuẩn:

- `node_modules/` - Thư mục dependencies
- `dist/`, `build/` - Thư mục build output
- `*.min.js`, `*.min.css` - File đã minified
- `coverage/` - Thư mục coverage reports
- `package-lock.json`, `yarn.lock` - Lock files
- Các file log, temporary, OS files

Bạn có thể tùy chỉnh file `.prettierignore` theo nhu cầu dự án.

## Hướng dẫn sử dụng theo tình huống

### Development hàng ngày

```bash
# Định dạng tất cả các file
npm run format
```

### Trước khi commit

```bash
# Kiểm tra định dạng
npm run format:check
```

### CI/CD Pipeline

```yaml
# Actions example
- name: Check formatting
  run: npm run format:check
```

### Tích hợp với VSCode

Thêm vào file `.vscode/settings.json`:

```json
{
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  }
}
```

## Tích hợp với Git hooks

Với [husky](https://typicode.github.io/husky/) và [lint-staged](https://github.com/okonet/lint-staged):

```json
{
  "lint-staged": {
    "*.{ts,tsx,js,jsx,json,md,css,scss,html}": ["midi-prettier --write"]
  }
}
```

## API Reference

### formatFiles(inputs, options)

Định dạng nhiều file hoặc thư mục.

**Tham số:**

- `inputs: string[]` - Đường dẫn file hoặc glob patterns
- `options: MidiPrettierOptions` - Tùy chọn định dạng

**Trả về:** `Promise<FormatSummary>`

### formatText(input, options)

Định dạng một chuỗi mã nguồn.

**Tham số:**

- `input: string` - Mã nguồn cần định dạng
- `options: MidiPrettierOptions` - Tùy chọn định dạng

**Trả về:** `Promise<string>`

## Các bước tiếp theo

### 1. Thiết lập cơ bản

```bash
# Sau khi cài đặt, khởi tạo prettier trong dự án
npx midi-prettier init
```

### 2. Tích hợp Git hooks

```bash
# Cài đặt husky cho pre-commit
npm install -D husky
npx husky add .husky/pre-commit "npm run format:check"
```

## Kết quả mẫu

### Khi phát hiện file chưa format đúng

```bash
# npm run format:check
[midi-prettier] Found 2 file(s) to process
 - ✗ midi-prettier.ts needs formatting
 - ✗ midi-prettier.js needs formatting
[midi-prettier] ❌ Found 2/28 file(s) need formatting
```

### Khi format lại các file đã phát hiện

```bash
# npm run format
[midi-prettier] Found 2 file(s) to process
 - ✓ midi-prettier.ts needs formatting
 - ✓ midi-prettier.js needs formatting
[midi-prettier] ✅ Formatted 2/28 file(s)
```

## Quy trình đóng gói

### B1: Vào thư mục prettier, cài đặt dependencies và kiểm tra authentication với npm registry

```bash
cd packages/ci/prettier && npm install
npm whoami
# Nếu chưa đăng nhập, chạy lệnh:
npm login
```

### B2: Cần thay đổi các thông tin cần thiết trong file package.json nếu cần

```json
{
  "name": "@hemidi/prettier", // <- Thay đổi tên package nếu cần(trùng org, scope)
  "version": "1.0.0", // <- Thay đổi version
  "description": "HEMIDI CI Prettier package" // <- Thay đổi mô tả
}
```

### B3: Quản lý version của package

```bash
# example
npm version patch # 1.0.1
npm version minor # 1.1.0
npm version major # 2.0.0
```

### B4: Build package

```bash
npm run build
```

### B5: Đóng gói và publish

```bash
# Đóng gói package publish
npm publish --access public

#  Đóng gói package private
npm publish --access restricted
```