mn-spellcheck 1.0.0 → 1.1.0
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.
- package/README.md +58 -99
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +217 -0
- package/dist/cli.js.map +1 -0
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -1,32 +1,72 @@
|
|
|
1
1
|
# mn-spellcheck
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/mn-spellcheck)
|
|
4
|
-
[](https://github.com/
|
|
4
|
+
[](https://github.com/Ankhb0ld/mn-spellcheck/blob/main/LICENSE)
|
|
5
5
|
|
|
6
|
-
Монгол кирилл бичгийн алдаа шалгагч / Mongolian Cyrillic spell checker for Node.js and websites.
|
|
6
|
+
Монгол кирилл бичгийн алдаа шалгагч / Mongolian Cyrillic spell checker for Node.js, CLI, and websites.
|
|
7
7
|
|
|
8
8
|
580,000+ root words, suffix analysis, compound word support — powered by [bataak/dict-mn](https://github.com/bataak/dict-mn).
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Боломжууд
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
12
|
+
- **580,000+ root word** dictionary
|
|
13
|
+
- **Suffix stripping** — нөхцөл дагавартай үгсийг шалгах
|
|
14
|
+
- **Compound word** — нийлмэл үг шалгах
|
|
15
|
+
- **Common rules** — түгээмэл алдааны автомат засвар (ү/у, ө/о, -гүй/-гуй)
|
|
16
|
+
- **Suggestion engine** — REP дүрмүүд болон edit distance ашиглан санал болгох
|
|
17
|
+
- **CLI хэрэгсэл** — Терминалаас бүх файлыг шалгаж, автоматаар засах боломжтой
|
|
18
|
+
- **Бүтэн текст шалгах** — `checkText()` ашиглаж засах
|
|
19
|
+
- **HTML шалгах** — `checkHTML()` ашиглаж website-ийн текстийг шалгах
|
|
20
|
+
- **Эгшиг зохицох ёс** — vowel harmony шалгалт
|
|
21
|
+
- **Node.js, Browser** болон **TypeScript** дэмжинэ.
|
|
22
22
|
|
|
23
23
|
## Суулгах / Install
|
|
24
24
|
|
|
25
|
+
Төсөлд шууд суулгах:
|
|
26
|
+
|
|
25
27
|
```bash
|
|
26
28
|
npm install mn-spellcheck
|
|
27
29
|
```
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
Шууд глобал эсвэл CLI байдлаар ашиглах:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install -g mn-spellcheck
|
|
35
|
+
# эсвэл
|
|
36
|
+
npx mn-spellcheck --help
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## CLI команд (Терминалаас ашиглах)
|
|
40
|
+
|
|
41
|
+
Төслийн бүх файлын алдааг терминалаас хялбархан шалгаж, автоматаар засах боломжтой.
|
|
42
|
+
|
|
43
|
+
### Алдаа шалгах (Check)
|
|
44
|
+
|
|
45
|
+
Тухайн хавтас доторх бүх файлыг шалгаж, алдаатай үгс болон санал болгож буй хувилбаруудыг харуулна:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx mn-spellcheck check
|
|
49
|
+
npx mn-spellcheck check ./src
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Автоматаар засах (Fix)
|
|
53
|
+
|
|
54
|
+
Олдсон алдаануудыг болон нийтлэг дүрмийн алдаануудыг автоматаар файланд нь орж засна:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx mn-spellcheck fix
|
|
58
|
+
npx mn-spellcheck fix ./src
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Нэмэлт тохиргоо
|
|
62
|
+
|
|
63
|
+
Анхны тохиргоогоор `.html`, `.tsx`, `.jsx`, `.md`, `.txt` файлуудыг шалгана. Файлын өргөтгөлийг өөрчлөх бол `--ext` ашиглана:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npx mn-spellcheck check ./src --ext .svelte,.vue,.ts
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Хөгжүүлэлтэд ашиглах (API)
|
|
30
70
|
|
|
31
71
|
### Үндсэн хэрэглээ
|
|
32
72
|
|
|
@@ -37,12 +77,10 @@ const checker = createSpellChecker();
|
|
|
37
77
|
|
|
38
78
|
// Нэг үг шалгах
|
|
39
79
|
checker.correct('сайн'); // true
|
|
40
|
-
checker.correct('байна'); // true
|
|
41
80
|
checker.correct('монгл'); // false
|
|
42
81
|
|
|
43
82
|
// Suggestion авах
|
|
44
83
|
checker.suggest('монгл'); // ['монгол']
|
|
45
|
-
checker.suggest('сургуль'); // ['сургууль', ...]
|
|
46
84
|
|
|
47
85
|
// Дэлгэрэнгүй шалгалт
|
|
48
86
|
checker.check('монгл');
|
|
@@ -57,13 +95,12 @@ const result = checker.checkText('Би мэдэхгуй байна ,энэ бо
|
|
|
57
95
|
console.log(result.corrected);
|
|
58
96
|
// "Би мэдэхгүй байна, энэ болохгүй юм."
|
|
59
97
|
|
|
60
|
-
console.log(result.errorCount);
|
|
61
|
-
console.log(result.errors);
|
|
98
|
+
console.log(result.errorCount);
|
|
99
|
+
console.log(result.errors);
|
|
62
100
|
```
|
|
63
101
|
|
|
64
|
-
###
|
|
102
|
+
### Website / HTML текст шалгах
|
|
65
103
|
|
|
66
|
-
Website-ийн HTML контентыг шалгахад `checkHTML()` функцийг ашиглана.
|
|
67
104
|
HTML таг, script, style бүгдийг алгасаж зөвхөн текстийг шалгана.
|
|
68
105
|
|
|
69
106
|
```js
|
|
@@ -72,31 +109,6 @@ const result = checker.checkHTML(html);
|
|
|
72
109
|
|
|
73
110
|
console.log(result.corrected);
|
|
74
111
|
// "өнөөдөр сайхан өдөр хүмүүс олон байна"
|
|
75
|
-
|
|
76
|
-
console.log(result.errorCount);
|
|
77
|
-
console.log(result.errors);
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
**Жишээ: Express middleware**
|
|
81
|
-
|
|
82
|
-
```js
|
|
83
|
-
const express = require('express');
|
|
84
|
-
const { createSpellChecker } = require('mn-spellcheck');
|
|
85
|
-
|
|
86
|
-
const checker = createSpellChecker();
|
|
87
|
-
const app = express();
|
|
88
|
-
|
|
89
|
-
app.post('/api/spellcheck', express.json(), (req, res) => {
|
|
90
|
-
const { text } = req.body;
|
|
91
|
-
const result = checker.checkText(text);
|
|
92
|
-
res.json(result);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
app.post('/api/spellcheck-html', express.json(), (req, res) => {
|
|
96
|
-
const { html } = req.body;
|
|
97
|
-
const result = checker.checkHTML(html);
|
|
98
|
-
res.json(result);
|
|
99
|
-
});
|
|
100
112
|
```
|
|
101
113
|
|
|
102
114
|
### Нэмэлт үг нэмэх
|
|
@@ -106,7 +118,6 @@ const checker = createSpellChecker({
|
|
|
106
118
|
customWords: ['клауд', 'энтерпрайз']
|
|
107
119
|
});
|
|
108
120
|
|
|
109
|
-
// Эсвэл дараа нь нэмэх
|
|
110
121
|
checker.addWord('блокчейн');
|
|
111
122
|
checker.addWords(['крипто', 'токен']);
|
|
112
123
|
```
|
|
@@ -121,52 +132,6 @@ const checker = createSpellChecker({
|
|
|
121
132
|
});
|
|
122
133
|
```
|
|
123
134
|
|
|
124
|
-
## API
|
|
125
|
-
|
|
126
|
-
### `createSpellChecker(options?)`
|
|
127
|
-
Шинэ spell checker үүсгэнэ.
|
|
128
|
-
|
|
129
|
-
### `checker.correct(word): boolean`
|
|
130
|
-
Үг зөв эсэхийг шалгана.
|
|
131
|
-
|
|
132
|
-
### `checker.check(word): SpellResult`
|
|
133
|
-
Үгийг шалгаж дэлгэрэнгүй үр дүн буцаана.
|
|
134
|
-
```ts
|
|
135
|
-
interface SpellResult {
|
|
136
|
-
word: string;
|
|
137
|
-
correct: boolean;
|
|
138
|
-
suggestions: string[];
|
|
139
|
-
}
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### `checker.suggest(word): string[]`
|
|
143
|
-
Алдаатай үгэнд засвар санал болгоно.
|
|
144
|
-
|
|
145
|
-
### `checker.checkText(text): TextCheckResult`
|
|
146
|
-
Бүтэн текстийг шалгана. Common rules + dictionary check.
|
|
147
|
-
```ts
|
|
148
|
-
interface TextCheckResult {
|
|
149
|
-
errorCount: number;
|
|
150
|
-
errors: Suggestion[];
|
|
151
|
-
corrected: string; // Автоматаар засарсан текст
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### `checker.checkHTML(html): TextCheckResult`
|
|
156
|
-
HTML контентоос текстийг ялган авч шалгана. Script, style блокуудыг алгасна.
|
|
157
|
-
|
|
158
|
-
### `checker.addWord(word)` / `checker.addWords(words)`
|
|
159
|
-
Dictionary-д шинэ үг нэмнэ.
|
|
160
|
-
|
|
161
|
-
### `checker.removeWord(word)`
|
|
162
|
-
Dictionary-аас үг хасна.
|
|
163
|
-
|
|
164
|
-
### `checker.wordCount`
|
|
165
|
-
Dictionary-д хэдэн root word байгааг буцаана.
|
|
166
|
-
|
|
167
|
-
### `checker.ready`
|
|
168
|
-
Checker амжилттай ачаалагдсан эсэхийг шалгана.
|
|
169
|
-
|
|
170
135
|
## Common Rules (Автомат засвар)
|
|
171
136
|
|
|
172
137
|
42 дүрэм бүхий автомат засвар. Дараах түгээмэл алдаануудыг засна:
|
|
@@ -196,7 +161,6 @@ Checker амжилттай ачаалагдсан эсэхийг шалгана.
|
|
|
196
161
|
## Browser дээр ашиглах
|
|
197
162
|
|
|
198
163
|
```js
|
|
199
|
-
// .aff, .dic файлуудыг fetch хийж дамжуулна
|
|
200
164
|
const affContent = await fetch('/dict/index.aff').then(r => r.text());
|
|
201
165
|
const dicContent = await fetch('/dict/index.dic').then(r => r.text());
|
|
202
166
|
|
|
@@ -208,18 +172,13 @@ const checker = createSpellChecker({
|
|
|
208
172
|
checker.correct('сайн'); // true
|
|
209
173
|
```
|
|
210
174
|
|
|
211
|
-
## Common Rules
|
|
175
|
+
## Common Rules тусад нь ашиглах
|
|
212
176
|
|
|
213
177
|
```js
|
|
214
178
|
const { applyCommonRules, COMMON_RULES } = require('mn-spellcheck');
|
|
215
179
|
|
|
216
|
-
// Зөвхөн common rules ашиглах (dictionary ачаалахгүй — хурдан)
|
|
217
180
|
const result = applyCommonRules('Би мэдэхгуй байна');
|
|
218
181
|
console.log(result.corrected); // "Би мэдэхгүй байна"
|
|
219
|
-
console.log(result.appliedRules); // ["-хгүй нөхцөл нь ү-тэй..."]
|
|
220
|
-
|
|
221
|
-
// Нийт дүрмийн жагсаалт
|
|
222
|
-
console.log(COMMON_RULES.length); // 42
|
|
223
182
|
```
|
|
224
183
|
|
|
225
184
|
## Лиценз / License
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const checker_1 = require("./checker");
|
|
40
|
+
const rules_1 = require("./rules");
|
|
41
|
+
const RED = '\x1b[31m';
|
|
42
|
+
const GREEN = '\x1b[32m';
|
|
43
|
+
const YELLOW = '\x1b[33m';
|
|
44
|
+
const BLUE = '\x1b[34m';
|
|
45
|
+
const GRAY = '\x1b[90m';
|
|
46
|
+
const RESET = '\x1b[0m';
|
|
47
|
+
function printHelp() {
|
|
48
|
+
console.log(`
|
|
49
|
+
Usage: mn-spellcheck [command] [options]
|
|
50
|
+
|
|
51
|
+
Commands:
|
|
52
|
+
check [path] Алдаатай үгсийг хайж, жагсааж харуулна
|
|
53
|
+
fix [path] Олдсон алдаануудыг автоматаар засна
|
|
54
|
+
|
|
55
|
+
Опционууд:
|
|
56
|
+
--ext <exts> Шалгах файлын өргөтгөлүүд (жишээ: .html,.md,.txt)
|
|
57
|
+
Үндсэн утга: .html,.tsx,.jsx,.md,.txt
|
|
58
|
+
-h, --help Тусламж харуулах
|
|
59
|
+
|
|
60
|
+
Жишээ:
|
|
61
|
+
mn-spellcheck check
|
|
62
|
+
mn-spellcheck check ./src
|
|
63
|
+
mn-spellcheck fix ./pages --ext .html,.txt
|
|
64
|
+
`);
|
|
65
|
+
}
|
|
66
|
+
function getExts(args) {
|
|
67
|
+
const extIndex = args.findIndex(a => a === '--ext');
|
|
68
|
+
if (extIndex >= 0 && args.length > extIndex + 1) {
|
|
69
|
+
return args[extIndex + 1].split(',').map(e => e.trim());
|
|
70
|
+
}
|
|
71
|
+
return ['.html', '.tsx', '.jsx', '.md', '.txt'];
|
|
72
|
+
}
|
|
73
|
+
function findFiles(dir, exts, fileList = []) {
|
|
74
|
+
if (!fs.existsSync(dir))
|
|
75
|
+
return fileList;
|
|
76
|
+
const stat = fs.statSync(dir);
|
|
77
|
+
if (stat.isFile()) {
|
|
78
|
+
if (exts.some(ext => dir.endsWith(ext))) {
|
|
79
|
+
fileList.push(dir);
|
|
80
|
+
}
|
|
81
|
+
return fileList;
|
|
82
|
+
}
|
|
83
|
+
const files = fs.readdirSync(dir);
|
|
84
|
+
for (const file of files) {
|
|
85
|
+
if (file === 'node_modules' || file === 'dist' || file === '.git')
|
|
86
|
+
continue;
|
|
87
|
+
const filePath = path.join(dir, file);
|
|
88
|
+
if (fs.statSync(filePath).isDirectory()) {
|
|
89
|
+
findFiles(filePath, exts, fileList);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
if (exts.some(ext => file.endsWith(ext))) {
|
|
93
|
+
fileList.push(filePath);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return fileList;
|
|
98
|
+
}
|
|
99
|
+
function extractCyrillicWords(text) {
|
|
100
|
+
const words = [];
|
|
101
|
+
const lines = text.split('\n');
|
|
102
|
+
let currentIndex = 0;
|
|
103
|
+
const regex = /[а-яА-ЯөӨүҮёЁ-]+/g;
|
|
104
|
+
for (let i = 0; i < lines.length; i++) {
|
|
105
|
+
const line = lines[i];
|
|
106
|
+
let match;
|
|
107
|
+
while ((match = regex.exec(line)) !== null) {
|
|
108
|
+
if (match[0].length <= 1)
|
|
109
|
+
continue; // Ганц үсэг алгасах
|
|
110
|
+
words.push({
|
|
111
|
+
word: match[0],
|
|
112
|
+
index: currentIndex + match.index,
|
|
113
|
+
line: i + 1
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
currentIndex += line.length + 1; // +1 for '\n'
|
|
117
|
+
}
|
|
118
|
+
return words;
|
|
119
|
+
}
|
|
120
|
+
async function runDir(mode, targetPath, exts) {
|
|
121
|
+
const checker = new checker_1.MnSpellChecker();
|
|
122
|
+
const files = findFiles(targetPath, exts);
|
|
123
|
+
if (files.length === 0) {
|
|
124
|
+
console.log(`${YELLOW}Шалгах файл олдсонгүй: ${targetPath}${RESET}`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
let totalErrors = 0;
|
|
128
|
+
let totalFixed = 0;
|
|
129
|
+
console.log(`${BLUE}Нийт ${files.length} файл шалгаж байна...${RESET}\n`);
|
|
130
|
+
for (const file of files) {
|
|
131
|
+
let content = fs.readFileSync(file, 'utf8');
|
|
132
|
+
const originalContent = content;
|
|
133
|
+
let fileErrors = 0;
|
|
134
|
+
const fixesMade = [];
|
|
135
|
+
// Auto-fix common rules first if in FIX mode
|
|
136
|
+
if (mode === 'fix') {
|
|
137
|
+
const ruleResult = (0, rules_1.applyCommonRules)(content);
|
|
138
|
+
if (ruleResult.appliedRules.length > 0) {
|
|
139
|
+
content = ruleResult.corrected;
|
|
140
|
+
fixesMade.push(`Нийтлэг дүрэм засварлагдсан (${ruleResult.appliedRules.length})`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const words = extractCyrillicWords(content);
|
|
144
|
+
const errorsToFix = [];
|
|
145
|
+
for (const { word, line, index } of words) {
|
|
146
|
+
// Илүү нарийн шалгалт (Тоо болон латин үсэгтэй үгийг алгасах)
|
|
147
|
+
if (/^[a-zA-Z0-9]+$/.test(word))
|
|
148
|
+
continue;
|
|
149
|
+
if (!checker.correct(word)) {
|
|
150
|
+
const suggestions = checker.suggest(word);
|
|
151
|
+
fileErrors++;
|
|
152
|
+
totalErrors++;
|
|
153
|
+
if (mode === 'check') {
|
|
154
|
+
const suggStr = suggestions.length > 0 ? suggestions.slice(0, 3).join(', ') : 'Санал олдсонгүй';
|
|
155
|
+
console.log(` ${GRAY}${file}:${line}${RESET} - ${RED}${word}${RESET} -> ${GREEN}${suggStr}${RESET}`);
|
|
156
|
+
}
|
|
157
|
+
else if (mode === 'fix' && suggestions.length > 0) {
|
|
158
|
+
// Засах жагсаалтад нэмэх
|
|
159
|
+
errorsToFix.push({
|
|
160
|
+
index,
|
|
161
|
+
length: word.length,
|
|
162
|
+
replacement: suggestions[0]
|
|
163
|
+
});
|
|
164
|
+
fixesMade.push(`${word} -> ${suggestions[0]}`);
|
|
165
|
+
totalFixed++;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (mode === 'fix' && (fixesMade.length > 0 || content !== originalContent)) {
|
|
170
|
+
// Ухрах чиглэлд засах (индекс зөрөхөөс сэргийлэх)
|
|
171
|
+
errorsToFix.sort((a, b) => b.index - a.index);
|
|
172
|
+
for (const fix of errorsToFix) {
|
|
173
|
+
content = content.substring(0, fix.index) + fix.replacement + content.substring(fix.index + fix.length);
|
|
174
|
+
}
|
|
175
|
+
fs.writeFileSync(file, content, 'utf8');
|
|
176
|
+
console.log(` ${GREEN}✓ Засагдсан: ${file}${RESET} (${fixesMade.length} алдаа)`);
|
|
177
|
+
}
|
|
178
|
+
else if (mode === 'check' && fileErrors > 0) {
|
|
179
|
+
console.log(`--> ${file} файлд нийт ${fileErrors} алдаа олдлоо.\n`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
console.log('\n=======================================');
|
|
183
|
+
if (mode === 'check') {
|
|
184
|
+
if (totalErrors === 0) {
|
|
185
|
+
console.log(`${GREEN}Ямар ч алдаа олдсонгүй. Гайхалтай!${RESET}`);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
console.log(`${RED}Нийт ${totalErrors} алдаа олдлоо.${RESET}`);
|
|
189
|
+
console.log(`Автоматаар засахыг хүсвэл: ${BLUE}npx mn-spellcheck fix${RESET}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
console.log(`${GREEN}Нийт ${totalFixed} алдааг амжилттай засаж хадгаллаа!${RESET}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async function main() {
|
|
197
|
+
const args = process.argv.slice(2);
|
|
198
|
+
if (args.length === 0 || args.includes('-h') || args.includes('--help')) {
|
|
199
|
+
printHelp();
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const command = args[0];
|
|
203
|
+
if (command !== 'check' && command !== 'fix') {
|
|
204
|
+
console.log(`${RED}Тодорхойгүй команд: ${command}${RESET}\n`);
|
|
205
|
+
printHelp();
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
let targetPath = args[1] && !args[1].startsWith('-') ? args[1] : '.';
|
|
209
|
+
targetPath = path.resolve(targetPath);
|
|
210
|
+
const exts = getExts(args);
|
|
211
|
+
await runDir(command, targetPath, exts);
|
|
212
|
+
}
|
|
213
|
+
main().catch(err => {
|
|
214
|
+
console.error(`${RED}Алдаа гарлаа:${RESET}`, err);
|
|
215
|
+
process.exit(1);
|
|
216
|
+
});
|
|
217
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mn-spellcheck",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Монгол кирилл бичгийн алдаа шалгагч / Mongolian Cyrillic spell checker for websites and Node.js",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mn-spellcheck": "./dist/cli.js"
|
|
9
|
+
},
|
|
7
10
|
"exports": {
|
|
8
11
|
".": {
|
|
9
12
|
"types": "./dist/index.d.ts",
|