git-push-time 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,33 +1,59 @@
1
- # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
2
- # For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
3
-
4
- name: Node.js Package
5
-
6
- on:
7
- release:
8
- types: [created]
9
-
10
- jobs:
11
- build:
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v4
15
- - uses: actions/setup-node@v4
16
- with:
17
- node-version: 20
18
- - run: npm ci
19
- - run: npm test
20
-
21
- publish-npm:
22
- needs: build
23
- runs-on: ubuntu-latest
24
- steps:
25
- - uses: actions/checkout@v4
26
- - uses: actions/setup-node@v4
27
- with:
28
- node-version: 20
29
- registry-url: https://registry.npmjs.org/
30
- - run: npm ci
31
- - run: npm publish
32
- env:
33
- NODE_AUTH_TOKEN: ${{secrets.npm_token}}
1
+ name: Publish to npm
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ concurrency:
12
+ group: npm-publish-master
13
+ cancel-in-progress: false
14
+
15
+ jobs:
16
+ publish:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - name: Check out repository
20
+ uses: actions/checkout@v4
21
+ with:
22
+ fetch-depth: 0
23
+
24
+ - name: Set up Node.js
25
+ uses: actions/setup-node@v4
26
+ with:
27
+ node-version: 20
28
+ registry-url: https://registry.npmjs.org/
29
+
30
+ # Earlier queued runs may have checked out a commit from before the
31
+ # previous publish job's version bump. Rebase before changing versions.
32
+ - name: Sync with master
33
+ run: |
34
+ git fetch origin master
35
+ git rebase origin/master
36
+
37
+ - name: Install dependencies and validate package
38
+ run: |
39
+ npm ci
40
+ npm pack --dry-run
41
+
42
+ - name: Increment patch version
43
+ id: version
44
+ run: |
45
+ npm version patch --no-git-tag-version
46
+ node -e 'const fs = require("node:fs"); fs.appendFileSync(process.env.GITHUB_OUTPUT, `version=${require("./package.json").version}\n`);'
47
+
48
+ - name: Publish package
49
+ run: npm publish
50
+ env:
51
+ NODE_AUTH_TOKEN: ${{ secrets.npm_token }}
52
+
53
+ - name: Save published version to master
54
+ run: |
55
+ git config user.name "github-actions[bot]"
56
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
57
+ git add package.json package-lock.json
58
+ git commit -m "chore: release v${{ steps.version.outputs.version }} [skip ci]"
59
+ git push origin HEAD:master
package/README.md CHANGED
@@ -1,215 +1,219 @@
1
- # 🚀 Git Push Time & GitHub CLI (`git-push-time`)
2
-
3
- Một công cụ Dòng lệnh (CLI) mạnh mẽ, hiện đại và toàn diện giúp bạn **đẩy dự án lên Git siêu tốc**, **kết nối GitHub tạo Repository trực tiếp**, **tùy chỉnh lùi thời gian commit (Backdate)** và **tự động bảo vệ chống lộ Key/Secret (GitHub GH013)**.
4
-
5
- ---
6
-
7
- ## ✨ Tính năng nổi bật
8
-
9
- - 🐙 **Kết nối GitHub & Tạo Repository trực tiếp**:
10
- - Tạo nhanh repository mới trên GitHub (Public / Private) chỉ trong 3 giây ngay trên terminal.
11
- - Tự động liên kết remote và đẩy code của dự án lên repo mới vừa tạo.
12
- - Hỗ trợ lưu trữ Personal Access Token (PAT) an toàn, tự nhận diện token từ `gh CLI` hoặc biến môi trường `GITHUB_TOKEN`.
13
- - Xem thông tin tài khoản GitHub (Profile), danh sách repository cá nhân và chọn repo trực tiếp không cần copy-paste link.
14
- - ⚡ **Đẩy dự án siêu tốc**: Tự động hóa toàn bộ quy trình `git init`, `git remote`, `git add .`, `git commit`, `git push`.
15
- - ⏰ **Tùy chỉnh thời gian commit (Git Backdate)**:
16
- - Lùi ngày/giờ bằng cú pháp tự nhiên: `-2d` (2 ngày trước), `-5h` (5 giờ trước), `-1w` (1 tuần trước), `-30m` (30 phút trước).
17
- - Hoặc nhập mốc thời gian cụ thể: `2024-01-15 14:30:00`.
18
- - Ghi chuẩn xác cả `GIT_AUTHOR_DATE` và `GIT_COMMITTER_DATE`.
19
- - 🛡️ **Zero-Leak Secret Shield**:
20
- - Quét trước các file nhạy cảm (`.env`, `.npmrc`, private keys, API keys).
21
- - Tự động gỡ khỏi stage và bổ sung vào `.gitignore` an toàn mà không làm mất file trên máy của bạn.
22
- - Tự động squash làm sạch lịch sử unpushed nếu từng vô tình commit key bí mật.
23
- - 🎨 **Giao diện Terminal UI hiện đại**:
24
- - Thiết kế Dashboard trực quan hiển thị thư mục, branch, trạng thái GitHub.
25
- - Hỗ trợ nút `« Quay lại` ở tất cả các bước (hoặc gõ `..`).
26
- - Hộp thoại màu sắc chuẩn Cyberpunk / DevTools sắc nét, không dùng emoji dư thừa.
27
-
28
- ---
29
-
30
- ## 📦 Cài đặt
31
-
32
- ### Cách 1: Cài đặt toàn cục (Khuyên dùng)
33
- ```bash
34
- npm install -g git-push-time
35
- ```
36
- Sau khi cài đặt, bạn có thể gọi lệnh `git-push-time`, `githubcli` hoặc `git-custom-push` ở bất kỳ thư mục nào!
37
-
38
- ### Cách 2: Chạy trực tiếp với `npx`
39
- ```bash
40
- npx git-push-time
41
- ```
42
-
43
- ---
44
-
45
- ## 🧭 Quy trình hoạt động (Workflow)
46
-
47
- ```text
48
- git-push-time github login
49
- │
50
- ▼
51
- 🌐 GitHub Login (OAuth Device Flow / Personal Access Token)
52
- │
53
- ▼
54
- 🔑 Mở trình duyệt xác nhận mã User Code & Cấp quyền
55
- │
56
- ▼
57
- ✅ Đăng nhập thành công!
58
- │
59
- ▼
60
- git-push-time
61
- │
62
- ├── 📁 1. Chọn folder project
63
- │
64
- ├── 👤 2. Chọn GitHub account
65
- │
66
- ├── 📦 3. Chọn repository (chọn có sẵn / tạo mới trực tiếp / dán URL)
67
- │
68
- ├── 🌿 4. Chọn branch
69
- │
70
- ├── 💬 5. Nhập commit message
71
- │
72
- ├── ⏰ 6. Chọn commit time (ngay bây giờ / backdate lùi giờ / ngày cụ thể)
73
- │
74
- └── 🚀 7. Push (quét secret, commit & đẩy lên remote)
75
- ```
76
-
77
- ---
78
-
79
- ## 🛠️ Hướng dẫn sử dụng
80
-
81
- ### 1. Bảng điều khiển tương tác (Interactive Dashboard)
82
- Mở terminal tại thư mục dự án và chạy:
83
- ```bash
84
- git-push-time
85
- ```
86
- Menu tương tác chính sẽ xuất hiện với các phân mục rõ ràng:
87
- - `» [PUSH] | Đẩy code lên Git (kèm chọn folder, backdate & chống lộ secret)`
88
- - `» [GITHUB] | Quản lý GitHub & Tạo repository mới`
89
- - `» [PULL] | Cập nhật code mới về máy (Fast-forward / Rebase)`
90
- - `» [TIME] | Sửa thời gian commit lịch sử`
91
- - `» [FIX] | Quét & gỡ sạch secret khỏi repo`
92
- - `x [THOÁT] | Kết thúc chương trình`
93
-
94
- ---
95
-
96
- ### 2. Tính năng GitHub & Tạo Repository
97
-
98
- #### Tạo Repository mới trên GitHub ngay lập tức:
99
- ```bash
100
- git-push-time github create
101
- ```
102
- Hệ thống sẽ hỏi bạn:
103
- 1. **Tên Repository** (Mặc định tự lấy theo tên folder hiện tại).
104
- 2. **Mô tả dự án**.
105
- 3. **Quyền riêng tư**: Public hoặc Private.
106
- 4. **Hỏi đẩy code ngay**: Nếu chọn Có, CLI sẽ tự động liên kết remote và đẩy toàn bộ source code của bạn lên repo vừa tạo!
107
-
108
- #### Xem thông tin tài khoản GitHub đang kết nối:
109
- ```bash
110
- git-push-time github whoami
111
- ```
112
-
113
- #### Liệt kê các Repository trên tài khoản GitHub của bạn:
114
- ```bash
115
- git-push-time github repos
116
- ```
117
-
118
- #### Đăng nhập bằng Personal Access Token (PAT):
119
- ```bash
120
- git-push-time github login
121
- ```
122
- *(Token cần có quyền `repo` để tạo và quản lý repository)*.
123
-
124
- #### Đăng xuất:
125
- ```bash
126
- git-push-time github logout
127
- ```
128
-
129
- ---
130
-
131
- ### 3. Đẩy dự án bằng tham số dòng lệnh (Command Line Flags)
132
-
133
- #### Ví dụ 1: Lùi thời gian commit 2 ngày trước
134
- ```bash
135
- git-push-time -r https://github.com/username/my-repo.git -d "-2d" -m "Initial commit"
136
- ```
137
-
138
- #### Ví dụ 2: Đặt ngày giờ commit cụ thể trong quá khứ
139
- ```bash
140
- git-push-time -r https://github.com/username/my-repo.git -d "2024-01-15 14:30:00" -m "Add core features"
141
- ```
142
-
143
- #### Ví dụ 3: Đẩy tự động không hỏi lại (-y) và tự gỡ secret (--fix)
144
- ```bash
145
- git-push-time -r https://github.com/username/my-repo.git -d "-5h" -m "Update docs" -b main -y --fix
146
- ```
147
-
148
- #### Ví dụ 4: Chỉ push đúng 1 thư mục con (khi đứng ở thư mục gốc ngoài cùng)
149
- ```bash
150
- git-push-time -r https://github.com/username/my-repo.git -m "Init" --dir ./my-app -y
151
- ```
152
-
153
- ---
154
-
155
- ### 4. Các lệnh độc lập khác
156
-
157
- #### Quét và tự động làm sạch Secret:
158
- ```bash
159
- git-push-time fix
160
- ```
161
-
162
- #### Cập nhật code mới từ remote:
163
- ```bash
164
- git-push-time pull
165
- ```
166
-
167
- #### Sửa đổi thời gian commit cũ trong lịch sử:
168
- ```bash
169
- git-push-time edit-time
170
- ```
171
-
172
- ---
173
-
174
- ## 📊 Bảng định dạng thời gian hỗ trợ
175
-
176
- | Định dạng ví dụ | Ý nghĩa |
177
- | :--- | :--- |
178
- | `now` hoặc để trống | Thời gian hiện tại |
179
- | `-2d` hoặc `2d` | Lùi lại 2 ngày |
180
- | `-5h` hoặc `5h` | Lùi lại 5 giờ |
181
- | `-30m` hoặc `30m` | Lùi lại 30 phút (m = minute) |
182
- | `-1w` hoặc `1w` | Lùi lại 1 tuần |
183
- | `-3M` / `-3mo` / `-3month` | Lùi lại 3 tháng (M = month, phân biệt hoa/thường với m = minute) |
184
- | `2024-01-15 14:30:00` | Ngày 15/01/2024 lúc 14 giờ 30 phút |
185
- | `2024-01-15` | Ngày 15/01/2024 |
186
-
187
- ---
188
-
189
- ## 🏛️ Cấu trúc mã nguồn
190
-
191
- ```
192
- cli/
193
- ├── bin/
194
- │ └── index.js # CLI Entrypoint & Commander Dispatcher
195
- ├── lib/
196
- │ ├── config.js # Quản lý config & GitHub Token local
197
- │ ├── github.js # Tương tác GitHub REST API (verify, repos, create)
198
- │ ├── git.js # Các tác vụ Git cốt lõi
199
- │ ├── secrets.js # Quét phát hiện secret trong code & stage
200
- │ ├── fix.js # Thuật toán gỡ secret & squash unpushed
201
- │ ├── utils.js # Validate url & parse custom datetime
202
- │ ├── prompt-helpers.js # Interactive prompt helpers có nút Back '..'
203
- │ ├── ui.js # Design System: Banner, Dashboard, Box & Badges
204
- │ └── commands/
205
- │ ├── push.js # Wizard push thông minh tích hợp GitHub
206
- │ ├── github.js # Lệnh & Menu quản lý GitHub / Tạo repo
207
- │ ├── pull.js # Lệnh pull code (--ff-only, --rebase)
208
- │ ├── edit-time.js # Lệnh sửa thời gian commit lịch sử
209
- │ └── fix.js # Lệnh quét & sửa secret độc lập
210
- ```
211
-
212
- ---
213
-
214
- ## 📄 License
215
- Phát hành theo giấy phép **MIT**.
1
+ <div align="center">
2
+
3
+ # 🐙 GitHub CLI (`githubcli`)
4
+
5
+ **Trợ lý GitHub trên terminal — đăng nhập, tạo repo, push/pull, quét secret — tất cả trong một chỗ.**
6
+
7
+ [![npm version](https://img.shields.io/npm/v/git-push-time?style=flat-square&color=818CF8)](https://www.npmjs.com/package/git-push-time)
8
+ [![license](https://img.shields.io/npm/l/git-push-time?style=flat-square)](./LICENSE)
9
+ [![node](https://img.shields.io/node/v/git-push-time?style=flat-square&color=34D399)](https://nodejs.org)
10
+ [![platform](https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-38BDF8?style=flat-square)](https://github.com)
11
+
12
+ `githubcli` · `git-push-time` · `git-custom-push`
13
+
14
+ </div>
15
+
16
+ ---
17
+
18
+ ## ✨ Tính năng
19
+
20
+ ### 🐙 GitHub — trọng tâm chính
21
+ - **Đăng nhập linh hoạt**: OAuth Device Flow (mở trình duyệt, nhập mã) hoặc dán Personal Access Token.
22
+ - **Đa tài khoản**: lưu nhiều account, chuyển qua lại, tự nhận token từ `gh CLI` hoặc biến môi trường `GITHUB_TOKEN` / `GH_TOKEN`.
23
+ - **Tạo repository ngay trên terminal**: Public / Private, tự gợi ý tên theo folder, tạo xong hỏi đẩy code lên luôn.
24
+ - **Quản lý nhanh**: xem profile (`whoami`), duyệt repo cá nhân (`repos`), chọn repo từ danh sách không cần copy-paste URL.
25
+ - Token lưu local (`~/.git-push-time/config.json`, chmod 600).
26
+
27
+ ### 🚀 Push / Pull
28
+ - **Push wizard 7 bước**: chọn folder → account → repository (chọn sẵn / tạo mới / dán URL) → branch → message → time → xác nhận & push.
29
+ - Tự động `git init`, `remote`, `add`, `commit`, `push`; hỗ trợ `--dir`, `--force`, `-y` chạy không hỏi.
30
+ - **Pull**: `pull` fast-forward, gợi ý `--rebase` khi lệch lịch sử.
31
+ - Nút `« Quay lại` mọi bước (hoặc gõ `..`).
32
+
33
+ ### 🛡️ Secret Shield (chống lộ key, lỗi GH013)
34
+ - Quét file nhạy cảm (`.env`, `.npmrc`, private keys, API keys) trước khi push.
35
+ - Tự gỡ khỏi stage + thêm `.gitignore` (file trên máy vẫn giữ nguyên).
36
+ - Gợi ý squash các commit unpushed dính secret.
37
+
38
+ ### 🎨 Terminal UI
39
+ - Dashboard hiển thị folder, branch, trạng thái GitHub, remote.
40
+ - Khung bo tròn đồng bộ, căn đều 2 bên, màu Cyberpunk / DevTools.
41
+
42
+ > ⏰ *Đổi thời gian commit (backdate / edit-time) chỉ là tiện ích bổ sung, xem ở [Phụ lục](#-phụ-lục-tiện-ích-thời-gian-commit).*
43
+
44
+ ---
45
+
46
+ ## 📦 Cài đặt
47
+
48
+ ```bash
49
+ # Cài toàn cục (khuyên dùng) — dùng được ở mọi thư mục
50
+ npm install -g git-push-time
51
+
52
+ # Hoặc chạy trực tiếp không cần cài
53
+ npx git-push-time
54
+ ```
55
+
56
+ Yêu cầu: **Node.js ≥ 18** và **Git** đã cài đặt.
57
+
58
+ ---
59
+
60
+ ## ⚡ Bắt đầu nhanh (3 bước)
61
+
62
+ ```bash
63
+ # 1. Đăng nhập GitHub (mở trình duyệt, nhập mã xác nhận)
64
+ githubcli github login
65
+
66
+ # 2. Tạo repo mới (Public/Private), xong chọn đẩy code lên luôn
67
+ githubcli github create
68
+
69
+ # 3. Hoặc đẩy project hiện tại lên repo bất kỳ
70
+ githubcli -r https://github.com/username/my-repo.git -m "Initial commit" -b main -y
71
+ ```
72
+
73
+ Luồng wizard khi chạy tay `githubcli` (không kèm flag):
74
+
75
+ ```text
76
+ githubcli
77
+ │
78
+ ├── 📁 1. Chọn folder project
79
+ ├── 👤 2. Chọn GitHub account
80
+ ├── 📦 3. Chọn repository (có sẵn / tạo mới / dán URL)
81
+ ├── 🌿 4. Chọn branch
82
+ ├── 💬 5. Nhập commit message
83
+ ├── ⏰ 6. Chọn commit time (mặc định: ngay bây giờ)
84
+ └── 🚀 7. Xác nhận & Push (quét secret → commit → push)
85
+ ```
86
+
87
+ ---
88
+
89
+ ## 🖥️ Giao diện
90
+
91
+ ```text
92
+ ╭─────────────── git-push-time v1.1.2 ───────────────╮
93
+ │ ▲ Folder E:\my-project │
94
+ │ → Branch main ● 5 file thay đổi │
95
+ │ ◆ GitHub @username ✓ đã đăng nhập │
96
+ │ ○ Remote username/my-repo │
97
+ ╰─────────────────────────────────────────────────────╯
98
+
99
+ ╭────────────────── Xác nhận ───────────────────────╮
100
+ │ Repo username/my-repo │
101
+ │ Branch main │
102
+ │ Message "Initial commit" │
103
+ │ Time now │
104
+ ╰─────────────────────────────────────────────────────╯
105
+ ```
106
+
107
+ ---
108
+
109
+ ## 🛠️ Lệnh
110
+
111
+ ### GitHub
112
+
113
+ | Lệnh | Mô tả |
114
+ | :--- | :--- |
115
+ | `githubcli github login` | Đăng nhập (OAuth Device Flow hoặc PAT — token cần quyền `repo`) |
116
+ | `githubcli github logout` | Đăng xuất, xóa token khỏi máy |
117
+ | `githubcli github whoami` | Xem profile tài khoản đang kết nối |
118
+ | `githubcli github repos` | Liệt kê repository cá nhân |
119
+ | `githubcli github create` | Tạo repo mới, hỏi đẩy code lên ngay |
120
+ | `githubcli github` | Mở menu quản lý GitHub tương tác |
121
+
122
+ ### Push / Pull / Fix
123
+
124
+ | Lệnh | Mô tả |
125
+ | :--- | :--- |
126
+ | `githubcli` | Mở dashboard tương tác (Push / GitHub / Pull / Time / Fix) |
127
+ | `githubcli -r <url> -m "<msg>" -b <branch> -y` | Push nhanh không hỏi lại |
128
+ | `githubcli --dir ./my-app -r <url> -m "Init" -y` | Chỉ push 1 thư mục con |
129
+ | `githubcli pull [remote] [branch]` | Kéo code mới (fast-forward, gợi ý `--rebase` khi cần) |
130
+ | `githubcli fix` | Quét & gỡ secret, cập nhật `.gitignore`, làm sạch commit unpushed |
131
+
132
+ ### Flags khi push
133
+
134
+ | Flag | Ý nghĩa | Ví dụ |
135
+ | :--- | :--- | :--- |
136
+ | `-r, --repo <url>` | URL repository | `-r https://github.com/user/repo.git` |
137
+ | `-m, --message <msg>` | Commit message | `-m "Add login"` |
138
+ | `-b, --branch <branch>` | Branch remote (mặc định `main`) | `-b dev` |
139
+ | `-d, --date <time>` | Thời gian commit (mặc định `now`) | `-d "-2d"` |
140
+ | `-C, --dir <path>` | Thư mục nguồn | `--dir ./my-app` |
141
+ | `-f, --force` | Push đè (`--force`) | — |
142
+ | `-y, --yes` | Bỏ qua hỏi, dùng tham số/mặc định | — |
143
+ | `--fix` | Tự gỡ secret trước khi commit | — |
144
+
145
+ ---
146
+
147
+ ## 🔑 Token & đăng nhập
148
+
149
+ Thứ tự ưu tiên khi lấy token:
150
+
151
+ 1. Biến môi trường `GITHUB_TOKEN` hoặc `GH_TOKEN`
152
+ 2. Tài khoản active trong `~/.git-push-time/config.json`
153
+ 3. Token từ `gh` CLI (`gh auth token`) nếu máy có cài
154
+
155
+ ---
156
+
157
+ ## ⏳ Phụ lục: tiện ích thời gian commit
158
+
159
+ <details>
160
+ <summary><b>Mở rộng: backdate khi push & sửa commit cũ</b></summary>
161
+
162
+ <br>
163
+
164
+ Khi push có thể gắn thời gian tùy chỉnh bằng flag `-d`:
165
+
166
+ ```bash
167
+ githubcli -r https://github.com/user/repo.git -d "-2d" -m "Initial commit" -y
168
+ githubcli -r https://github.com/user/repo.git -d "2024-01-15 14:30:00" -m "Add core" -y
169
+ ```
170
+
171
+ Sửa thời gian commit đã có trong lịch sử:
172
+
173
+ ```bash
174
+ githubcli edit-time
175
+ ```
176
+
177
+ | Định dạng | Ý nghĩa |
178
+ | :--- | :--- |
179
+ | `now` / để trống | Giờ hiện tại |
180
+ | `-2d` / `2d` | Lùi 2 ngày |
181
+ | `-5h` / `5h` | Lùi 5 giờ |
182
+ | `-30m` / `30m` | Lùi 30 phút (`m` = minute) |
183
+ | `-1w` / `1w` | Lùi 1 tuần |
184
+ | `-3M` / `-3mo` | Lùi 3 tháng (`M` = month) |
185
+ | `2024-01-15 14:30:00` | Ngày giờ cụ thể |
186
+ | `2024-01-15` | Ngày cụ thể |
187
+
188
+ </details>
189
+
190
+ ---
191
+
192
+ ## 🏛️ Cấu trúc mã nguồn
193
+
194
+ ```
195
+ cli/
196
+ ├── bin/
197
+ │ └── index.js # Entrypoint & Commander dispatcher
198
+ ├── lib/
199
+ │ ├── config.js # Config & token GitHub local
200
+ │ ├── github.js # GitHub REST API (verify, repos, create)
201
+ │ ├── git.js # Tác vụ Git cốt lõi
202
+ │ ├── secrets.js # Quét secret trong stage
203
+ │ ├── fix.js # Gỡ secret & squash unpushed
204
+ │ ├── utils.js # Validate URL & parse datetime
205
+ │ ├── prompt-helpers.js # Prompt trong khung (Back '..')
206
+ │ ├── ui.js # Design system: Banner, Box, Dashboard
207
+ │ └── commands/
208
+ │ ├── push.js # Wizard push tích hợp GitHub
209
+ │ ├── github.js # Menu & lệnh GitHub
210
+ │ ├── pull.js # Pull (--ff-only / --rebase)
211
+ │ ├── edit-time.js # Sửa thời gian commit
212
+ │ └── fix.js # Quét & sửa secret
213
+ ```
214
+
215
+ ---
216
+
217
+ ## 📄 License
218
+
219
+ Phát hành theo giấy phép **MIT**.