vietnamese-phonetic-transcript 1.0.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/LICENSE.md +33 -0
- package/README.md +314 -0
- package/dist/index.cjs +273 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +27 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +245 -0
- package/dist/index.js.map +1 -0
- package/package.json +54 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
|
2
|
+
|
|
3
|
+
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
|
|
4
|
+
|
|
5
|
+
## Section 1 – Definitions.
|
|
6
|
+
|
|
7
|
+
- **Licensed Material**: the artistic or literary work, database, or other material to which the Licensor applied this Public License.
|
|
8
|
+
- **Licensor**: the individual(s) or entity(ies) granting rights under this Public License.
|
|
9
|
+
- **You**: the individual or entity exercising the Licensed Rights under this Public License.
|
|
10
|
+
- **Share**: to provide material to the public by any means or process.
|
|
11
|
+
- **Adapted Material**: material derived from or modified based on the Licensed Material.
|
|
12
|
+
- **NonCommercial**: not primarily intended for or directed towards commercial advantage or monetary compensation.
|
|
13
|
+
|
|
14
|
+
## Section 2 – Scope.
|
|
15
|
+
|
|
16
|
+
### 2.1 License Grant
|
|
17
|
+
|
|
18
|
+
Subject to the terms of this Public License, the Licensor grants You a worldwide, royalty-free, non-exclusive, irrevocable license to:
|
|
19
|
+
|
|
20
|
+
- **Share**: copy and redistribute the Licensed Material in any medium or format.
|
|
21
|
+
- **Adapt**: remix, transform, and build upon the Licensed Material.
|
|
22
|
+
|
|
23
|
+
### 2.2 Conditions
|
|
24
|
+
|
|
25
|
+
- **Attribution (BY)**: You must give appropriate credit, provide a link to the license, and indicate if changes were made.
|
|
26
|
+
- **NonCommercial (NC)**: You may **not** use the material for commercial purposes.
|
|
27
|
+
- **ShareAlike (SA)**: If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
|
|
28
|
+
|
|
29
|
+
## Section 3 – Disclaimer.
|
|
30
|
+
|
|
31
|
+
The Licensed Material is provided "as-is" without any warranties or guarantees. The Licensor is not liable for any damages arising from its use.
|
|
32
|
+
|
|
33
|
+
**Full License Text:** [Creative Commons License](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode)
|
package/README.md
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<h1>vietnamese-phonetic-transcript</h1>
|
|
4
|
+
|
|
5
|
+
<p>
|
|
6
|
+
Vietnamese Phonetic Transcript
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<!-- Badges -->
|
|
10
|
+
<p>
|
|
11
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript/graphs/contributors">
|
|
12
|
+
<img src="https://img.shields.io/github/contributors/DuckyMomo20012/vietnamese-phonetic-transcript" alt="contributors" />
|
|
13
|
+
</a>
|
|
14
|
+
<a href="">
|
|
15
|
+
<img src="https://img.shields.io/github/last-commit/DuckyMomo20012/vietnamese-phonetic-transcript" alt="last update" />
|
|
16
|
+
</a>
|
|
17
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript/network/members">
|
|
18
|
+
<img src="https://img.shields.io/github/forks/DuckyMomo20012/vietnamese-phonetic-transcript" alt="forks" />
|
|
19
|
+
</a>
|
|
20
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript/stargazers">
|
|
21
|
+
<img src="https://img.shields.io/github/stars/DuckyMomo20012/vietnamese-phonetic-transcript" alt="stars" />
|
|
22
|
+
</a>
|
|
23
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript/issues/">
|
|
24
|
+
<img src="https://img.shields.io/github/issues/DuckyMomo20012/vietnamese-phonetic-transcript" alt="open issues" />
|
|
25
|
+
</a>
|
|
26
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript/blob/main/LICENSE.md">
|
|
27
|
+
<img src="https://img.shields.io/github/license/DuckyMomo20012/vietnamese-phonetic-transcript.svg" alt="license" />
|
|
28
|
+
</a>
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
<h4>
|
|
32
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript/">View Demo</a>
|
|
33
|
+
<span> · </span>
|
|
34
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript">Documentation</a>
|
|
35
|
+
<span> · </span>
|
|
36
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript/issues/">Report Bug</a>
|
|
37
|
+
<span> · </span>
|
|
38
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript/issues/">Request Feature</a>
|
|
39
|
+
</h4>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<br />
|
|
43
|
+
|
|
44
|
+
<!-- Table of Contents -->
|
|
45
|
+
|
|
46
|
+
# :notebook_with_decorative_cover: Table of Contents
|
|
47
|
+
|
|
48
|
+
- [Getting Started](#toolbox-getting-started)
|
|
49
|
+
- [Prerequisites](#bangbang-prerequisites)
|
|
50
|
+
- [Run Locally](#running-run-locally)
|
|
51
|
+
- [Usage](#eyes-usage)
|
|
52
|
+
- [Bảng phiên âm âm vị học Tiếng Việt](#bảng-phiên-âm-âm-vị-học-tiếng-việt)
|
|
53
|
+
- [Hệ thống âm đầu](#hệ-thống-âm-đầu)
|
|
54
|
+
- [Hệ thống âm đệm](#hệ-thống-âm-đệm)
|
|
55
|
+
- [Hệ thống âm chính](#hệ-thống-âm-chính)
|
|
56
|
+
- [Hệ thống âm cuối](#hệ-thống-âm-cuối)
|
|
57
|
+
- [Contributing](#wave-contributing)
|
|
58
|
+
- [Code of Conduct](#scroll-code-of-conduct)
|
|
59
|
+
- [License](#warning-license)
|
|
60
|
+
- [Contact](#handshake-contact)
|
|
61
|
+
|
|
62
|
+
<!-- Getting Started -->
|
|
63
|
+
|
|
64
|
+
## :toolbox: Getting Started
|
|
65
|
+
|
|
66
|
+
<!-- Prerequisites -->
|
|
67
|
+
|
|
68
|
+
### :bangbang: Prerequisites
|
|
69
|
+
|
|
70
|
+
- This project uses [pnpm](https://pnpm.io/) as package manager:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm install --global pnpm
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
<!-- Run Locally -->
|
|
77
|
+
|
|
78
|
+
### :running: Run Locally
|
|
79
|
+
|
|
80
|
+
Clone the project:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
git clone https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript.git
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Go to the project directory:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
cd vietnamese-phonetic-transcript
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Install dependencies:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pnpm install
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
<!-- Usage -->
|
|
99
|
+
|
|
100
|
+
## :eyes: Usage
|
|
101
|
+
|
|
102
|
+
### Bảng phiên âm âm vị học Tiếng Việt
|
|
103
|
+
|
|
104
|
+
#### Hệ thống âm đầu
|
|
105
|
+
|
|
106
|
+
Hệ thống âm đầu: 22 phụ âm
|
|
107
|
+
|
|
108
|
+
| STT | Âm vị | Chữ viết (+ bối cảnh sử dụng) | Ví dụ |
|
|
109
|
+
| --- | ---------------- | --------------------------------------------- | ------------------- |
|
|
110
|
+
| 1 | /b-/ | b | bè bạn |
|
|
111
|
+
| 2 | /m-/ | m | mệt mỏi |
|
|
112
|
+
| 3 | /f-/ | ph | phờ phạc |
|
|
113
|
+
| 4 | /v-/ | v | vờ vĩnh |
|
|
114
|
+
| 5 | /t-/ | t | tí tẹo |
|
|
115
|
+
| 6 | /tʼ-/ | th | tha thướt |
|
|
116
|
+
| 7 | /d-/ | đ | đủng đỉnh |
|
|
117
|
+
| 8 | /n-/ | n | no nê |
|
|
118
|
+
| 9 | /z-/ | d/gi | giầy da, bánh dầy |
|
|
119
|
+
| 10 | /ʐ-/ | r | rườm rà |
|
|
120
|
+
| 11 | /s-/ | x | xa xôi |
|
|
121
|
+
| 12 | /ʂ-/ | s | san sẻ |
|
|
122
|
+
| 13 | /c-/ | ch | chim chóc |
|
|
123
|
+
| 14 | /ʈ-/ | tr | trang trại |
|
|
124
|
+
| 15 | /ɲ-/ | nh | nhí nhảnh |
|
|
125
|
+
| 16 | /l-/ | l | lươn lẹo |
|
|
126
|
+
| 17 | /k-/ | k (+ âm chính: /-i-/, /-e-/, /-ɛ-/, /-ie-/) | kim, kê, kẻ, kiếm |
|
|
127
|
+
| 17 | /k-/ | q (+ âm đệm: /-u-/) | quả, quýt, quê |
|
|
128
|
+
| 17 | /k-/ | c (còn lại) | con, cà, cuống |
|
|
129
|
+
| 18 | /χ-/ | kh | khắt khe |
|
|
130
|
+
| 19 | /ŋ-/ | ngh (+ âm chính: /-i-/, /-e-/, /-ɛ-/, /-ie-/) | nghĩ, nghèo, nghiền |
|
|
131
|
+
| 19 | /ŋ-/ | ng (còn lại) | ngố, ngáo, ngõ |
|
|
132
|
+
| 20 | /ɣ-/ | gh (+ âm chính: /-i-/, /-e-/, /-ɛ-/, /-ie-/) | ghi, ghẻ, ghê |
|
|
133
|
+
| 20 | /ɣ-/ | g (còn lại) | gà, gỗ, gụ |
|
|
134
|
+
| 21 | /h-/ | h | hát hò |
|
|
135
|
+
| 22 | /ʔ-/ hoặc /zero/ | không thể hiện | ăn, uống, uể, oải |
|
|
136
|
+
|
|
137
|
+
#### Hệ thống âm đệm
|
|
138
|
+
|
|
139
|
+
Hệ thống âm đệm: 2 bán nguyên âm
|
|
140
|
+
|
|
141
|
+
| STT | Âm vị | Chữ viết (+ bối cảnh sử dụng) | Ví dụ |
|
|
142
|
+
| --- | ----------------- | --------------------------------------------------- | --------------------------------------- |
|
|
143
|
+
| 1 | /-w-/ hoặc /-u-/ | u (+ âm đầu: /k-/ (ghi bằng con chữ "q")) | quê, quả, quán, quyên, quăn, quận, quốc |
|
|
144
|
+
| 1 | /-w-/ hoặc /-u-/ | u (+ âm chính: /-i-/, /-e-/, /-ɤ-/, /-ɤ-/, /-ie-/) | huy, huế, huơ, huân, huyền |
|
|
145
|
+
| 1 | /-w-/ hoặc /-u-/ | o (các trường hợp còn lại) | hoa, hoe, hoác, họa hoằn |
|
|
146
|
+
| 2 | /zero/ | không thể hiện | hể hả, hiền, hương |
|
|
147
|
+
|
|
148
|
+
> [!NOTE]
|
|
149
|
+
> Toàn bộ tài liệu sẽ sử dụng /-u-/ để biểu diễn âm đệm này.
|
|
150
|
+
|
|
151
|
+
#### Hệ thống âm chính
|
|
152
|
+
|
|
153
|
+
Hệ thống âm chính: 13 nguyên âm đơn, 3 nguyên âm đôi
|
|
154
|
+
|
|
155
|
+
| STT | Âm vị | Chữ viết (+ bối cảnh sử dụng) | Ví dụ |
|
|
156
|
+
| --- | ------ | --------------------------------------------------------------- | ------------------------------------ |
|
|
157
|
+
| 1 | /-i-/ | y (+ âm đệm: /-u-/ hoặc âm đầu, âm đệm, âm cuối đều là /zero/) | huy, thúy, quýt, ý (kiến), thoát (y) |
|
|
158
|
+
| 1 | /-i-/ | i (còn lại) | im, đi, nhìn, mình |
|
|
159
|
+
| 2 | /-e-/ | ê | lên, bên, tênh |
|
|
160
|
+
| 3 | /-ɛ-/ | e | em, mẹ, kém |
|
|
161
|
+
| 4 | /-ɯ-/ | ư | từ, chữ, từng |
|
|
162
|
+
| 5 | /-ɤ-/ | ơ | trơn, mơ, lớp |
|
|
163
|
+
| 6 | /-a-/ | a | má, mái, qua, lại |
|
|
164
|
+
| 7 | /-u-/ | u | dù, súng |
|
|
165
|
+
| 8 | /-o-/ | ô | cổ, bốn, bông |
|
|
166
|
+
| 8 | /-o-/ | ôô (ít) | bôông |
|
|
167
|
+
| 9 | /-ɔ-/ | o | con, có, đói |
|
|
168
|
+
| 9 | /-ɔ-/ | oo (ít) | xoong |
|
|
169
|
+
| 10 | /-ɤ-/ | â | trần, sân, tầng |
|
|
170
|
+
| 11 | /-ɛ-/ | a | anh ách, nhanh nhách |
|
|
171
|
+
| 12 | /-ă-/ | a (+ âm cuối: /-w/, /-j/) | rau, tay, quay |
|
|
172
|
+
| 12 | /-ă-/ | ă (còn lại) | ăn năn, chăn, đắng |
|
|
173
|
+
| 13 | /-ɔ-/ | o (+ âm cuối: /-ŋ/, /-k/) | ong óc, mong, móc |
|
|
174
|
+
| 14 | /-ie-/ | iê (+ âm cuối khác /zero/, âm đệm /zero/) | biển, biếng |
|
|
175
|
+
| 14 | /-ie-/ | yê (+ âm cuối khác /zero/, âm đệm /-u-/ hoặc âm đầu /ʔ/) | khuyên, yếu, yểng, yểm |
|
|
176
|
+
| 14 | /-ie-/ | ia (+ âm cuối /zero/, âm đệm /zero/) | bia, mía, tía |
|
|
177
|
+
| 14 | /-ie-/ | ya (+ âm cuối /zero/, âm đệm /-u-/) | khuya, tuya |
|
|
178
|
+
| 15 | /-ɯɤ-/ | ươ (+ âm cuối khác /zero/) | ưỡn, lươn, bướng, hươu |
|
|
179
|
+
| 15 | /-ɯɤ-/ | ưa (+ âm cuối /zero/) | mưa, ưa, chừa |
|
|
180
|
+
| 16 | /-uo-/ | uô (+ âm cuối khác /zero/) | buồn, uống |
|
|
181
|
+
| 16 | /-uo-/ | ua (+ âm cuối /zero/) | ùa, chùa |
|
|
182
|
+
|
|
183
|
+
#### Hệ thống âm cuối
|
|
184
|
+
|
|
185
|
+
Hệ thống âm cuối: 6 phụ âm, 2 bán nguyên âm
|
|
186
|
+
|
|
187
|
+
| STT | Âm vị | Chữ viết (+ bối cảnh sử dụng) | Ví dụ |
|
|
188
|
+
| --- | ------ | --------------------------------------- | ----------------------------------- |
|
|
189
|
+
| 1 | /-m/ | m | ôm, nam, nem |
|
|
190
|
+
| 2 | /-n/ | n | ôn, nan, nến |
|
|
191
|
+
| 3 | /-p/ | p | ốp, hấp |
|
|
192
|
+
| 4 | /-t/ | t | tắt, hất |
|
|
193
|
+
| 5 | /-ŋ/ | nh (sau âm chính: /-i-/, /-e-/, /-ɛ-/) | inh, ênh, anh, xinh, mệnh, xanh |
|
|
194
|
+
| 5 | /-ŋ/ | ng (còn lại) | ong, ông, ung, ưng, kèng, kiểng |
|
|
195
|
+
| 6 | /-k/ | ch (sau âm chính: /-i-/, /-e-/, /-ɛ-/) | ich, ếch, ách, thích, chệch, bạch |
|
|
196
|
+
| 6 | /-k/ | c (còn lại) | óc, úc, ác, cóc, cúc, các, lắc, nấc |
|
|
197
|
+
| 7 | /-w/ | o (sau âm chính: /-a-/, /-ɛ-/) | áo, éo, báo, béo |
|
|
198
|
+
| 7 | /-w/ | u (còn lại) | au, eo, êu, iu, cháu, kêu, chịu |
|
|
199
|
+
| 8 | /-j/ | y (sau âm chính: /-ă-/, /-ɤ-/) | cáy, cấy |
|
|
200
|
+
| 8 | /-j/ | i (còn lại) | cái, ngoái, cưới, cuối |
|
|
201
|
+
| 9 | /zero/ | không thể hiện | bà, bố, mẹ |
|
|
202
|
+
|
|
203
|
+
### Syllable Analysis
|
|
204
|
+
|
|
205
|
+
This project includes a script to analyze Vietnamese syllables from a text file
|
|
206
|
+
and validate them using phonetic transcription.
|
|
207
|
+
|
|
208
|
+
To run the analysis, use the following command:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
npx tsx src/syllable_analysis.ts
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Result:
|
|
215
|
+
|
|
216
|
+
- Dictionary (all lines): 8,010
|
|
217
|
+
- Valid syllables (transcribable): 7,413
|
|
218
|
+
|
|
219
|
+
- Theoretical combinations: 151,632
|
|
220
|
+
\[27 initials\] × \[3 glides\] × \[24 nuclei\] × \[13 codas\] × \[6 tones\]
|
|
221
|
+
|
|
222
|
+
- Comparisons:
|
|
223
|
+
- Valid vs Dictionary: 92.5%
|
|
224
|
+
- Valid vs Theoretical: 4.89%
|
|
225
|
+
- Dictionary vs Theoretical: 5.28%
|
|
226
|
+
|
|
227
|
+
- Differences:
|
|
228
|
+
- Non-transcribable entries: 597
|
|
229
|
+
- Missing from dictionary: 143,622
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
Why Only 7413 Syllables of Dictionary Entries Are Transcribable?
|
|
234
|
+
|
|
235
|
+
1. Foreign Words in the Dictionary
|
|
236
|
+
|
|
237
|
+
- Words like: accordeon, acid, albumin, alpha, ampere, antimon, aspirin, atlas.
|
|
238
|
+
These are borrowed/foreign words that don't follow Vietnamese phonological
|
|
239
|
+
rules.
|
|
240
|
+
- Your transcript system correctly rejects them as non-Vietnamese syllables.
|
|
241
|
+
|
|
242
|
+
2. Technical/Scientific Terms
|
|
243
|
+
|
|
244
|
+
- Chemical compounds: aminoacid, ammoniac, amoniac.
|
|
245
|
+
- Technical terms: atlat, atmotphe, apatit.
|
|
246
|
+
- These often retain foreign pronunciation patterns.
|
|
247
|
+
|
|
248
|
+
3. Abbreviations & Special Cases
|
|
249
|
+
|
|
250
|
+
- Shortened forms: al, ag, as.
|
|
251
|
+
- Currency codes: afghani, balboa, birr.
|
|
252
|
+
- Brand names and proper nouns.
|
|
253
|
+
|
|
254
|
+
Why Only 1.2% of Theoretical Combinations Exist?
|
|
255
|
+
|
|
256
|
+
1. Phonological Constraints
|
|
257
|
+
|
|
258
|
+
- Not all consonant-vowel-tone combinations are pronounceable in Vietnamese.
|
|
259
|
+
- Vietnamese has strict rules about which sounds can combine.
|
|
260
|
+
- Example: Some initial consonants cannot precede certain vowels.
|
|
261
|
+
|
|
262
|
+
2. Lexical Gaps
|
|
263
|
+
|
|
264
|
+
- Even if a combination is pronounceable, it might not form a meaningful word.
|
|
265
|
+
- Vietnamese vocabulary has evolved historically, leaving gaps in the sound
|
|
266
|
+
space.
|
|
267
|
+
|
|
268
|
+
3. Tonal Restrictions
|
|
269
|
+
|
|
270
|
+
- Some vowel-consonant combinations are restricted to certain tones.
|
|
271
|
+
- Checked syllables (ending in -p, -t, -c, -ch) can only have tones 1 and 5.
|
|
272
|
+
|
|
273
|
+
4. Historical Language Evolution
|
|
274
|
+
|
|
275
|
+
- Vietnamese has lost some syllables over time.
|
|
276
|
+
- Sound changes have eliminated certain combinations.
|
|
277
|
+
- Modern Vietnamese is more constrained than the theoretical maximum.
|
|
278
|
+
|
|
279
|
+
<!-- Contributing -->
|
|
280
|
+
|
|
281
|
+
## :wave: Contributing
|
|
282
|
+
|
|
283
|
+
<a href="https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript/graphs/contributors">
|
|
284
|
+
<img src="https://contrib.rocks/image?repo=DuckyMomo20012/vietnamese-phonetic-transcript" />
|
|
285
|
+
</a>
|
|
286
|
+
|
|
287
|
+
Contributions are always welcome!
|
|
288
|
+
|
|
289
|
+
Please read the [contribution guidelines](./CONTRIBUTING.md).
|
|
290
|
+
|
|
291
|
+
<!-- Code of Conduct -->
|
|
292
|
+
|
|
293
|
+
### :scroll: Code of Conduct
|
|
294
|
+
|
|
295
|
+
Please read the [Code of Conduct](./CODE_OF_CONDUCT.md).
|
|
296
|
+
|
|
297
|
+
<!-- License -->
|
|
298
|
+
|
|
299
|
+
## :warning: License
|
|
300
|
+
|
|
301
|
+
This project is licensed under the **Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)** License.
|
|
302
|
+
|
|
303
|
+
[](https://creativecommons.org/licenses/by-nc-sa/4.0/).
|
|
304
|
+
|
|
305
|
+
See the **[LICENSE.md](./LICENSE.md)** file for full details.
|
|
306
|
+
|
|
307
|
+
<!-- Contact -->
|
|
308
|
+
|
|
309
|
+
## :handshake: Contact
|
|
310
|
+
|
|
311
|
+
Duong Vinh - [@duckymomo20012](https://twitter.com/duckymomo20012) -
|
|
312
|
+
tienvinh.duong4@gmail.com
|
|
313
|
+
|
|
314
|
+
Project Link: [https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript](https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript).
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// lib/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
phoneticTranscriptSentence: () => phoneticTranscriptSentence,
|
|
24
|
+
phoneticTranscriptWord: () => phoneticTranscriptWord
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(index_exports);
|
|
27
|
+
|
|
28
|
+
// lib/phonetic_transcript/phonetic_transcript.ts
|
|
29
|
+
var initialList = [
|
|
30
|
+
{ phoneme: "b-", character: "b" },
|
|
31
|
+
{ phoneme: "m-", character: "m" },
|
|
32
|
+
{ phoneme: "f-", character: "ph" },
|
|
33
|
+
{ phoneme: "v-", character: "v" },
|
|
34
|
+
{ phoneme: "t\u02BC-", character: "th" },
|
|
35
|
+
{ phoneme: "\u0288-", character: "tr" },
|
|
36
|
+
{ phoneme: "t-", character: "t" },
|
|
37
|
+
{ phoneme: "d-", character: "\u0111" },
|
|
38
|
+
{ phoneme: "\u0272-", character: "nh" },
|
|
39
|
+
{ phoneme: "\u014B-", character: "ngh", main: ["-i-", "-e-", "-\u025B-", "-ie-"] },
|
|
40
|
+
{ phoneme: "\u014B-", character: "ng" },
|
|
41
|
+
{ phoneme: "n-", character: "n" },
|
|
42
|
+
{ phoneme: "z-", character: "d" },
|
|
43
|
+
{ phoneme: "z-", character: "gi" },
|
|
44
|
+
{ phoneme: "\u0290-", character: "r" },
|
|
45
|
+
{ phoneme: "s-", character: "x" },
|
|
46
|
+
{ phoneme: "\u0282-", character: "s" },
|
|
47
|
+
{ phoneme: "l-", character: "l" },
|
|
48
|
+
{ phoneme: "\u03C7-", character: "kh" },
|
|
49
|
+
{ phoneme: "c-", character: "ch" },
|
|
50
|
+
{ phoneme: "k-", character: "k", main: ["-i-", "-e-", "-\u025B-", "-ie-"] },
|
|
51
|
+
{ phoneme: "k-", character: "q", medial: ["-u\uE608-"] },
|
|
52
|
+
{ phoneme: "k-", character: "c" },
|
|
53
|
+
{ phoneme: "\u0263-", character: "gh", main: ["-i-", "-e-", "-\u025B-", "-ie-"] },
|
|
54
|
+
{ phoneme: "\u0263-", character: "g" },
|
|
55
|
+
{ phoneme: "h-", character: "h" }
|
|
56
|
+
];
|
|
57
|
+
var medialList = [
|
|
58
|
+
{
|
|
59
|
+
phoneme: "-u\uE608-",
|
|
60
|
+
character: "u",
|
|
61
|
+
initial: ["k-"],
|
|
62
|
+
main: ["-i-", "-e-", "-\u0264-", "-\u0264\uE60C-", "-ie-"]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
phoneme: "-u\uE608-",
|
|
66
|
+
character: "o"
|
|
67
|
+
}
|
|
68
|
+
];
|
|
69
|
+
var mainList = [
|
|
70
|
+
{
|
|
71
|
+
phoneme: "-i-",
|
|
72
|
+
character: "y",
|
|
73
|
+
medial: ["-u\uE608-", "zero"],
|
|
74
|
+
initial: ["zero"],
|
|
75
|
+
final: ["zero"]
|
|
76
|
+
},
|
|
77
|
+
{ phoneme: "-i-", character: "i" },
|
|
78
|
+
{ phoneme: "-e-", character: "\xEA" },
|
|
79
|
+
{ phoneme: "-\u025B-", character: "e" },
|
|
80
|
+
{ phoneme: "-\u026F-", character: "\u01B0" },
|
|
81
|
+
{ phoneme: "-\u0264-", character: "\u01A1" },
|
|
82
|
+
{ phoneme: "-a-", character: "a" },
|
|
83
|
+
{ phoneme: "-u-", character: "u" },
|
|
84
|
+
{ phoneme: "-o-", character: "\xF4" },
|
|
85
|
+
{ phoneme: "-o-", character: "\xF4\xF4" },
|
|
86
|
+
{ phoneme: "-\u0254-", character: "o" },
|
|
87
|
+
{ phoneme: "-\u0254-", character: "oo" },
|
|
88
|
+
{ phoneme: "-\u0264\uE60C-", character: "\xE2" },
|
|
89
|
+
{ phoneme: "-\u025B\uE60C-", character: "a" },
|
|
90
|
+
{ phoneme: "-\u0103-", character: "a", final: ["-w", "-j"] },
|
|
91
|
+
{ phoneme: "-\u0103-", character: "\u0103" },
|
|
92
|
+
{ phoneme: "-\u0254\uE60C-", character: "o", final: ["-\u014B", "-k"] },
|
|
93
|
+
{ phoneme: "-ie-", character: "i\xEA", notFinal: ["zero"], medial: ["zero"] },
|
|
94
|
+
{
|
|
95
|
+
phoneme: "-ie-",
|
|
96
|
+
character: "y\xEA",
|
|
97
|
+
notFinal: ["zero"],
|
|
98
|
+
medial: ["-u\uE608-"],
|
|
99
|
+
initial: ["zero"]
|
|
100
|
+
},
|
|
101
|
+
{ phoneme: "-ie-", character: "ia", final: ["zero"], medial: ["zero"] },
|
|
102
|
+
{ phoneme: "-ie-", character: "ya", final: ["zero"], medial: ["-u\uE608-"] },
|
|
103
|
+
{ phoneme: "-\u026F\u0264-", character: "\u01B0\u01A1", notFinal: ["zero"] },
|
|
104
|
+
{ phoneme: "-\u026F\u0264-", character: "\u01B0a", final: ["zero"] },
|
|
105
|
+
{ phoneme: "-uo-", character: "u\xF4", notFinal: ["zero"] },
|
|
106
|
+
{ phoneme: "-uo-", character: "ua", final: ["zero"] }
|
|
107
|
+
];
|
|
108
|
+
var finalList = [
|
|
109
|
+
{ phoneme: "-m", character: "m" },
|
|
110
|
+
{ phoneme: "-n", character: "n" },
|
|
111
|
+
{ phoneme: "-p", character: "p" },
|
|
112
|
+
{ phoneme: "-t", character: "t" },
|
|
113
|
+
{ phoneme: "-\u014B", character: "nh", main: ["-i-", "-e-", "-\u025B\uE60C-"] },
|
|
114
|
+
{ phoneme: "-\u014B", character: "ng" },
|
|
115
|
+
{ phoneme: "-k", character: "ch", main: ["-i-", "-e-", "-\u025B\uE60C-"] },
|
|
116
|
+
{ phoneme: "-k", character: "c" },
|
|
117
|
+
{ phoneme: "-w", character: "o", main: ["-a-", "-\u025B-"] },
|
|
118
|
+
{ phoneme: "-w", character: "u" },
|
|
119
|
+
{ phoneme: "-j", character: "y", main: ["-\u0103-", "-\u0264\uE60C-"] },
|
|
120
|
+
{ phoneme: "-j", character: "i" }
|
|
121
|
+
];
|
|
122
|
+
var toneMarkList = [
|
|
123
|
+
{ character: "a", originalCharacter: "a", toneMark: 1 },
|
|
124
|
+
{ character: "\xE0", originalCharacter: "a", toneMark: 2 },
|
|
125
|
+
{ character: "\xE3", originalCharacter: "a", toneMark: 3 },
|
|
126
|
+
{ character: "\u1EA3", originalCharacter: "a", toneMark: 4 },
|
|
127
|
+
{ character: "\xE1", originalCharacter: "a", toneMark: 5 },
|
|
128
|
+
{ character: "\u1EA1", originalCharacter: "a", toneMark: 6 },
|
|
129
|
+
{ character: "\u0103", originalCharacter: "\u0103", toneMark: 1 },
|
|
130
|
+
{ character: "\u1EB1", originalCharacter: "\u0103", toneMark: 2 },
|
|
131
|
+
{ character: "\u1EB5", originalCharacter: "\u0103", toneMark: 3 },
|
|
132
|
+
{ character: "\u1EB3", originalCharacter: "\u0103", toneMark: 4 },
|
|
133
|
+
{ character: "\u1EAF", originalCharacter: "\u0103", toneMark: 5 },
|
|
134
|
+
{ character: "\u1EB7", originalCharacter: "\u0103", toneMark: 6 },
|
|
135
|
+
{ character: "\xE2", originalCharacter: "\xE2", toneMark: 1 },
|
|
136
|
+
{ character: "\u1EA7", originalCharacter: "\xE2", toneMark: 2 },
|
|
137
|
+
{ character: "\u1EAB", originalCharacter: "\xE2", toneMark: 3 },
|
|
138
|
+
{ character: "\u1EA9", originalCharacter: "\xE2", toneMark: 4 },
|
|
139
|
+
{ character: "\u1EA5", originalCharacter: "\xE2", toneMark: 5 },
|
|
140
|
+
{ character: "\u1EAD", originalCharacter: "\xE2", toneMark: 6 },
|
|
141
|
+
{ character: "e", originalCharacter: "e", toneMark: 1 },
|
|
142
|
+
{ character: "\xE8", originalCharacter: "e", toneMark: 2 },
|
|
143
|
+
{ character: "\u1EBD", originalCharacter: "e", toneMark: 3 },
|
|
144
|
+
{ character: "\u1EBB", originalCharacter: "e", toneMark: 4 },
|
|
145
|
+
{ character: "\xE9", originalCharacter: "e", toneMark: 5 },
|
|
146
|
+
{ character: "\u1EB9", originalCharacter: "e", toneMark: 6 },
|
|
147
|
+
{ character: "\xEA", originalCharacter: "\xEA", toneMark: 1 },
|
|
148
|
+
{ character: "\u1EC1", originalCharacter: "\xEA", toneMark: 2 },
|
|
149
|
+
{ character: "\u1EC5", originalCharacter: "\xEA", toneMark: 3 },
|
|
150
|
+
{ character: "\u1EC3", originalCharacter: "\xEA", toneMark: 4 },
|
|
151
|
+
{ character: "\u1EBF", originalCharacter: "\xEA", toneMark: 5 },
|
|
152
|
+
{ character: "\u1EC7", originalCharacter: "\xEA", toneMark: 6 },
|
|
153
|
+
{ character: "i", originalCharacter: "i", toneMark: 1 },
|
|
154
|
+
{ character: "\xEC", originalCharacter: "i", toneMark: 2 },
|
|
155
|
+
{ character: "\u0129", originalCharacter: "i", toneMark: 3 },
|
|
156
|
+
{ character: "\u1EC9", originalCharacter: "i", toneMark: 4 },
|
|
157
|
+
{ character: "\xED", originalCharacter: "i", toneMark: 5 },
|
|
158
|
+
{ character: "\u1ECB", originalCharacter: "i", toneMark: 6 },
|
|
159
|
+
{ character: "o", originalCharacter: "o", toneMark: 1 },
|
|
160
|
+
{ character: "\xF2", originalCharacter: "o", toneMark: 2 },
|
|
161
|
+
{ character: "\xF5", originalCharacter: "o", toneMark: 3 },
|
|
162
|
+
{ character: "\u1ECF", originalCharacter: "o", toneMark: 4 },
|
|
163
|
+
{ character: "\xF3", originalCharacter: "o", toneMark: 5 },
|
|
164
|
+
{ character: "\u1ECD", originalCharacter: "o", toneMark: 6 },
|
|
165
|
+
{ character: "\xF4", originalCharacter: "\xF4", toneMark: 1 },
|
|
166
|
+
{ character: "\u1ED3", originalCharacter: "\xF4", toneMark: 2 },
|
|
167
|
+
{ character: "\u1ED7", originalCharacter: "\xF4", toneMark: 3 },
|
|
168
|
+
{ character: "\u1ED5", originalCharacter: "\xF4", toneMark: 4 },
|
|
169
|
+
{ character: "\u1ED1", originalCharacter: "\xF4", toneMark: 5 },
|
|
170
|
+
{ character: "\u1ED9", originalCharacter: "\xF4", toneMark: 6 },
|
|
171
|
+
{ character: "\u01A1", originalCharacter: "\u01A1", toneMark: 1 },
|
|
172
|
+
{ character: "\u1EDD", originalCharacter: "\u01A1", toneMark: 2 },
|
|
173
|
+
{ character: "\u1EE1", originalCharacter: "\u01A1", toneMark: 3 },
|
|
174
|
+
{ character: "\u1EDF", originalCharacter: "\u01A1", toneMark: 4 },
|
|
175
|
+
{ character: "\u1EDB", originalCharacter: "\u01A1", toneMark: 5 },
|
|
176
|
+
{ character: "\u1EE3", originalCharacter: "\u01A1", toneMark: 6 },
|
|
177
|
+
{ character: "u", originalCharacter: "u", toneMark: 1 },
|
|
178
|
+
{ character: "\xF9", originalCharacter: "u", toneMark: 2 },
|
|
179
|
+
{ character: "\u0169", originalCharacter: "u", toneMark: 3 },
|
|
180
|
+
{ character: "\u1EE7", originalCharacter: "u", toneMark: 4 },
|
|
181
|
+
{ character: "\xFA", originalCharacter: "u", toneMark: 5 },
|
|
182
|
+
{ character: "\u1EE5", originalCharacter: "u", toneMark: 6 },
|
|
183
|
+
{ character: "\u01B0", originalCharacter: "\u01B0", toneMark: 1 },
|
|
184
|
+
{ character: "\u1EEB", originalCharacter: "\u01B0", toneMark: 2 },
|
|
185
|
+
{ character: "\u1EEF", originalCharacter: "\u01B0", toneMark: 3 },
|
|
186
|
+
{ character: "\u1EED", originalCharacter: "\u01B0", toneMark: 4 },
|
|
187
|
+
{ character: "\u1EE9", originalCharacter: "\u01B0", toneMark: 5 },
|
|
188
|
+
{ character: "\u1EF1", originalCharacter: "\u01B0", toneMark: 6 },
|
|
189
|
+
{ character: "y", originalCharacter: "y", toneMark: 1 },
|
|
190
|
+
{ character: "\u1EF3", originalCharacter: "y", toneMark: 2 },
|
|
191
|
+
{ character: "\u1EF9", originalCharacter: "y", toneMark: 3 },
|
|
192
|
+
{ character: "\u1EF7", originalCharacter: "y", toneMark: 4 },
|
|
193
|
+
{ character: "\xFD", originalCharacter: "y", toneMark: 5 },
|
|
194
|
+
{ character: "\u1EF5", originalCharacter: "y", toneMark: 6 }
|
|
195
|
+
];
|
|
196
|
+
var transcriptToString = (transcript) => {
|
|
197
|
+
if (!transcript.main || !transcript.toneMark) {
|
|
198
|
+
throw new Error("Invalid phonetic transcript");
|
|
199
|
+
}
|
|
200
|
+
return (transcript.initial?.replaceAll("-", "") || "") + (transcript?.medial?.replaceAll("-", "") || "") + transcript.main.replaceAll("-", "") + (transcript.final?.replaceAll("-", "") || "") + transcript.toneMark.toString();
|
|
201
|
+
};
|
|
202
|
+
var buildPhoneticTranscript = (word) => {
|
|
203
|
+
word = word.toLowerCase();
|
|
204
|
+
let transcript = {
|
|
205
|
+
toneMark: 1
|
|
206
|
+
};
|
|
207
|
+
toneMarkList.forEach((toneMark) => {
|
|
208
|
+
if (toneMark.toneMark !== 1 && word.includes(toneMark.character)) {
|
|
209
|
+
transcript.toneMark = toneMark.toneMark;
|
|
210
|
+
word = word.replace(toneMark.character, toneMark.originalCharacter);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
initialList.forEach((initial) => {
|
|
214
|
+
if (word.startsWith(initial.character) && word.length - initial.character.length > 0) {
|
|
215
|
+
transcript.initial = initial.phoneme;
|
|
216
|
+
transcript.initialCharacter = initial.character;
|
|
217
|
+
word = word.slice(initial.character.length);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
finalList.forEach((final) => {
|
|
221
|
+
if (word.endsWith(final.character) && word.length - final.character.length > 0) {
|
|
222
|
+
transcript.final = final.phoneme;
|
|
223
|
+
transcript.finalCharacter = final.character;
|
|
224
|
+
word = word.slice(0, word.length - final.character.length);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
if (word.length > 1 && word !== "oo") {
|
|
228
|
+
if (word.startsWith("u") && (transcript.initialCharacter === "q" || ["y", "i", "\xEA", "\u01A1", "\xE2", "i\xEA", "y\xEA", "ia", "ya"].includes(
|
|
229
|
+
word.slice(1)
|
|
230
|
+
))) {
|
|
231
|
+
transcript.medial = medialList[0].phoneme;
|
|
232
|
+
transcript.medialCharacter = medialList[0].character;
|
|
233
|
+
word = word.slice(1);
|
|
234
|
+
} else if (word.startsWith("o")) {
|
|
235
|
+
transcript.medial = medialList[1].phoneme;
|
|
236
|
+
transcript.medialCharacter = medialList[1].character;
|
|
237
|
+
word = word.slice(1);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (word === "o" && transcript.finalCharacter && ["nh", "ng", "ch", "c"].includes(transcript.finalCharacter)) {
|
|
241
|
+
const main = mainList.filter((main2) => main2.phoneme === "-\u0254\uE60C-");
|
|
242
|
+
transcript.main = main[0].phoneme;
|
|
243
|
+
transcript.mainCharacter = main[0].character;
|
|
244
|
+
word = word.slice(1);
|
|
245
|
+
} else {
|
|
246
|
+
mainList.forEach((main) => {
|
|
247
|
+
if (word === main.character) {
|
|
248
|
+
transcript.main = main.phoneme;
|
|
249
|
+
transcript.mainCharacter = main.character;
|
|
250
|
+
word = word.slice(main.character.length);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
return transcript;
|
|
255
|
+
};
|
|
256
|
+
var phoneticTranscriptWord = (word) => {
|
|
257
|
+
return word.replaceAll(/[^\P{L}]+/gmu, (word2) => {
|
|
258
|
+
try {
|
|
259
|
+
return transcriptToString(buildPhoneticTranscript(word2));
|
|
260
|
+
} catch (e) {
|
|
261
|
+
return word2;
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
};
|
|
265
|
+
var phoneticTranscriptSentence = (sentence) => {
|
|
266
|
+
return sentence.split(" ").map((word) => phoneticTranscriptWord(word)).join(" ");
|
|
267
|
+
};
|
|
268
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
269
|
+
0 && (module.exports = {
|
|
270
|
+
phoneticTranscriptSentence,
|
|
271
|
+
phoneticTranscriptWord
|
|
272
|
+
});
|
|
273
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../lib/index.ts","../lib/phonetic_transcript/phonetic_transcript.ts"],"sourcesContent":["export * from './phonetic_transcript/phonetic_transcript';\n","export type PhoneticTranscript = {\n main: string;\n mainCharacter: string;\n medial?: string;\n medialCharacter?: string;\n initial?: string;\n initialCharacter?: string;\n final?: string;\n finalCharacter?: string;\n toneMark: number;\n};\n\nexport type Constraint = {\n phoneme: string;\n character: string;\n initial?: Array<string>;\n notInitial?: Array<string>;\n medial?: Array<string>;\n notMedial?: Array<string>;\n main?: Array<string>;\n notMain?: Array<string>;\n final?: Array<string>;\n notFinal?: Array<string>;\n};\n\n// NOTE: Check the character orders, because \"t\" might be matched before \"th\"\nconst initialList = [\n { phoneme: 'b-', character: 'b' },\n { phoneme: 'm-', character: 'm' },\n { phoneme: 'f-', character: 'ph' },\n\n { phoneme: 'v-', character: 'v' },\n\n { phoneme: 'tʼ-', character: 'th' },\n\n { phoneme: 'ʈ-', character: 'tr' },\n\n { phoneme: 't-', character: 't' },\n\n { phoneme: 'd-', character: 'đ' },\n\n { phoneme: 'ɲ-', character: 'nh' },\n\n { phoneme: 'ŋ-', character: 'ngh', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'ŋ-', character: 'ng' },\n\n { phoneme: 'n-', character: 'n' },\n\n { phoneme: 'z-', character: 'd' },\n { phoneme: 'z-', character: 'gi' },\n\n { phoneme: 'ʐ-', character: 'r' },\n\n { phoneme: 's-', character: 'x' },\n { phoneme: 'ʂ-', character: 's' },\n\n { phoneme: 'l-', character: 'l' },\n\n { phoneme: 'χ-', character: 'kh' },\n\n { phoneme: 'c-', character: 'ch' },\n\n { phoneme: 'k-', character: 'k', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'k-', character: 'q', medial: ['-u-'] },\n { phoneme: 'k-', character: 'c' },\n\n { phoneme: 'ɣ-', character: 'gh', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'ɣ-', character: 'g' },\n\n { phoneme: 'h-', character: 'h' },\n] satisfies Constraint[];\n\nconst medialList = [\n {\n phoneme: '-u-',\n character: 'u',\n initial: ['k-'],\n main: ['-i-', '-e-', '-ɤ-', '-ɤ-', '-ie-'],\n },\n {\n phoneme: '-u-',\n character: 'o',\n },\n] satisfies Constraint[];\n\nconst mainList = [\n {\n phoneme: '-i-',\n character: 'y',\n medial: ['-u-', 'zero'],\n initial: ['zero'],\n final: ['zero'],\n },\n { phoneme: '-i-', character: 'i' },\n\n { phoneme: '-e-', character: 'ê' },\n\n { phoneme: '-ɛ-', character: 'e' },\n\n { phoneme: '-ɯ-', character: 'ư' },\n\n { phoneme: '-ɤ-', character: 'ơ' },\n\n { phoneme: '-a-', character: 'a' },\n\n { phoneme: '-u-', character: 'u' },\n\n { phoneme: '-o-', character: 'ô' },\n { phoneme: '-o-', character: 'ôô' },\n\n { phoneme: '-ɔ-', character: 'o' },\n { phoneme: '-ɔ-', character: 'oo' },\n\n { phoneme: '-ɤ-', character: 'â' },\n\n { phoneme: '-ɛ-', character: 'a' },\n\n { phoneme: '-ă-', character: 'a', final: ['-w', '-j'] },\n { phoneme: '-ă-', character: 'ă' },\n\n { phoneme: '-ɔ-', character: 'o', final: ['-ŋ', '-k'] },\n\n { phoneme: '-ie-', character: 'iê', notFinal: ['zero'], medial: ['zero'] },\n {\n phoneme: '-ie-',\n character: 'yê',\n notFinal: ['zero'],\n medial: ['-u-'],\n initial: ['zero'],\n },\n { phoneme: '-ie-', character: 'ia', final: ['zero'], medial: ['zero'] },\n { phoneme: '-ie-', character: 'ya', final: ['zero'], medial: ['-u-'] },\n\n { phoneme: '-ɯɤ-', character: 'ươ', notFinal: ['zero'] },\n { phoneme: '-ɯɤ-', character: 'ưa', final: ['zero'] },\n\n { phoneme: '-uo-', character: 'uô', notFinal: ['zero'] },\n { phoneme: '-uo-', character: 'ua', final: ['zero'] },\n] satisfies Constraint[];\n\nconst finalList = [\n { phoneme: '-m', character: 'm' },\n\n { phoneme: '-n', character: 'n' },\n\n { phoneme: '-p', character: 'p' },\n\n { phoneme: '-t', character: 't' },\n\n { phoneme: '-ŋ', character: 'nh', main: ['-i-', '-e-', '-ɛ-'] },\n { phoneme: '-ŋ', character: 'ng' },\n\n { phoneme: '-k', character: 'ch', main: ['-i-', '-e-', '-ɛ-'] },\n { phoneme: '-k', character: 'c' },\n\n { phoneme: '-w', character: 'o', main: ['-a-', '-ɛ-'] },\n { phoneme: '-w', character: 'u' },\n\n { phoneme: '-j', character: 'y', main: ['-ă-', '-ɤ-'] },\n { phoneme: '-j', character: 'i' },\n] satisfies Constraint[];\n\nconst toneMarkList = [\n { character: 'a', originalCharacter: 'a', toneMark: 1 },\n { character: 'à', originalCharacter: 'a', toneMark: 2 },\n { character: 'ã', originalCharacter: 'a', toneMark: 3 },\n { character: 'ả', originalCharacter: 'a', toneMark: 4 },\n { character: 'á', originalCharacter: 'a', toneMark: 5 },\n { character: 'ạ', originalCharacter: 'a', toneMark: 6 },\n\n { character: 'ă', originalCharacter: 'ă', toneMark: 1 },\n { character: 'ằ', originalCharacter: 'ă', toneMark: 2 },\n { character: 'ẵ', originalCharacter: 'ă', toneMark: 3 },\n { character: 'ẳ', originalCharacter: 'ă', toneMark: 4 },\n { character: 'ắ', originalCharacter: 'ă', toneMark: 5 },\n { character: 'ặ', originalCharacter: 'ă', toneMark: 6 },\n\n { character: 'â', originalCharacter: 'â', toneMark: 1 },\n { character: 'ầ', originalCharacter: 'â', toneMark: 2 },\n { character: 'ẫ', originalCharacter: 'â', toneMark: 3 },\n { character: 'ẩ', originalCharacter: 'â', toneMark: 4 },\n { character: 'ấ', originalCharacter: 'â', toneMark: 5 },\n { character: 'ậ', originalCharacter: 'â', toneMark: 6 },\n\n { character: 'e', originalCharacter: 'e', toneMark: 1 },\n { character: 'è', originalCharacter: 'e', toneMark: 2 },\n { character: 'ẽ', originalCharacter: 'e', toneMark: 3 },\n { character: 'ẻ', originalCharacter: 'e', toneMark: 4 },\n { character: 'é', originalCharacter: 'e', toneMark: 5 },\n { character: 'ẹ', originalCharacter: 'e', toneMark: 6 },\n\n { character: 'ê', originalCharacter: 'ê', toneMark: 1 },\n { character: 'ề', originalCharacter: 'ê', toneMark: 2 },\n { character: 'ễ', originalCharacter: 'ê', toneMark: 3 },\n { character: 'ể', originalCharacter: 'ê', toneMark: 4 },\n { character: 'ế', originalCharacter: 'ê', toneMark: 5 },\n { character: 'ệ', originalCharacter: 'ê', toneMark: 6 },\n\n { character: 'i', originalCharacter: 'i', toneMark: 1 },\n { character: 'ì', originalCharacter: 'i', toneMark: 2 },\n { character: 'ĩ', originalCharacter: 'i', toneMark: 3 },\n { character: 'ỉ', originalCharacter: 'i', toneMark: 4 },\n { character: 'í', originalCharacter: 'i', toneMark: 5 },\n { character: 'ị', originalCharacter: 'i', toneMark: 6 },\n\n { character: 'o', originalCharacter: 'o', toneMark: 1 },\n { character: 'ò', originalCharacter: 'o', toneMark: 2 },\n { character: 'õ', originalCharacter: 'o', toneMark: 3 },\n { character: 'ỏ', originalCharacter: 'o', toneMark: 4 },\n { character: 'ó', originalCharacter: 'o', toneMark: 5 },\n { character: 'ọ', originalCharacter: 'o', toneMark: 6 },\n\n { character: 'ô', originalCharacter: 'ô', toneMark: 1 },\n { character: 'ồ', originalCharacter: 'ô', toneMark: 2 },\n { character: 'ỗ', originalCharacter: 'ô', toneMark: 3 },\n { character: 'ổ', originalCharacter: 'ô', toneMark: 4 },\n { character: 'ố', originalCharacter: 'ô', toneMark: 5 },\n { character: 'ộ', originalCharacter: 'ô', toneMark: 6 },\n\n { character: 'ơ', originalCharacter: 'ơ', toneMark: 1 },\n { character: 'ờ', originalCharacter: 'ơ', toneMark: 2 },\n { character: 'ỡ', originalCharacter: 'ơ', toneMark: 3 },\n { character: 'ở', originalCharacter: 'ơ', toneMark: 4 },\n { character: 'ớ', originalCharacter: 'ơ', toneMark: 5 },\n { character: 'ợ', originalCharacter: 'ơ', toneMark: 6 },\n\n { character: 'u', originalCharacter: 'u', toneMark: 1 },\n { character: 'ù', originalCharacter: 'u', toneMark: 2 },\n { character: 'ũ', originalCharacter: 'u', toneMark: 3 },\n { character: 'ủ', originalCharacter: 'u', toneMark: 4 },\n { character: 'ú', originalCharacter: 'u', toneMark: 5 },\n { character: 'ụ', originalCharacter: 'u', toneMark: 6 },\n\n { character: 'ư', originalCharacter: 'ư', toneMark: 1 },\n { character: 'ừ', originalCharacter: 'ư', toneMark: 2 },\n { character: 'ữ', originalCharacter: 'ư', toneMark: 3 },\n { character: 'ử', originalCharacter: 'ư', toneMark: 4 },\n { character: 'ứ', originalCharacter: 'ư', toneMark: 5 },\n { character: 'ự', originalCharacter: 'ư', toneMark: 6 },\n\n { character: 'y', originalCharacter: 'y', toneMark: 1 },\n { character: 'ỳ', originalCharacter: 'y', toneMark: 2 },\n { character: 'ỹ', originalCharacter: 'y', toneMark: 3 },\n { character: 'ỷ', originalCharacter: 'y', toneMark: 4 },\n { character: 'ý', originalCharacter: 'y', toneMark: 5 },\n { character: 'ỵ', originalCharacter: 'y', toneMark: 6 },\n];\n\nconst transcriptToString = (transcript: PhoneticTranscript): string => {\n if (!transcript.main || !transcript.toneMark) {\n throw new Error('Invalid phonetic transcript');\n }\n\n return (\n (transcript.initial?.replaceAll('-', '') || '') +\n (transcript?.medial?.replaceAll('-', '') || '') +\n transcript.main.replaceAll('-', '') +\n (transcript.final?.replaceAll('-', '') || '') +\n transcript.toneMark.toString()\n );\n};\n\nconst buildPhoneticTranscript = (word: string): PhoneticTranscript => {\n word = word.toLowerCase();\n\n let transcript = {\n toneMark: 1,\n } as PhoneticTranscript;\n\n // NOTE: Check tone mark\n toneMarkList.forEach((toneMark) => {\n if (toneMark.toneMark !== 1 && word.includes(toneMark.character)) {\n transcript.toneMark = toneMark.toneMark;\n\n word = word.replace(toneMark.character, toneMark.originalCharacter);\n }\n });\n\n // NOTE: Check initial\n initialList.forEach((initial) => {\n if (\n word.startsWith(initial.character) &&\n word.length - initial.character.length > 0\n ) {\n transcript.initial = initial.phoneme;\n transcript.initialCharacter = initial.character;\n\n word = word.slice(initial.character.length);\n }\n });\n\n // NOTE: Check final\n finalList.forEach((final) => {\n if (\n word.endsWith(final.character) &&\n word.length - final.character.length > 0\n ) {\n transcript.final = final.phoneme;\n transcript.finalCharacter = final.character;\n\n word = word.slice(0, word.length - final.character.length);\n }\n });\n\n // NOTE: Check medial\n if (word.length > 1 && word !== 'oo') {\n if (\n word.startsWith('u') &&\n (transcript.initialCharacter === 'q' ||\n ['y', 'i', 'ê', 'ơ', 'â', 'iê', 'yê', 'ia', 'ya'].includes(\n word.slice(1),\n ))\n ) {\n transcript.medial = medialList[0]!.phoneme;\n transcript.medialCharacter = medialList[0]!.character;\n\n word = word.slice(1);\n } else if (word.startsWith('o')) {\n transcript.medial = medialList[1]!.phoneme;\n transcript.medialCharacter = medialList[1]!.character;\n\n word = word.slice(1);\n }\n }\n\n if (\n word === 'o' &&\n transcript.finalCharacter &&\n ['nh', 'ng', 'ch', 'c'].includes(transcript.finalCharacter)\n ) {\n const main = mainList.filter((main) => main.phoneme === '-ɔ-');\n\n transcript.main = main[0]!.phoneme;\n transcript.mainCharacter = main[0]!.character;\n\n word = word.slice(1);\n } else {\n // NOTE: Check main\n mainList.forEach((main) => {\n if (word === main.character) {\n transcript.main = main.phoneme;\n transcript.mainCharacter = main.character;\n\n word = word.slice(main.character.length);\n }\n });\n }\n\n return transcript;\n};\n\nexport const phoneticTranscriptWord = (word: string) => {\n return word.replaceAll(/[^\\P{L}]+/gmu, (word) => {\n try {\n return transcriptToString(buildPhoneticTranscript(word));\n } catch (e) {\n return word;\n }\n });\n};\n\nexport const phoneticTranscriptSentence = (sentence: string): string => {\n return sentence\n .split(' ')\n .map((word) => phoneticTranscriptWord(word))\n .join(' ');\n};\n"],"mappings":"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","names":["main","word"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
type PhoneticTranscript = {
|
|
2
|
+
main: string;
|
|
3
|
+
mainCharacter: string;
|
|
4
|
+
medial?: string;
|
|
5
|
+
medialCharacter?: string;
|
|
6
|
+
initial?: string;
|
|
7
|
+
initialCharacter?: string;
|
|
8
|
+
final?: string;
|
|
9
|
+
finalCharacter?: string;
|
|
10
|
+
toneMark: number;
|
|
11
|
+
};
|
|
12
|
+
type Constraint = {
|
|
13
|
+
phoneme: string;
|
|
14
|
+
character: string;
|
|
15
|
+
initial?: Array<string>;
|
|
16
|
+
notInitial?: Array<string>;
|
|
17
|
+
medial?: Array<string>;
|
|
18
|
+
notMedial?: Array<string>;
|
|
19
|
+
main?: Array<string>;
|
|
20
|
+
notMain?: Array<string>;
|
|
21
|
+
final?: Array<string>;
|
|
22
|
+
notFinal?: Array<string>;
|
|
23
|
+
};
|
|
24
|
+
declare const phoneticTranscriptWord: (word: string) => string;
|
|
25
|
+
declare const phoneticTranscriptSentence: (sentence: string) => string;
|
|
26
|
+
|
|
27
|
+
export { type Constraint, type PhoneticTranscript, phoneticTranscriptSentence, phoneticTranscriptWord };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
type PhoneticTranscript = {
|
|
2
|
+
main: string;
|
|
3
|
+
mainCharacter: string;
|
|
4
|
+
medial?: string;
|
|
5
|
+
medialCharacter?: string;
|
|
6
|
+
initial?: string;
|
|
7
|
+
initialCharacter?: string;
|
|
8
|
+
final?: string;
|
|
9
|
+
finalCharacter?: string;
|
|
10
|
+
toneMark: number;
|
|
11
|
+
};
|
|
12
|
+
type Constraint = {
|
|
13
|
+
phoneme: string;
|
|
14
|
+
character: string;
|
|
15
|
+
initial?: Array<string>;
|
|
16
|
+
notInitial?: Array<string>;
|
|
17
|
+
medial?: Array<string>;
|
|
18
|
+
notMedial?: Array<string>;
|
|
19
|
+
main?: Array<string>;
|
|
20
|
+
notMain?: Array<string>;
|
|
21
|
+
final?: Array<string>;
|
|
22
|
+
notFinal?: Array<string>;
|
|
23
|
+
};
|
|
24
|
+
declare const phoneticTranscriptWord: (word: string) => string;
|
|
25
|
+
declare const phoneticTranscriptSentence: (sentence: string) => string;
|
|
26
|
+
|
|
27
|
+
export { type Constraint, type PhoneticTranscript, phoneticTranscriptSentence, phoneticTranscriptWord };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
// lib/phonetic_transcript/phonetic_transcript.ts
|
|
2
|
+
var initialList = [
|
|
3
|
+
{ phoneme: "b-", character: "b" },
|
|
4
|
+
{ phoneme: "m-", character: "m" },
|
|
5
|
+
{ phoneme: "f-", character: "ph" },
|
|
6
|
+
{ phoneme: "v-", character: "v" },
|
|
7
|
+
{ phoneme: "t\u02BC-", character: "th" },
|
|
8
|
+
{ phoneme: "\u0288-", character: "tr" },
|
|
9
|
+
{ phoneme: "t-", character: "t" },
|
|
10
|
+
{ phoneme: "d-", character: "\u0111" },
|
|
11
|
+
{ phoneme: "\u0272-", character: "nh" },
|
|
12
|
+
{ phoneme: "\u014B-", character: "ngh", main: ["-i-", "-e-", "-\u025B-", "-ie-"] },
|
|
13
|
+
{ phoneme: "\u014B-", character: "ng" },
|
|
14
|
+
{ phoneme: "n-", character: "n" },
|
|
15
|
+
{ phoneme: "z-", character: "d" },
|
|
16
|
+
{ phoneme: "z-", character: "gi" },
|
|
17
|
+
{ phoneme: "\u0290-", character: "r" },
|
|
18
|
+
{ phoneme: "s-", character: "x" },
|
|
19
|
+
{ phoneme: "\u0282-", character: "s" },
|
|
20
|
+
{ phoneme: "l-", character: "l" },
|
|
21
|
+
{ phoneme: "\u03C7-", character: "kh" },
|
|
22
|
+
{ phoneme: "c-", character: "ch" },
|
|
23
|
+
{ phoneme: "k-", character: "k", main: ["-i-", "-e-", "-\u025B-", "-ie-"] },
|
|
24
|
+
{ phoneme: "k-", character: "q", medial: ["-u\uE608-"] },
|
|
25
|
+
{ phoneme: "k-", character: "c" },
|
|
26
|
+
{ phoneme: "\u0263-", character: "gh", main: ["-i-", "-e-", "-\u025B-", "-ie-"] },
|
|
27
|
+
{ phoneme: "\u0263-", character: "g" },
|
|
28
|
+
{ phoneme: "h-", character: "h" }
|
|
29
|
+
];
|
|
30
|
+
var medialList = [
|
|
31
|
+
{
|
|
32
|
+
phoneme: "-u\uE608-",
|
|
33
|
+
character: "u",
|
|
34
|
+
initial: ["k-"],
|
|
35
|
+
main: ["-i-", "-e-", "-\u0264-", "-\u0264\uE60C-", "-ie-"]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
phoneme: "-u\uE608-",
|
|
39
|
+
character: "o"
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
var mainList = [
|
|
43
|
+
{
|
|
44
|
+
phoneme: "-i-",
|
|
45
|
+
character: "y",
|
|
46
|
+
medial: ["-u\uE608-", "zero"],
|
|
47
|
+
initial: ["zero"],
|
|
48
|
+
final: ["zero"]
|
|
49
|
+
},
|
|
50
|
+
{ phoneme: "-i-", character: "i" },
|
|
51
|
+
{ phoneme: "-e-", character: "\xEA" },
|
|
52
|
+
{ phoneme: "-\u025B-", character: "e" },
|
|
53
|
+
{ phoneme: "-\u026F-", character: "\u01B0" },
|
|
54
|
+
{ phoneme: "-\u0264-", character: "\u01A1" },
|
|
55
|
+
{ phoneme: "-a-", character: "a" },
|
|
56
|
+
{ phoneme: "-u-", character: "u" },
|
|
57
|
+
{ phoneme: "-o-", character: "\xF4" },
|
|
58
|
+
{ phoneme: "-o-", character: "\xF4\xF4" },
|
|
59
|
+
{ phoneme: "-\u0254-", character: "o" },
|
|
60
|
+
{ phoneme: "-\u0254-", character: "oo" },
|
|
61
|
+
{ phoneme: "-\u0264\uE60C-", character: "\xE2" },
|
|
62
|
+
{ phoneme: "-\u025B\uE60C-", character: "a" },
|
|
63
|
+
{ phoneme: "-\u0103-", character: "a", final: ["-w", "-j"] },
|
|
64
|
+
{ phoneme: "-\u0103-", character: "\u0103" },
|
|
65
|
+
{ phoneme: "-\u0254\uE60C-", character: "o", final: ["-\u014B", "-k"] },
|
|
66
|
+
{ phoneme: "-ie-", character: "i\xEA", notFinal: ["zero"], medial: ["zero"] },
|
|
67
|
+
{
|
|
68
|
+
phoneme: "-ie-",
|
|
69
|
+
character: "y\xEA",
|
|
70
|
+
notFinal: ["zero"],
|
|
71
|
+
medial: ["-u\uE608-"],
|
|
72
|
+
initial: ["zero"]
|
|
73
|
+
},
|
|
74
|
+
{ phoneme: "-ie-", character: "ia", final: ["zero"], medial: ["zero"] },
|
|
75
|
+
{ phoneme: "-ie-", character: "ya", final: ["zero"], medial: ["-u\uE608-"] },
|
|
76
|
+
{ phoneme: "-\u026F\u0264-", character: "\u01B0\u01A1", notFinal: ["zero"] },
|
|
77
|
+
{ phoneme: "-\u026F\u0264-", character: "\u01B0a", final: ["zero"] },
|
|
78
|
+
{ phoneme: "-uo-", character: "u\xF4", notFinal: ["zero"] },
|
|
79
|
+
{ phoneme: "-uo-", character: "ua", final: ["zero"] }
|
|
80
|
+
];
|
|
81
|
+
var finalList = [
|
|
82
|
+
{ phoneme: "-m", character: "m" },
|
|
83
|
+
{ phoneme: "-n", character: "n" },
|
|
84
|
+
{ phoneme: "-p", character: "p" },
|
|
85
|
+
{ phoneme: "-t", character: "t" },
|
|
86
|
+
{ phoneme: "-\u014B", character: "nh", main: ["-i-", "-e-", "-\u025B\uE60C-"] },
|
|
87
|
+
{ phoneme: "-\u014B", character: "ng" },
|
|
88
|
+
{ phoneme: "-k", character: "ch", main: ["-i-", "-e-", "-\u025B\uE60C-"] },
|
|
89
|
+
{ phoneme: "-k", character: "c" },
|
|
90
|
+
{ phoneme: "-w", character: "o", main: ["-a-", "-\u025B-"] },
|
|
91
|
+
{ phoneme: "-w", character: "u" },
|
|
92
|
+
{ phoneme: "-j", character: "y", main: ["-\u0103-", "-\u0264\uE60C-"] },
|
|
93
|
+
{ phoneme: "-j", character: "i" }
|
|
94
|
+
];
|
|
95
|
+
var toneMarkList = [
|
|
96
|
+
{ character: "a", originalCharacter: "a", toneMark: 1 },
|
|
97
|
+
{ character: "\xE0", originalCharacter: "a", toneMark: 2 },
|
|
98
|
+
{ character: "\xE3", originalCharacter: "a", toneMark: 3 },
|
|
99
|
+
{ character: "\u1EA3", originalCharacter: "a", toneMark: 4 },
|
|
100
|
+
{ character: "\xE1", originalCharacter: "a", toneMark: 5 },
|
|
101
|
+
{ character: "\u1EA1", originalCharacter: "a", toneMark: 6 },
|
|
102
|
+
{ character: "\u0103", originalCharacter: "\u0103", toneMark: 1 },
|
|
103
|
+
{ character: "\u1EB1", originalCharacter: "\u0103", toneMark: 2 },
|
|
104
|
+
{ character: "\u1EB5", originalCharacter: "\u0103", toneMark: 3 },
|
|
105
|
+
{ character: "\u1EB3", originalCharacter: "\u0103", toneMark: 4 },
|
|
106
|
+
{ character: "\u1EAF", originalCharacter: "\u0103", toneMark: 5 },
|
|
107
|
+
{ character: "\u1EB7", originalCharacter: "\u0103", toneMark: 6 },
|
|
108
|
+
{ character: "\xE2", originalCharacter: "\xE2", toneMark: 1 },
|
|
109
|
+
{ character: "\u1EA7", originalCharacter: "\xE2", toneMark: 2 },
|
|
110
|
+
{ character: "\u1EAB", originalCharacter: "\xE2", toneMark: 3 },
|
|
111
|
+
{ character: "\u1EA9", originalCharacter: "\xE2", toneMark: 4 },
|
|
112
|
+
{ character: "\u1EA5", originalCharacter: "\xE2", toneMark: 5 },
|
|
113
|
+
{ character: "\u1EAD", originalCharacter: "\xE2", toneMark: 6 },
|
|
114
|
+
{ character: "e", originalCharacter: "e", toneMark: 1 },
|
|
115
|
+
{ character: "\xE8", originalCharacter: "e", toneMark: 2 },
|
|
116
|
+
{ character: "\u1EBD", originalCharacter: "e", toneMark: 3 },
|
|
117
|
+
{ character: "\u1EBB", originalCharacter: "e", toneMark: 4 },
|
|
118
|
+
{ character: "\xE9", originalCharacter: "e", toneMark: 5 },
|
|
119
|
+
{ character: "\u1EB9", originalCharacter: "e", toneMark: 6 },
|
|
120
|
+
{ character: "\xEA", originalCharacter: "\xEA", toneMark: 1 },
|
|
121
|
+
{ character: "\u1EC1", originalCharacter: "\xEA", toneMark: 2 },
|
|
122
|
+
{ character: "\u1EC5", originalCharacter: "\xEA", toneMark: 3 },
|
|
123
|
+
{ character: "\u1EC3", originalCharacter: "\xEA", toneMark: 4 },
|
|
124
|
+
{ character: "\u1EBF", originalCharacter: "\xEA", toneMark: 5 },
|
|
125
|
+
{ character: "\u1EC7", originalCharacter: "\xEA", toneMark: 6 },
|
|
126
|
+
{ character: "i", originalCharacter: "i", toneMark: 1 },
|
|
127
|
+
{ character: "\xEC", originalCharacter: "i", toneMark: 2 },
|
|
128
|
+
{ character: "\u0129", originalCharacter: "i", toneMark: 3 },
|
|
129
|
+
{ character: "\u1EC9", originalCharacter: "i", toneMark: 4 },
|
|
130
|
+
{ character: "\xED", originalCharacter: "i", toneMark: 5 },
|
|
131
|
+
{ character: "\u1ECB", originalCharacter: "i", toneMark: 6 },
|
|
132
|
+
{ character: "o", originalCharacter: "o", toneMark: 1 },
|
|
133
|
+
{ character: "\xF2", originalCharacter: "o", toneMark: 2 },
|
|
134
|
+
{ character: "\xF5", originalCharacter: "o", toneMark: 3 },
|
|
135
|
+
{ character: "\u1ECF", originalCharacter: "o", toneMark: 4 },
|
|
136
|
+
{ character: "\xF3", originalCharacter: "o", toneMark: 5 },
|
|
137
|
+
{ character: "\u1ECD", originalCharacter: "o", toneMark: 6 },
|
|
138
|
+
{ character: "\xF4", originalCharacter: "\xF4", toneMark: 1 },
|
|
139
|
+
{ character: "\u1ED3", originalCharacter: "\xF4", toneMark: 2 },
|
|
140
|
+
{ character: "\u1ED7", originalCharacter: "\xF4", toneMark: 3 },
|
|
141
|
+
{ character: "\u1ED5", originalCharacter: "\xF4", toneMark: 4 },
|
|
142
|
+
{ character: "\u1ED1", originalCharacter: "\xF4", toneMark: 5 },
|
|
143
|
+
{ character: "\u1ED9", originalCharacter: "\xF4", toneMark: 6 },
|
|
144
|
+
{ character: "\u01A1", originalCharacter: "\u01A1", toneMark: 1 },
|
|
145
|
+
{ character: "\u1EDD", originalCharacter: "\u01A1", toneMark: 2 },
|
|
146
|
+
{ character: "\u1EE1", originalCharacter: "\u01A1", toneMark: 3 },
|
|
147
|
+
{ character: "\u1EDF", originalCharacter: "\u01A1", toneMark: 4 },
|
|
148
|
+
{ character: "\u1EDB", originalCharacter: "\u01A1", toneMark: 5 },
|
|
149
|
+
{ character: "\u1EE3", originalCharacter: "\u01A1", toneMark: 6 },
|
|
150
|
+
{ character: "u", originalCharacter: "u", toneMark: 1 },
|
|
151
|
+
{ character: "\xF9", originalCharacter: "u", toneMark: 2 },
|
|
152
|
+
{ character: "\u0169", originalCharacter: "u", toneMark: 3 },
|
|
153
|
+
{ character: "\u1EE7", originalCharacter: "u", toneMark: 4 },
|
|
154
|
+
{ character: "\xFA", originalCharacter: "u", toneMark: 5 },
|
|
155
|
+
{ character: "\u1EE5", originalCharacter: "u", toneMark: 6 },
|
|
156
|
+
{ character: "\u01B0", originalCharacter: "\u01B0", toneMark: 1 },
|
|
157
|
+
{ character: "\u1EEB", originalCharacter: "\u01B0", toneMark: 2 },
|
|
158
|
+
{ character: "\u1EEF", originalCharacter: "\u01B0", toneMark: 3 },
|
|
159
|
+
{ character: "\u1EED", originalCharacter: "\u01B0", toneMark: 4 },
|
|
160
|
+
{ character: "\u1EE9", originalCharacter: "\u01B0", toneMark: 5 },
|
|
161
|
+
{ character: "\u1EF1", originalCharacter: "\u01B0", toneMark: 6 },
|
|
162
|
+
{ character: "y", originalCharacter: "y", toneMark: 1 },
|
|
163
|
+
{ character: "\u1EF3", originalCharacter: "y", toneMark: 2 },
|
|
164
|
+
{ character: "\u1EF9", originalCharacter: "y", toneMark: 3 },
|
|
165
|
+
{ character: "\u1EF7", originalCharacter: "y", toneMark: 4 },
|
|
166
|
+
{ character: "\xFD", originalCharacter: "y", toneMark: 5 },
|
|
167
|
+
{ character: "\u1EF5", originalCharacter: "y", toneMark: 6 }
|
|
168
|
+
];
|
|
169
|
+
var transcriptToString = (transcript) => {
|
|
170
|
+
if (!transcript.main || !transcript.toneMark) {
|
|
171
|
+
throw new Error("Invalid phonetic transcript");
|
|
172
|
+
}
|
|
173
|
+
return (transcript.initial?.replaceAll("-", "") || "") + (transcript?.medial?.replaceAll("-", "") || "") + transcript.main.replaceAll("-", "") + (transcript.final?.replaceAll("-", "") || "") + transcript.toneMark.toString();
|
|
174
|
+
};
|
|
175
|
+
var buildPhoneticTranscript = (word) => {
|
|
176
|
+
word = word.toLowerCase();
|
|
177
|
+
let transcript = {
|
|
178
|
+
toneMark: 1
|
|
179
|
+
};
|
|
180
|
+
toneMarkList.forEach((toneMark) => {
|
|
181
|
+
if (toneMark.toneMark !== 1 && word.includes(toneMark.character)) {
|
|
182
|
+
transcript.toneMark = toneMark.toneMark;
|
|
183
|
+
word = word.replace(toneMark.character, toneMark.originalCharacter);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
initialList.forEach((initial) => {
|
|
187
|
+
if (word.startsWith(initial.character) && word.length - initial.character.length > 0) {
|
|
188
|
+
transcript.initial = initial.phoneme;
|
|
189
|
+
transcript.initialCharacter = initial.character;
|
|
190
|
+
word = word.slice(initial.character.length);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
finalList.forEach((final) => {
|
|
194
|
+
if (word.endsWith(final.character) && word.length - final.character.length > 0) {
|
|
195
|
+
transcript.final = final.phoneme;
|
|
196
|
+
transcript.finalCharacter = final.character;
|
|
197
|
+
word = word.slice(0, word.length - final.character.length);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
if (word.length > 1 && word !== "oo") {
|
|
201
|
+
if (word.startsWith("u") && (transcript.initialCharacter === "q" || ["y", "i", "\xEA", "\u01A1", "\xE2", "i\xEA", "y\xEA", "ia", "ya"].includes(
|
|
202
|
+
word.slice(1)
|
|
203
|
+
))) {
|
|
204
|
+
transcript.medial = medialList[0].phoneme;
|
|
205
|
+
transcript.medialCharacter = medialList[0].character;
|
|
206
|
+
word = word.slice(1);
|
|
207
|
+
} else if (word.startsWith("o")) {
|
|
208
|
+
transcript.medial = medialList[1].phoneme;
|
|
209
|
+
transcript.medialCharacter = medialList[1].character;
|
|
210
|
+
word = word.slice(1);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (word === "o" && transcript.finalCharacter && ["nh", "ng", "ch", "c"].includes(transcript.finalCharacter)) {
|
|
214
|
+
const main = mainList.filter((main2) => main2.phoneme === "-\u0254\uE60C-");
|
|
215
|
+
transcript.main = main[0].phoneme;
|
|
216
|
+
transcript.mainCharacter = main[0].character;
|
|
217
|
+
word = word.slice(1);
|
|
218
|
+
} else {
|
|
219
|
+
mainList.forEach((main) => {
|
|
220
|
+
if (word === main.character) {
|
|
221
|
+
transcript.main = main.phoneme;
|
|
222
|
+
transcript.mainCharacter = main.character;
|
|
223
|
+
word = word.slice(main.character.length);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return transcript;
|
|
228
|
+
};
|
|
229
|
+
var phoneticTranscriptWord = (word) => {
|
|
230
|
+
return word.replaceAll(/[^\P{L}]+/gmu, (word2) => {
|
|
231
|
+
try {
|
|
232
|
+
return transcriptToString(buildPhoneticTranscript(word2));
|
|
233
|
+
} catch (e) {
|
|
234
|
+
return word2;
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
};
|
|
238
|
+
var phoneticTranscriptSentence = (sentence) => {
|
|
239
|
+
return sentence.split(" ").map((word) => phoneticTranscriptWord(word)).join(" ");
|
|
240
|
+
};
|
|
241
|
+
export {
|
|
242
|
+
phoneticTranscriptSentence,
|
|
243
|
+
phoneticTranscriptWord
|
|
244
|
+
};
|
|
245
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../lib/phonetic_transcript/phonetic_transcript.ts"],"sourcesContent":["export type PhoneticTranscript = {\n main: string;\n mainCharacter: string;\n medial?: string;\n medialCharacter?: string;\n initial?: string;\n initialCharacter?: string;\n final?: string;\n finalCharacter?: string;\n toneMark: number;\n};\n\nexport type Constraint = {\n phoneme: string;\n character: string;\n initial?: Array<string>;\n notInitial?: Array<string>;\n medial?: Array<string>;\n notMedial?: Array<string>;\n main?: Array<string>;\n notMain?: Array<string>;\n final?: Array<string>;\n notFinal?: Array<string>;\n};\n\n// NOTE: Check the character orders, because \"t\" might be matched before \"th\"\nconst initialList = [\n { phoneme: 'b-', character: 'b' },\n { phoneme: 'm-', character: 'm' },\n { phoneme: 'f-', character: 'ph' },\n\n { phoneme: 'v-', character: 'v' },\n\n { phoneme: 'tʼ-', character: 'th' },\n\n { phoneme: 'ʈ-', character: 'tr' },\n\n { phoneme: 't-', character: 't' },\n\n { phoneme: 'd-', character: 'đ' },\n\n { phoneme: 'ɲ-', character: 'nh' },\n\n { phoneme: 'ŋ-', character: 'ngh', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'ŋ-', character: 'ng' },\n\n { phoneme: 'n-', character: 'n' },\n\n { phoneme: 'z-', character: 'd' },\n { phoneme: 'z-', character: 'gi' },\n\n { phoneme: 'ʐ-', character: 'r' },\n\n { phoneme: 's-', character: 'x' },\n { phoneme: 'ʂ-', character: 's' },\n\n { phoneme: 'l-', character: 'l' },\n\n { phoneme: 'χ-', character: 'kh' },\n\n { phoneme: 'c-', character: 'ch' },\n\n { phoneme: 'k-', character: 'k', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'k-', character: 'q', medial: ['-u-'] },\n { phoneme: 'k-', character: 'c' },\n\n { phoneme: 'ɣ-', character: 'gh', main: ['-i-', '-e-', '-ɛ-', '-ie-'] },\n { phoneme: 'ɣ-', character: 'g' },\n\n { phoneme: 'h-', character: 'h' },\n] satisfies Constraint[];\n\nconst medialList = [\n {\n phoneme: '-u-',\n character: 'u',\n initial: ['k-'],\n main: ['-i-', '-e-', '-ɤ-', '-ɤ-', '-ie-'],\n },\n {\n phoneme: '-u-',\n character: 'o',\n },\n] satisfies Constraint[];\n\nconst mainList = [\n {\n phoneme: '-i-',\n character: 'y',\n medial: ['-u-', 'zero'],\n initial: ['zero'],\n final: ['zero'],\n },\n { phoneme: '-i-', character: 'i' },\n\n { phoneme: '-e-', character: 'ê' },\n\n { phoneme: '-ɛ-', character: 'e' },\n\n { phoneme: '-ɯ-', character: 'ư' },\n\n { phoneme: '-ɤ-', character: 'ơ' },\n\n { phoneme: '-a-', character: 'a' },\n\n { phoneme: '-u-', character: 'u' },\n\n { phoneme: '-o-', character: 'ô' },\n { phoneme: '-o-', character: 'ôô' },\n\n { phoneme: '-ɔ-', character: 'o' },\n { phoneme: '-ɔ-', character: 'oo' },\n\n { phoneme: '-ɤ-', character: 'â' },\n\n { phoneme: '-ɛ-', character: 'a' },\n\n { phoneme: '-ă-', character: 'a', final: ['-w', '-j'] },\n { phoneme: '-ă-', character: 'ă' },\n\n { phoneme: '-ɔ-', character: 'o', final: ['-ŋ', '-k'] },\n\n { phoneme: '-ie-', character: 'iê', notFinal: ['zero'], medial: ['zero'] },\n {\n phoneme: '-ie-',\n character: 'yê',\n notFinal: ['zero'],\n medial: ['-u-'],\n initial: ['zero'],\n },\n { phoneme: '-ie-', character: 'ia', final: ['zero'], medial: ['zero'] },\n { phoneme: '-ie-', character: 'ya', final: ['zero'], medial: ['-u-'] },\n\n { phoneme: '-ɯɤ-', character: 'ươ', notFinal: ['zero'] },\n { phoneme: '-ɯɤ-', character: 'ưa', final: ['zero'] },\n\n { phoneme: '-uo-', character: 'uô', notFinal: ['zero'] },\n { phoneme: '-uo-', character: 'ua', final: ['zero'] },\n] satisfies Constraint[];\n\nconst finalList = [\n { phoneme: '-m', character: 'm' },\n\n { phoneme: '-n', character: 'n' },\n\n { phoneme: '-p', character: 'p' },\n\n { phoneme: '-t', character: 't' },\n\n { phoneme: '-ŋ', character: 'nh', main: ['-i-', '-e-', '-ɛ-'] },\n { phoneme: '-ŋ', character: 'ng' },\n\n { phoneme: '-k', character: 'ch', main: ['-i-', '-e-', '-ɛ-'] },\n { phoneme: '-k', character: 'c' },\n\n { phoneme: '-w', character: 'o', main: ['-a-', '-ɛ-'] },\n { phoneme: '-w', character: 'u' },\n\n { phoneme: '-j', character: 'y', main: ['-ă-', '-ɤ-'] },\n { phoneme: '-j', character: 'i' },\n] satisfies Constraint[];\n\nconst toneMarkList = [\n { character: 'a', originalCharacter: 'a', toneMark: 1 },\n { character: 'à', originalCharacter: 'a', toneMark: 2 },\n { character: 'ã', originalCharacter: 'a', toneMark: 3 },\n { character: 'ả', originalCharacter: 'a', toneMark: 4 },\n { character: 'á', originalCharacter: 'a', toneMark: 5 },\n { character: 'ạ', originalCharacter: 'a', toneMark: 6 },\n\n { character: 'ă', originalCharacter: 'ă', toneMark: 1 },\n { character: 'ằ', originalCharacter: 'ă', toneMark: 2 },\n { character: 'ẵ', originalCharacter: 'ă', toneMark: 3 },\n { character: 'ẳ', originalCharacter: 'ă', toneMark: 4 },\n { character: 'ắ', originalCharacter: 'ă', toneMark: 5 },\n { character: 'ặ', originalCharacter: 'ă', toneMark: 6 },\n\n { character: 'â', originalCharacter: 'â', toneMark: 1 },\n { character: 'ầ', originalCharacter: 'â', toneMark: 2 },\n { character: 'ẫ', originalCharacter: 'â', toneMark: 3 },\n { character: 'ẩ', originalCharacter: 'â', toneMark: 4 },\n { character: 'ấ', originalCharacter: 'â', toneMark: 5 },\n { character: 'ậ', originalCharacter: 'â', toneMark: 6 },\n\n { character: 'e', originalCharacter: 'e', toneMark: 1 },\n { character: 'è', originalCharacter: 'e', toneMark: 2 },\n { character: 'ẽ', originalCharacter: 'e', toneMark: 3 },\n { character: 'ẻ', originalCharacter: 'e', toneMark: 4 },\n { character: 'é', originalCharacter: 'e', toneMark: 5 },\n { character: 'ẹ', originalCharacter: 'e', toneMark: 6 },\n\n { character: 'ê', originalCharacter: 'ê', toneMark: 1 },\n { character: 'ề', originalCharacter: 'ê', toneMark: 2 },\n { character: 'ễ', originalCharacter: 'ê', toneMark: 3 },\n { character: 'ể', originalCharacter: 'ê', toneMark: 4 },\n { character: 'ế', originalCharacter: 'ê', toneMark: 5 },\n { character: 'ệ', originalCharacter: 'ê', toneMark: 6 },\n\n { character: 'i', originalCharacter: 'i', toneMark: 1 },\n { character: 'ì', originalCharacter: 'i', toneMark: 2 },\n { character: 'ĩ', originalCharacter: 'i', toneMark: 3 },\n { character: 'ỉ', originalCharacter: 'i', toneMark: 4 },\n { character: 'í', originalCharacter: 'i', toneMark: 5 },\n { character: 'ị', originalCharacter: 'i', toneMark: 6 },\n\n { character: 'o', originalCharacter: 'o', toneMark: 1 },\n { character: 'ò', originalCharacter: 'o', toneMark: 2 },\n { character: 'õ', originalCharacter: 'o', toneMark: 3 },\n { character: 'ỏ', originalCharacter: 'o', toneMark: 4 },\n { character: 'ó', originalCharacter: 'o', toneMark: 5 },\n { character: 'ọ', originalCharacter: 'o', toneMark: 6 },\n\n { character: 'ô', originalCharacter: 'ô', toneMark: 1 },\n { character: 'ồ', originalCharacter: 'ô', toneMark: 2 },\n { character: 'ỗ', originalCharacter: 'ô', toneMark: 3 },\n { character: 'ổ', originalCharacter: 'ô', toneMark: 4 },\n { character: 'ố', originalCharacter: 'ô', toneMark: 5 },\n { character: 'ộ', originalCharacter: 'ô', toneMark: 6 },\n\n { character: 'ơ', originalCharacter: 'ơ', toneMark: 1 },\n { character: 'ờ', originalCharacter: 'ơ', toneMark: 2 },\n { character: 'ỡ', originalCharacter: 'ơ', toneMark: 3 },\n { character: 'ở', originalCharacter: 'ơ', toneMark: 4 },\n { character: 'ớ', originalCharacter: 'ơ', toneMark: 5 },\n { character: 'ợ', originalCharacter: 'ơ', toneMark: 6 },\n\n { character: 'u', originalCharacter: 'u', toneMark: 1 },\n { character: 'ù', originalCharacter: 'u', toneMark: 2 },\n { character: 'ũ', originalCharacter: 'u', toneMark: 3 },\n { character: 'ủ', originalCharacter: 'u', toneMark: 4 },\n { character: 'ú', originalCharacter: 'u', toneMark: 5 },\n { character: 'ụ', originalCharacter: 'u', toneMark: 6 },\n\n { character: 'ư', originalCharacter: 'ư', toneMark: 1 },\n { character: 'ừ', originalCharacter: 'ư', toneMark: 2 },\n { character: 'ữ', originalCharacter: 'ư', toneMark: 3 },\n { character: 'ử', originalCharacter: 'ư', toneMark: 4 },\n { character: 'ứ', originalCharacter: 'ư', toneMark: 5 },\n { character: 'ự', originalCharacter: 'ư', toneMark: 6 },\n\n { character: 'y', originalCharacter: 'y', toneMark: 1 },\n { character: 'ỳ', originalCharacter: 'y', toneMark: 2 },\n { character: 'ỹ', originalCharacter: 'y', toneMark: 3 },\n { character: 'ỷ', originalCharacter: 'y', toneMark: 4 },\n { character: 'ý', originalCharacter: 'y', toneMark: 5 },\n { character: 'ỵ', originalCharacter: 'y', toneMark: 6 },\n];\n\nconst transcriptToString = (transcript: PhoneticTranscript): string => {\n if (!transcript.main || !transcript.toneMark) {\n throw new Error('Invalid phonetic transcript');\n }\n\n return (\n (transcript.initial?.replaceAll('-', '') || '') +\n (transcript?.medial?.replaceAll('-', '') || '') +\n transcript.main.replaceAll('-', '') +\n (transcript.final?.replaceAll('-', '') || '') +\n transcript.toneMark.toString()\n );\n};\n\nconst buildPhoneticTranscript = (word: string): PhoneticTranscript => {\n word = word.toLowerCase();\n\n let transcript = {\n toneMark: 1,\n } as PhoneticTranscript;\n\n // NOTE: Check tone mark\n toneMarkList.forEach((toneMark) => {\n if (toneMark.toneMark !== 1 && word.includes(toneMark.character)) {\n transcript.toneMark = toneMark.toneMark;\n\n word = word.replace(toneMark.character, toneMark.originalCharacter);\n }\n });\n\n // NOTE: Check initial\n initialList.forEach((initial) => {\n if (\n word.startsWith(initial.character) &&\n word.length - initial.character.length > 0\n ) {\n transcript.initial = initial.phoneme;\n transcript.initialCharacter = initial.character;\n\n word = word.slice(initial.character.length);\n }\n });\n\n // NOTE: Check final\n finalList.forEach((final) => {\n if (\n word.endsWith(final.character) &&\n word.length - final.character.length > 0\n ) {\n transcript.final = final.phoneme;\n transcript.finalCharacter = final.character;\n\n word = word.slice(0, word.length - final.character.length);\n }\n });\n\n // NOTE: Check medial\n if (word.length > 1 && word !== 'oo') {\n if (\n word.startsWith('u') &&\n (transcript.initialCharacter === 'q' ||\n ['y', 'i', 'ê', 'ơ', 'â', 'iê', 'yê', 'ia', 'ya'].includes(\n word.slice(1),\n ))\n ) {\n transcript.medial = medialList[0]!.phoneme;\n transcript.medialCharacter = medialList[0]!.character;\n\n word = word.slice(1);\n } else if (word.startsWith('o')) {\n transcript.medial = medialList[1]!.phoneme;\n transcript.medialCharacter = medialList[1]!.character;\n\n word = word.slice(1);\n }\n }\n\n if (\n word === 'o' &&\n transcript.finalCharacter &&\n ['nh', 'ng', 'ch', 'c'].includes(transcript.finalCharacter)\n ) {\n const main = mainList.filter((main) => main.phoneme === '-ɔ-');\n\n transcript.main = main[0]!.phoneme;\n transcript.mainCharacter = main[0]!.character;\n\n word = word.slice(1);\n } else {\n // NOTE: Check main\n mainList.forEach((main) => {\n if (word === main.character) {\n transcript.main = main.phoneme;\n transcript.mainCharacter = main.character;\n\n word = word.slice(main.character.length);\n }\n });\n }\n\n return transcript;\n};\n\nexport const phoneticTranscriptWord = (word: string) => {\n return word.replaceAll(/[^\\P{L}]+/gmu, (word) => {\n try {\n return transcriptToString(buildPhoneticTranscript(word));\n } catch (e) {\n return word;\n }\n });\n};\n\nexport const phoneticTranscriptSentence = (sentence: string): string => {\n return sentence\n .split(' ')\n .map((word) => phoneticTranscriptWord(word))\n .join(' ');\n};\n"],"mappings":"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","names":["main","word"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vietnamese-phonetic-transcript",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"author": "DuckyMomo20012",
|
|
5
|
+
"description": "A library for converting Vietnamese text to its phonetic transcription.",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/DuckyMomo20012/vietnamese-phonetic-transcript.git"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"module": "./dist/index.mjs",
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"exports": {
|
|
18
|
+
"./package.json": "./package.json",
|
|
19
|
+
".": {
|
|
20
|
+
"import": "./dist/index.js",
|
|
21
|
+
"default": "./dist/index.cjs"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@arethetypeswrong/cli": "0.18.2",
|
|
26
|
+
"@commitlint/cli": "19.8.1",
|
|
27
|
+
"@commitlint/config-conventional": "19.8.1",
|
|
28
|
+
"@types/node": "24.3.1",
|
|
29
|
+
"@typescript-eslint/eslint-plugin": "8.41.0",
|
|
30
|
+
"@typescript-eslint/parser": "8.41.0",
|
|
31
|
+
"eslint": "8.57.1",
|
|
32
|
+
"eslint-config-airbnb-base": "15.0.0",
|
|
33
|
+
"eslint-config-prettier": "9.1.2",
|
|
34
|
+
"eslint-import-resolver-typescript": "3.10.1",
|
|
35
|
+
"eslint-plugin-import": "2.32.0",
|
|
36
|
+
"eslint-plugin-jsx-a11y": "6.10.2",
|
|
37
|
+
"eslint-plugin-prettier": "5.5.4",
|
|
38
|
+
"eslint-plugin-react": "7.37.5",
|
|
39
|
+
"eslint-plugin-react-hooks": "5.2.0",
|
|
40
|
+
"husky": "9.1.7",
|
|
41
|
+
"lint-staged": "16.1.6",
|
|
42
|
+
"prettier": "3.6.2",
|
|
43
|
+
"tsup": "8.5.0",
|
|
44
|
+
"typescript": "5.9.2",
|
|
45
|
+
"vitest": "3.2.4"
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"lint": "tsc",
|
|
49
|
+
"build": "tsup",
|
|
50
|
+
"test": "vitest run",
|
|
51
|
+
"check-exports": "attw --pack . --ignore-rules=cjs-resolves-to-esm",
|
|
52
|
+
"prepublish": "pnpm run build && pnpm run check-exports && pnpm run lint"
|
|
53
|
+
}
|
|
54
|
+
}
|