@polyglot-bundles/ms-word-lists 0.3.7 → 0.4.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/package.json +13 -1
- package/src/index.ts +489 -489
- package/src/json/a1/a1-colors.json +80 -0
- package/src/json/a1/a1-family.json +66 -0
- package/src/json/a1/a1-food.json +80 -0
- package/src/json/a1/a1-greetings.json +80 -0
- package/src/json/a1/a1-numbers.json +80 -0
- package/src/json/a1/a1-vocabulary-01.json +411 -411
- package/src/json/a1/a1-vocabulary-02.json +411 -411
- package/src/json/a1/a1-vocabulary-03.json +411 -411
- package/src/json/a1/a1-vocabulary-04.json +419 -419
- package/src/json/a2/a2-vocabulary-01.json +411 -411
- package/src/json/a2/a2-vocabulary-02.json +411 -411
- package/src/json/a2/a2-vocabulary-03.json +411 -411
- package/src/json/a2/a2-vocabulary-04.json +411 -411
- package/src/json/a2/a2-vocabulary-05.json +411 -411
- package/src/json/a2/a2-vocabulary-06.json +411 -411
- package/src/json/a2/a2-vocabulary-07.json +411 -411
- package/src/json/a2/a2-vocabulary-08.json +411 -411
- package/src/json/a2/a2-vocabulary-09.json +411 -411
- package/src/json/a2/a2-vocabulary-10.json +411 -411
- package/src/json/a2/a2-vocabulary-11.json +411 -411
- package/src/json/a2/a2-vocabulary-12.json +411 -411
- package/src/json/b1/b1-vocabulary-01.json +411 -411
- package/src/json/b1/b1-vocabulary-02.json +411 -411
- package/src/json/b1/b1-vocabulary-03.json +411 -411
- package/src/json/b1/b1-vocabulary-04.json +411 -411
- package/src/json/b1/b1-vocabulary-05.json +411 -411
- package/src/json/b1/b1-vocabulary-06.json +411 -411
- package/src/json/b1/b1-vocabulary-07.json +411 -411
- package/src/json/b1/b1-vocabulary-08.json +411 -411
- package/src/json/b1/b1-vocabulary-09.json +411 -411
- package/src/json/b1/b1-vocabulary-10.json +411 -411
- package/src/json/b1/b1-vocabulary-11.json +411 -411
- package/src/json/b1/b1-vocabulary-12.json +411 -411
- package/src/json/b1/b1-vocabulary-13.json +411 -411
- package/src/json/b1/b1-vocabulary-14.json +411 -411
- package/src/json/b1/b1-vocabulary-15.json +411 -411
- package/src/json/b1/b1-vocabulary-16.json +411 -411
- package/src/json/b1/b1-vocabulary-17.json +411 -411
- package/src/json/b1/b1-vocabulary-18.json +411 -411
- package/src/json/b1/b1-vocabulary-19.json +411 -411
- package/src/json/b1/b1-vocabulary-20.json +411 -411
- package/src/json/b1/b1-vocabulary-21.json +411 -411
- package/src/json/b1/b1-vocabulary-22.json +411 -411
- package/src/json/b1/b1-vocabulary-23.json +411 -411
- package/src/json/b1/b1-vocabulary-24.json +403 -403
- package/src/levels/a2.ts +16 -0
- package/src/levels/b1.ts +16 -0
- package/src/vocab.ts +28 -0
- package/dist/a1-vocabulary-01-B-Sl4N-Z.js +0 -417
- package/dist/a1-vocabulary-01-B-Sl4N-Z.js.map +0 -1
- package/dist/a1-vocabulary-02-5hBbCJE5.js +0 -417
- package/dist/a1-vocabulary-02-5hBbCJE5.js.map +0 -1
- package/dist/a1-vocabulary-03-HcA5jwwP.js +0 -417
- package/dist/a1-vocabulary-03-HcA5jwwP.js.map +0 -1
- package/dist/a1-vocabulary-04-CB3ugvsX.js +0 -425
- package/dist/a1-vocabulary-04-CB3ugvsX.js.map +0 -1
- package/dist/a2-vocabulary-01-Bx17g-Ty.js +0 -417
- package/dist/a2-vocabulary-01-Bx17g-Ty.js.map +0 -1
- package/dist/a2-vocabulary-02-BipmmugT.js +0 -417
- package/dist/a2-vocabulary-02-BipmmugT.js.map +0 -1
- package/dist/a2-vocabulary-03-CCMfIx-j.js +0 -417
- package/dist/a2-vocabulary-03-CCMfIx-j.js.map +0 -1
- package/dist/a2-vocabulary-04-aXX-EmpH.js +0 -417
- package/dist/a2-vocabulary-04-aXX-EmpH.js.map +0 -1
- package/dist/a2-vocabulary-05-CFfxqXj6.js +0 -417
- package/dist/a2-vocabulary-05-CFfxqXj6.js.map +0 -1
- package/dist/a2-vocabulary-06-shAMv1mq.js +0 -417
- package/dist/a2-vocabulary-06-shAMv1mq.js.map +0 -1
- package/dist/a2-vocabulary-07-BiKLhJGp.js +0 -417
- package/dist/a2-vocabulary-07-BiKLhJGp.js.map +0 -1
- package/dist/a2-vocabulary-08-B4iqXP2b.js +0 -417
- package/dist/a2-vocabulary-08-B4iqXP2b.js.map +0 -1
- package/dist/a2-vocabulary-09-_MItXcR4.js +0 -417
- package/dist/a2-vocabulary-09-_MItXcR4.js.map +0 -1
- package/dist/a2-vocabulary-10-I3BCTOhe.js +0 -417
- package/dist/a2-vocabulary-10-I3BCTOhe.js.map +0 -1
- package/dist/a2-vocabulary-11-DuABI9u_.js +0 -417
- package/dist/a2-vocabulary-11-DuABI9u_.js.map +0 -1
- package/dist/a2-vocabulary-12-B8gd65Jy.js +0 -417
- package/dist/a2-vocabulary-12-B8gd65Jy.js.map +0 -1
- package/dist/b1-vocabulary-01-PPSYJxgH.js +0 -417
- package/dist/b1-vocabulary-01-PPSYJxgH.js.map +0 -1
- package/dist/b1-vocabulary-02-BbKDIktU.js +0 -417
- package/dist/b1-vocabulary-02-BbKDIktU.js.map +0 -1
- package/dist/b1-vocabulary-03-BUnLLa-7.js +0 -417
- package/dist/b1-vocabulary-03-BUnLLa-7.js.map +0 -1
- package/dist/b1-vocabulary-04-BvpXSJk2.js +0 -417
- package/dist/b1-vocabulary-04-BvpXSJk2.js.map +0 -1
- package/dist/b1-vocabulary-05-DMWqK26o.js +0 -417
- package/dist/b1-vocabulary-05-DMWqK26o.js.map +0 -1
- package/dist/b1-vocabulary-06-odmNjTQc.js +0 -417
- package/dist/b1-vocabulary-06-odmNjTQc.js.map +0 -1
- package/dist/b1-vocabulary-07-BFt1QFHL.js +0 -417
- package/dist/b1-vocabulary-07-BFt1QFHL.js.map +0 -1
- package/dist/b1-vocabulary-08-DGemjlZ_.js +0 -417
- package/dist/b1-vocabulary-08-DGemjlZ_.js.map +0 -1
- package/dist/b1-vocabulary-09-Cx7UyaOM.js +0 -417
- package/dist/b1-vocabulary-09-Cx7UyaOM.js.map +0 -1
- package/dist/b1-vocabulary-10-iOEKA62o.js +0 -417
- package/dist/b1-vocabulary-10-iOEKA62o.js.map +0 -1
- package/dist/b1-vocabulary-11-qdoguu3f.js +0 -417
- package/dist/b1-vocabulary-11-qdoguu3f.js.map +0 -1
- package/dist/b1-vocabulary-12-BSsTvkA6.js +0 -417
- package/dist/b1-vocabulary-12-BSsTvkA6.js.map +0 -1
- package/dist/b1-vocabulary-13-CnGDzEyg.js +0 -417
- package/dist/b1-vocabulary-13-CnGDzEyg.js.map +0 -1
- package/dist/b1-vocabulary-14-mxACZeBW.js +0 -417
- package/dist/b1-vocabulary-14-mxACZeBW.js.map +0 -1
- package/dist/b1-vocabulary-15-C_05nIh_.js +0 -417
- package/dist/b1-vocabulary-15-C_05nIh_.js.map +0 -1
- package/dist/b1-vocabulary-16-CDKT7HTn.js +0 -417
- package/dist/b1-vocabulary-16-CDKT7HTn.js.map +0 -1
- package/dist/b1-vocabulary-17-Cd7XW96i.js +0 -417
- package/dist/b1-vocabulary-17-Cd7XW96i.js.map +0 -1
- package/dist/b1-vocabulary-18-yUDg2oDY.js +0 -417
- package/dist/b1-vocabulary-18-yUDg2oDY.js.map +0 -1
- package/dist/b1-vocabulary-19-BAYipJEn.js +0 -417
- package/dist/b1-vocabulary-19-BAYipJEn.js.map +0 -1
- package/dist/b1-vocabulary-20-B9RJf4eR.js +0 -417
- package/dist/b1-vocabulary-20-B9RJf4eR.js.map +0 -1
- package/dist/b1-vocabulary-21-BlRuwtsX.js +0 -417
- package/dist/b1-vocabulary-21-BlRuwtsX.js.map +0 -1
- package/dist/b1-vocabulary-22-BZZE_tvv.js +0 -417
- package/dist/b1-vocabulary-22-BZZE_tvv.js.map +0 -1
- package/dist/b1-vocabulary-23-BJ9LAxyK.js +0 -417
- package/dist/b1-vocabulary-23-BJ9LAxyK.js.map +0 -1
- package/dist/b1-vocabulary-24-DiQmWwBz.js +0 -409
- package/dist/b1-vocabulary-24-DiQmWwBz.js.map +0 -1
- package/dist/basic-greetings-Dx6e04U1.js +0 -65
- package/dist/basic-greetings-Dx6e04U1.js.map +0 -1
- package/dist/colors-BBbHK-Js.js +0 -65
- package/dist/colors-BBbHK-Js.js.map +0 -1
- package/dist/family-members-D1FW_NqH.js +0 -55
- package/dist/family-members-D1FW_NqH.js.map +0 -1
- package/dist/food-basics-CSkfEfYu.js +0 -65
- package/dist/food-basics-CSkfEfYu.js.map +0 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -461
- package/dist/index.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/json/a1/a1-vocabulary-01.json +0 -412
- package/dist/json/a1/a1-vocabulary-02.json +0 -412
- package/dist/json/a1/a1-vocabulary-03.json +0 -412
- package/dist/json/a1/a1-vocabulary-04.json +0 -420
- package/dist/json/a1/basic-greetings.json +0 -60
- package/dist/json/a1/colors.json +0 -60
- package/dist/json/a1/family-members.json +0 -50
- package/dist/json/a1/food-basics.json +0 -60
- package/dist/json/a1/numbers-1-10.json +0 -60
- package/dist/json/a2/a2-vocabulary-01.json +0 -412
- package/dist/json/a2/a2-vocabulary-02.json +0 -412
- package/dist/json/a2/a2-vocabulary-03.json +0 -412
- package/dist/json/a2/a2-vocabulary-04.json +0 -412
- package/dist/json/a2/a2-vocabulary-05.json +0 -412
- package/dist/json/a2/a2-vocabulary-06.json +0 -412
- package/dist/json/a2/a2-vocabulary-07.json +0 -412
- package/dist/json/a2/a2-vocabulary-08.json +0 -412
- package/dist/json/a2/a2-vocabulary-09.json +0 -412
- package/dist/json/a2/a2-vocabulary-10.json +0 -412
- package/dist/json/a2/a2-vocabulary-11.json +0 -412
- package/dist/json/a2/a2-vocabulary-12.json +0 -412
- package/dist/json/b1/b1-vocabulary-01.json +0 -412
- package/dist/json/b1/b1-vocabulary-02.json +0 -412
- package/dist/json/b1/b1-vocabulary-03.json +0 -412
- package/dist/json/b1/b1-vocabulary-04.json +0 -412
- package/dist/json/b1/b1-vocabulary-05.json +0 -412
- package/dist/json/b1/b1-vocabulary-06.json +0 -412
- package/dist/json/b1/b1-vocabulary-07.json +0 -412
- package/dist/json/b1/b1-vocabulary-08.json +0 -412
- package/dist/json/b1/b1-vocabulary-09.json +0 -412
- package/dist/json/b1/b1-vocabulary-10.json +0 -412
- package/dist/json/b1/b1-vocabulary-11.json +0 -412
- package/dist/json/b1/b1-vocabulary-12.json +0 -412
- package/dist/json/b1/b1-vocabulary-13.json +0 -412
- package/dist/json/b1/b1-vocabulary-14.json +0 -412
- package/dist/json/b1/b1-vocabulary-15.json +0 -412
- package/dist/json/b1/b1-vocabulary-16.json +0 -412
- package/dist/json/b1/b1-vocabulary-17.json +0 -412
- package/dist/json/b1/b1-vocabulary-18.json +0 -412
- package/dist/json/b1/b1-vocabulary-19.json +0 -412
- package/dist/json/b1/b1-vocabulary-20.json +0 -412
- package/dist/json/b1/b1-vocabulary-21.json +0 -412
- package/dist/json/b1/b1-vocabulary-22.json +0 -412
- package/dist/json/b1/b1-vocabulary-23.json +0 -412
- package/dist/json/b1/b1-vocabulary-24.json +0 -404
- package/dist/levels/a1.d.ts +0 -10
- package/dist/levels/a1.d.ts.map +0 -1
- package/dist/levels/a1.js +0 -7
- package/dist/levels/a1.js.map +0 -1
- package/dist/numbers-1-10-Dn_s6EBm.js +0 -65
- package/dist/numbers-1-10-Dn_s6EBm.js.map +0 -1
- package/src/json/a1/basic-greetings.json +0 -60
- package/src/json/a1/colors.json +0 -60
- package/src/json/a1/family-members.json +0 -50
- package/src/json/a1/food-basics.json +0 -60
- package/src/json/a1/numbers-1-10.json +0 -60
package/src/index.ts
CHANGED
|
@@ -1,489 +1,489 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Malay Word Lists
|
|
3
|
-
*
|
|
4
|
-
* CEFR-aligned vocabulary collections for Malay language learning.
|
|
5
|
-
* Uses descriptor-based lazy loading: metadata is eager, each set's
|
|
6
|
-
* JSON is loaded on demand via `descriptor.load()`.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
createWordListCatalog,
|
|
11
|
-
jsonDescriptor,
|
|
12
|
-
type ExamGrade,
|
|
13
|
-
type WordListDifficulty,
|
|
14
|
-
type WordListItem,
|
|
15
|
-
type WordListSet,
|
|
16
|
-
} from "@syllst/word-lists";
|
|
17
|
-
|
|
18
|
-
// ─── Sources ───────────────────────────────────────────────────────────────
|
|
19
|
-
|
|
20
|
-
const SUBTITLE_FREQUENCY_LIST = { name: "Subtitle frequency list", url: "https://github.com/hermitdave/FrequencyWords" };
|
|
21
|
-
const UNKNOWN_SOURCE = { name: "Unknown source" };
|
|
22
|
-
|
|
23
|
-
// ─── Descriptors ───────────────────────────────────────────────────────────
|
|
24
|
-
|
|
25
|
-
const descriptors = [
|
|
26
|
-
jsonDescriptor({
|
|
27
|
-
id: "a1-vocabulary-01",
|
|
28
|
-
name: "A1 Frequency Band 1 (1-50)",
|
|
29
|
-
description: "A1 level Malay frequency vocabulary",
|
|
30
|
-
examGrade: "A1",
|
|
31
|
-
category: "general",
|
|
32
|
-
difficulty: "beginner",
|
|
33
|
-
itemCount: 50,
|
|
34
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
35
|
-
}, () => import("./json/a1/a1-vocabulary-01.json")),
|
|
36
|
-
jsonDescriptor({
|
|
37
|
-
id: "a1-vocabulary-02",
|
|
38
|
-
name: "A1 Frequency Band 2 (51-100)",
|
|
39
|
-
description: "A1 level Malay frequency vocabulary",
|
|
40
|
-
examGrade: "A1",
|
|
41
|
-
category: "general",
|
|
42
|
-
difficulty: "beginner",
|
|
43
|
-
itemCount: 50,
|
|
44
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
45
|
-
}, () => import("./json/a1/a1-vocabulary-02.json")),
|
|
46
|
-
jsonDescriptor({
|
|
47
|
-
id: "a1-vocabulary-03",
|
|
48
|
-
name: "A1 Frequency Band 3 (101-150)",
|
|
49
|
-
description: "A1 level Malay frequency vocabulary",
|
|
50
|
-
examGrade: "A1",
|
|
51
|
-
category: "general",
|
|
52
|
-
difficulty: "beginner",
|
|
53
|
-
itemCount: 50,
|
|
54
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
55
|
-
}, () => import("./json/a1/a1-vocabulary-03.json")),
|
|
56
|
-
jsonDescriptor({
|
|
57
|
-
id: "a1-vocabulary-04",
|
|
58
|
-
name: "A1 Frequency Band 4 (151-200)",
|
|
59
|
-
description: "A1 level Malay frequency vocabulary",
|
|
60
|
-
examGrade: "A1",
|
|
61
|
-
category: "general",
|
|
62
|
-
difficulty: "beginner",
|
|
63
|
-
itemCount: 51,
|
|
64
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
65
|
-
}, () => import("./json/a1/a1-vocabulary-04.json")),
|
|
66
|
-
jsonDescriptor({
|
|
67
|
-
id: "a1-
|
|
68
|
-
name: "Basic Greetings",
|
|
69
|
-
description: "Basic
|
|
70
|
-
examGrade: "A1",
|
|
71
|
-
category: "
|
|
72
|
-
difficulty: "beginner",
|
|
73
|
-
itemCount: 10,
|
|
74
|
-
source: UNKNOWN_SOURCE,
|
|
75
|
-
}, () => import("./json/a1/
|
|
76
|
-
jsonDescriptor({
|
|
77
|
-
id: "a1-colors",
|
|
78
|
-
name: "Colors",
|
|
79
|
-
description: "
|
|
80
|
-
examGrade: "A1",
|
|
81
|
-
category: "
|
|
82
|
-
difficulty: "beginner",
|
|
83
|
-
itemCount: 10,
|
|
84
|
-
source: UNKNOWN_SOURCE,
|
|
85
|
-
}, () => import("./json/a1/colors.json")),
|
|
86
|
-
jsonDescriptor({
|
|
87
|
-
id: "a1-family
|
|
88
|
-
name: "Family Members",
|
|
89
|
-
description: "Family
|
|
90
|
-
examGrade: "A1",
|
|
91
|
-
category: "
|
|
92
|
-
difficulty: "beginner",
|
|
93
|
-
itemCount: 8,
|
|
94
|
-
source: UNKNOWN_SOURCE,
|
|
95
|
-
}, () => import("./json/a1/family
|
|
96
|
-
jsonDescriptor({
|
|
97
|
-
id: "a1-food
|
|
98
|
-
name: "Food Basics",
|
|
99
|
-
description: "
|
|
100
|
-
examGrade: "A1",
|
|
101
|
-
category: "
|
|
102
|
-
difficulty: "beginner",
|
|
103
|
-
itemCount: 10,
|
|
104
|
-
source: UNKNOWN_SOURCE,
|
|
105
|
-
}, () => import("./json/a1/food
|
|
106
|
-
jsonDescriptor({
|
|
107
|
-
id: "a1-numbers
|
|
108
|
-
name: "Numbers 1-10",
|
|
109
|
-
description: "Numbers 1-10
|
|
110
|
-
examGrade: "A1",
|
|
111
|
-
category: "
|
|
112
|
-
difficulty: "beginner",
|
|
113
|
-
itemCount: 10,
|
|
114
|
-
source: UNKNOWN_SOURCE,
|
|
115
|
-
}, () => import("./json/a1/numbers
|
|
116
|
-
jsonDescriptor({
|
|
117
|
-
id: "a2-vocabulary-01",
|
|
118
|
-
name: "A2 Frequency Band 1 (1-50)",
|
|
119
|
-
description: "A2 level Malay frequency vocabulary",
|
|
120
|
-
examGrade: "A2",
|
|
121
|
-
category: "general",
|
|
122
|
-
difficulty: "intermediate",
|
|
123
|
-
itemCount: 50,
|
|
124
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
125
|
-
}, () => import("./json/a2/a2-vocabulary-01.json")),
|
|
126
|
-
jsonDescriptor({
|
|
127
|
-
id: "a2-vocabulary-02",
|
|
128
|
-
name: "A2 Frequency Band 2 (51-100)",
|
|
129
|
-
description: "A2 level Malay frequency vocabulary",
|
|
130
|
-
examGrade: "A2",
|
|
131
|
-
category: "general",
|
|
132
|
-
difficulty: "intermediate",
|
|
133
|
-
itemCount: 50,
|
|
134
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
135
|
-
}, () => import("./json/a2/a2-vocabulary-02.json")),
|
|
136
|
-
jsonDescriptor({
|
|
137
|
-
id: "a2-vocabulary-03",
|
|
138
|
-
name: "A2 Frequency Band 3 (101-150)",
|
|
139
|
-
description: "A2 level Malay frequency vocabulary",
|
|
140
|
-
examGrade: "A2",
|
|
141
|
-
category: "general",
|
|
142
|
-
difficulty: "intermediate",
|
|
143
|
-
itemCount: 50,
|
|
144
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
145
|
-
}, () => import("./json/a2/a2-vocabulary-03.json")),
|
|
146
|
-
jsonDescriptor({
|
|
147
|
-
id: "a2-vocabulary-04",
|
|
148
|
-
name: "A2 Frequency Band 4 (151-200)",
|
|
149
|
-
description: "A2 level Malay frequency vocabulary",
|
|
150
|
-
examGrade: "A2",
|
|
151
|
-
category: "general",
|
|
152
|
-
difficulty: "intermediate",
|
|
153
|
-
itemCount: 50,
|
|
154
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
155
|
-
}, () => import("./json/a2/a2-vocabulary-04.json")),
|
|
156
|
-
jsonDescriptor({
|
|
157
|
-
id: "a2-vocabulary-05",
|
|
158
|
-
name: "A2 Frequency Band 5 (201-250)",
|
|
159
|
-
description: "A2 level Malay frequency vocabulary",
|
|
160
|
-
examGrade: "A2",
|
|
161
|
-
category: "general",
|
|
162
|
-
difficulty: "intermediate",
|
|
163
|
-
itemCount: 50,
|
|
164
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
165
|
-
}, () => import("./json/a2/a2-vocabulary-05.json")),
|
|
166
|
-
jsonDescriptor({
|
|
167
|
-
id: "a2-vocabulary-06",
|
|
168
|
-
name: "A2 Frequency Band 6 (251-300)",
|
|
169
|
-
description: "A2 level Malay frequency vocabulary",
|
|
170
|
-
examGrade: "A2",
|
|
171
|
-
category: "general",
|
|
172
|
-
difficulty: "intermediate",
|
|
173
|
-
itemCount: 50,
|
|
174
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
175
|
-
}, () => import("./json/a2/a2-vocabulary-06.json")),
|
|
176
|
-
jsonDescriptor({
|
|
177
|
-
id: "a2-vocabulary-07",
|
|
178
|
-
name: "A2 Frequency Band 7 (301-350)",
|
|
179
|
-
description: "A2 level Malay frequency vocabulary",
|
|
180
|
-
examGrade: "A2",
|
|
181
|
-
category: "general",
|
|
182
|
-
difficulty: "intermediate",
|
|
183
|
-
itemCount: 50,
|
|
184
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
185
|
-
}, () => import("./json/a2/a2-vocabulary-07.json")),
|
|
186
|
-
jsonDescriptor({
|
|
187
|
-
id: "a2-vocabulary-08",
|
|
188
|
-
name: "A2 Frequency Band 8 (351-400)",
|
|
189
|
-
description: "A2 level Malay frequency vocabulary",
|
|
190
|
-
examGrade: "A2",
|
|
191
|
-
category: "general",
|
|
192
|
-
difficulty: "intermediate",
|
|
193
|
-
itemCount: 50,
|
|
194
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
195
|
-
}, () => import("./json/a2/a2-vocabulary-08.json")),
|
|
196
|
-
jsonDescriptor({
|
|
197
|
-
id: "a2-vocabulary-09",
|
|
198
|
-
name: "A2 Frequency Band 9 (401-450)",
|
|
199
|
-
description: "A2 level Malay frequency vocabulary",
|
|
200
|
-
examGrade: "A2",
|
|
201
|
-
category: "general",
|
|
202
|
-
difficulty: "intermediate",
|
|
203
|
-
itemCount: 50,
|
|
204
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
205
|
-
}, () => import("./json/a2/a2-vocabulary-09.json")),
|
|
206
|
-
jsonDescriptor({
|
|
207
|
-
id: "a2-vocabulary-10",
|
|
208
|
-
name: "A2 Frequency Band 10 (451-500)",
|
|
209
|
-
description: "A2 level Malay frequency vocabulary",
|
|
210
|
-
examGrade: "A2",
|
|
211
|
-
category: "general",
|
|
212
|
-
difficulty: "intermediate",
|
|
213
|
-
itemCount: 50,
|
|
214
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
215
|
-
}, () => import("./json/a2/a2-vocabulary-10.json")),
|
|
216
|
-
jsonDescriptor({
|
|
217
|
-
id: "a2-vocabulary-11",
|
|
218
|
-
name: "A2 Frequency Band 11 (501-550)",
|
|
219
|
-
description: "A2 level Malay frequency vocabulary",
|
|
220
|
-
examGrade: "A2",
|
|
221
|
-
category: "general",
|
|
222
|
-
difficulty: "intermediate",
|
|
223
|
-
itemCount: 50,
|
|
224
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
225
|
-
}, () => import("./json/a2/a2-vocabulary-11.json")),
|
|
226
|
-
jsonDescriptor({
|
|
227
|
-
id: "a2-vocabulary-12",
|
|
228
|
-
name: "A2 Frequency Band 12 (551-600)",
|
|
229
|
-
description: "A2 level Malay frequency vocabulary",
|
|
230
|
-
examGrade: "A2",
|
|
231
|
-
category: "general",
|
|
232
|
-
difficulty: "intermediate",
|
|
233
|
-
itemCount: 50,
|
|
234
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
235
|
-
}, () => import("./json/a2/a2-vocabulary-12.json")),
|
|
236
|
-
jsonDescriptor({
|
|
237
|
-
id: "b1-vocabulary-01",
|
|
238
|
-
name: "B1 Frequency Band 1 (1-50)",
|
|
239
|
-
description: "B1 level Malay frequency vocabulary",
|
|
240
|
-
examGrade: "B1",
|
|
241
|
-
category: "general",
|
|
242
|
-
difficulty: "intermediate",
|
|
243
|
-
itemCount: 50,
|
|
244
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
245
|
-
}, () => import("./json/b1/b1-vocabulary-01.json")),
|
|
246
|
-
jsonDescriptor({
|
|
247
|
-
id: "b1-vocabulary-02",
|
|
248
|
-
name: "B1 Frequency Band 2 (51-100)",
|
|
249
|
-
description: "B1 level Malay frequency vocabulary",
|
|
250
|
-
examGrade: "B1",
|
|
251
|
-
category: "general",
|
|
252
|
-
difficulty: "intermediate",
|
|
253
|
-
itemCount: 50,
|
|
254
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
255
|
-
}, () => import("./json/b1/b1-vocabulary-02.json")),
|
|
256
|
-
jsonDescriptor({
|
|
257
|
-
id: "b1-vocabulary-03",
|
|
258
|
-
name: "B1 Frequency Band 3 (101-150)",
|
|
259
|
-
description: "B1 level Malay frequency vocabulary",
|
|
260
|
-
examGrade: "B1",
|
|
261
|
-
category: "general",
|
|
262
|
-
difficulty: "intermediate",
|
|
263
|
-
itemCount: 50,
|
|
264
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
265
|
-
}, () => import("./json/b1/b1-vocabulary-03.json")),
|
|
266
|
-
jsonDescriptor({
|
|
267
|
-
id: "b1-vocabulary-04",
|
|
268
|
-
name: "B1 Frequency Band 4 (151-200)",
|
|
269
|
-
description: "B1 level Malay frequency vocabulary",
|
|
270
|
-
examGrade: "B1",
|
|
271
|
-
category: "general",
|
|
272
|
-
difficulty: "intermediate",
|
|
273
|
-
itemCount: 50,
|
|
274
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
275
|
-
}, () => import("./json/b1/b1-vocabulary-04.json")),
|
|
276
|
-
jsonDescriptor({
|
|
277
|
-
id: "b1-vocabulary-05",
|
|
278
|
-
name: "B1 Frequency Band 5 (201-250)",
|
|
279
|
-
description: "B1 level Malay frequency vocabulary",
|
|
280
|
-
examGrade: "B1",
|
|
281
|
-
category: "general",
|
|
282
|
-
difficulty: "intermediate",
|
|
283
|
-
itemCount: 50,
|
|
284
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
285
|
-
}, () => import("./json/b1/b1-vocabulary-05.json")),
|
|
286
|
-
jsonDescriptor({
|
|
287
|
-
id: "b1-vocabulary-06",
|
|
288
|
-
name: "B1 Frequency Band 6 (251-300)",
|
|
289
|
-
description: "B1 level Malay frequency vocabulary",
|
|
290
|
-
examGrade: "B1",
|
|
291
|
-
category: "general",
|
|
292
|
-
difficulty: "intermediate",
|
|
293
|
-
itemCount: 50,
|
|
294
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
295
|
-
}, () => import("./json/b1/b1-vocabulary-06.json")),
|
|
296
|
-
jsonDescriptor({
|
|
297
|
-
id: "b1-vocabulary-07",
|
|
298
|
-
name: "B1 Frequency Band 7 (301-350)",
|
|
299
|
-
description: "B1 level Malay frequency vocabulary",
|
|
300
|
-
examGrade: "B1",
|
|
301
|
-
category: "general",
|
|
302
|
-
difficulty: "intermediate",
|
|
303
|
-
itemCount: 50,
|
|
304
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
305
|
-
}, () => import("./json/b1/b1-vocabulary-07.json")),
|
|
306
|
-
jsonDescriptor({
|
|
307
|
-
id: "b1-vocabulary-08",
|
|
308
|
-
name: "B1 Frequency Band 8 (351-400)",
|
|
309
|
-
description: "B1 level Malay frequency vocabulary",
|
|
310
|
-
examGrade: "B1",
|
|
311
|
-
category: "general",
|
|
312
|
-
difficulty: "intermediate",
|
|
313
|
-
itemCount: 50,
|
|
314
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
315
|
-
}, () => import("./json/b1/b1-vocabulary-08.json")),
|
|
316
|
-
jsonDescriptor({
|
|
317
|
-
id: "b1-vocabulary-09",
|
|
318
|
-
name: "B1 Frequency Band 9 (401-450)",
|
|
319
|
-
description: "B1 level Malay frequency vocabulary",
|
|
320
|
-
examGrade: "B1",
|
|
321
|
-
category: "general",
|
|
322
|
-
difficulty: "intermediate",
|
|
323
|
-
itemCount: 50,
|
|
324
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
325
|
-
}, () => import("./json/b1/b1-vocabulary-09.json")),
|
|
326
|
-
jsonDescriptor({
|
|
327
|
-
id: "b1-vocabulary-10",
|
|
328
|
-
name: "B1 Frequency Band 10 (451-500)",
|
|
329
|
-
description: "B1 level Malay frequency vocabulary",
|
|
330
|
-
examGrade: "B1",
|
|
331
|
-
category: "general",
|
|
332
|
-
difficulty: "intermediate",
|
|
333
|
-
itemCount: 50,
|
|
334
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
335
|
-
}, () => import("./json/b1/b1-vocabulary-10.json")),
|
|
336
|
-
jsonDescriptor({
|
|
337
|
-
id: "b1-vocabulary-11",
|
|
338
|
-
name: "B1 Frequency Band 11 (501-550)",
|
|
339
|
-
description: "B1 level Malay frequency vocabulary",
|
|
340
|
-
examGrade: "B1",
|
|
341
|
-
category: "general",
|
|
342
|
-
difficulty: "intermediate",
|
|
343
|
-
itemCount: 50,
|
|
344
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
345
|
-
}, () => import("./json/b1/b1-vocabulary-11.json")),
|
|
346
|
-
jsonDescriptor({
|
|
347
|
-
id: "b1-vocabulary-12",
|
|
348
|
-
name: "B1 Frequency Band 12 (551-600)",
|
|
349
|
-
description: "B1 level Malay frequency vocabulary",
|
|
350
|
-
examGrade: "B1",
|
|
351
|
-
category: "general",
|
|
352
|
-
difficulty: "intermediate",
|
|
353
|
-
itemCount: 50,
|
|
354
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
355
|
-
}, () => import("./json/b1/b1-vocabulary-12.json")),
|
|
356
|
-
jsonDescriptor({
|
|
357
|
-
id: "b1-vocabulary-13",
|
|
358
|
-
name: "B1 Frequency Band 13 (601-650)",
|
|
359
|
-
description: "B1 level Malay frequency vocabulary",
|
|
360
|
-
examGrade: "B1",
|
|
361
|
-
category: "general",
|
|
362
|
-
difficulty: "intermediate",
|
|
363
|
-
itemCount: 50,
|
|
364
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
365
|
-
}, () => import("./json/b1/b1-vocabulary-13.json")),
|
|
366
|
-
jsonDescriptor({
|
|
367
|
-
id: "b1-vocabulary-14",
|
|
368
|
-
name: "B1 Frequency Band 14 (651-700)",
|
|
369
|
-
description: "B1 level Malay frequency vocabulary",
|
|
370
|
-
examGrade: "B1",
|
|
371
|
-
category: "general",
|
|
372
|
-
difficulty: "intermediate",
|
|
373
|
-
itemCount: 50,
|
|
374
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
375
|
-
}, () => import("./json/b1/b1-vocabulary-14.json")),
|
|
376
|
-
jsonDescriptor({
|
|
377
|
-
id: "b1-vocabulary-15",
|
|
378
|
-
name: "B1 Frequency Band 15 (701-750)",
|
|
379
|
-
description: "B1 level Malay frequency vocabulary",
|
|
380
|
-
examGrade: "B1",
|
|
381
|
-
category: "general",
|
|
382
|
-
difficulty: "intermediate",
|
|
383
|
-
itemCount: 50,
|
|
384
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
385
|
-
}, () => import("./json/b1/b1-vocabulary-15.json")),
|
|
386
|
-
jsonDescriptor({
|
|
387
|
-
id: "b1-vocabulary-16",
|
|
388
|
-
name: "B1 Frequency Band 16 (751-800)",
|
|
389
|
-
description: "B1 level Malay frequency vocabulary",
|
|
390
|
-
examGrade: "B1",
|
|
391
|
-
category: "general",
|
|
392
|
-
difficulty: "intermediate",
|
|
393
|
-
itemCount: 50,
|
|
394
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
395
|
-
}, () => import("./json/b1/b1-vocabulary-16.json")),
|
|
396
|
-
jsonDescriptor({
|
|
397
|
-
id: "b1-vocabulary-17",
|
|
398
|
-
name: "B1 Frequency Band 17 (801-850)",
|
|
399
|
-
description: "B1 level Malay frequency vocabulary",
|
|
400
|
-
examGrade: "B1",
|
|
401
|
-
category: "general",
|
|
402
|
-
difficulty: "intermediate",
|
|
403
|
-
itemCount: 50,
|
|
404
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
405
|
-
}, () => import("./json/b1/b1-vocabulary-17.json")),
|
|
406
|
-
jsonDescriptor({
|
|
407
|
-
id: "b1-vocabulary-18",
|
|
408
|
-
name: "B1 Frequency Band 18 (851-900)",
|
|
409
|
-
description: "B1 level Malay frequency vocabulary",
|
|
410
|
-
examGrade: "B1",
|
|
411
|
-
category: "general",
|
|
412
|
-
difficulty: "intermediate",
|
|
413
|
-
itemCount: 50,
|
|
414
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
415
|
-
}, () => import("./json/b1/b1-vocabulary-18.json")),
|
|
416
|
-
jsonDescriptor({
|
|
417
|
-
id: "b1-vocabulary-19",
|
|
418
|
-
name: "B1 Frequency Band 19 (901-950)",
|
|
419
|
-
description: "B1 level Malay frequency vocabulary",
|
|
420
|
-
examGrade: "B1",
|
|
421
|
-
category: "general",
|
|
422
|
-
difficulty: "intermediate",
|
|
423
|
-
itemCount: 50,
|
|
424
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
425
|
-
}, () => import("./json/b1/b1-vocabulary-19.json")),
|
|
426
|
-
jsonDescriptor({
|
|
427
|
-
id: "b1-vocabulary-20",
|
|
428
|
-
name: "B1 Frequency Band 20 (951-1000)",
|
|
429
|
-
description: "B1 level Malay frequency vocabulary",
|
|
430
|
-
examGrade: "B1",
|
|
431
|
-
category: "general",
|
|
432
|
-
difficulty: "intermediate",
|
|
433
|
-
itemCount: 50,
|
|
434
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
435
|
-
}, () => import("./json/b1/b1-vocabulary-20.json")),
|
|
436
|
-
jsonDescriptor({
|
|
437
|
-
id: "b1-vocabulary-21",
|
|
438
|
-
name: "B1 Frequency Band 21 (1001-1050)",
|
|
439
|
-
description: "B1 level Malay frequency vocabulary",
|
|
440
|
-
examGrade: "B1",
|
|
441
|
-
category: "general",
|
|
442
|
-
difficulty: "intermediate",
|
|
443
|
-
itemCount: 50,
|
|
444
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
445
|
-
}, () => import("./json/b1/b1-vocabulary-21.json")),
|
|
446
|
-
jsonDescriptor({
|
|
447
|
-
id: "b1-vocabulary-22",
|
|
448
|
-
name: "B1 Frequency Band 22 (1051-1100)",
|
|
449
|
-
description: "B1 level Malay frequency vocabulary",
|
|
450
|
-
examGrade: "B1",
|
|
451
|
-
category: "general",
|
|
452
|
-
difficulty: "intermediate",
|
|
453
|
-
itemCount: 50,
|
|
454
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
455
|
-
}, () => import("./json/b1/b1-vocabulary-22.json")),
|
|
456
|
-
jsonDescriptor({
|
|
457
|
-
id: "b1-vocabulary-23",
|
|
458
|
-
name: "B1 Frequency Band 23 (1101-1150)",
|
|
459
|
-
description: "B1 level Malay frequency vocabulary",
|
|
460
|
-
examGrade: "B1",
|
|
461
|
-
category: "general",
|
|
462
|
-
difficulty: "intermediate",
|
|
463
|
-
itemCount: 50,
|
|
464
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
465
|
-
}, () => import("./json/b1/b1-vocabulary-23.json")),
|
|
466
|
-
jsonDescriptor({
|
|
467
|
-
id: "b1-vocabulary-24",
|
|
468
|
-
name: "B1 Frequency Band 24 (1151-1200)",
|
|
469
|
-
description: "B1 level Malay frequency vocabulary",
|
|
470
|
-
examGrade: "B1",
|
|
471
|
-
category: "general",
|
|
472
|
-
difficulty: "intermediate",
|
|
473
|
-
itemCount: 49,
|
|
474
|
-
source: SUBTITLE_FREQUENCY_LIST,
|
|
475
|
-
}, () => import("./json/b1/b1-vocabulary-24.json")),
|
|
476
|
-
] as const;
|
|
477
|
-
|
|
478
|
-
export const malayWordListCatalog = createWordListCatalog([...descriptors]);
|
|
479
|
-
|
|
480
|
-
// Backward-compatible re-exports (deprecated — prefer catalog API)
|
|
481
|
-
export const {
|
|
482
|
-
getDescriptorById,
|
|
483
|
-
getDescriptorsByExamGrade,
|
|
484
|
-
getDescriptorsByCategory,
|
|
485
|
-
getDescriptorsByDifficulty,
|
|
486
|
-
getCategories,
|
|
487
|
-
} = malayWordListCatalog;
|
|
488
|
-
|
|
489
|
-
export type { ExamGrade, WordListDifficulty, WordListItem, WordListSet };
|
|
1
|
+
/**
|
|
2
|
+
* Malay Word Lists
|
|
3
|
+
*
|
|
4
|
+
* CEFR-aligned vocabulary collections for Malay language learning.
|
|
5
|
+
* Uses descriptor-based lazy loading: metadata is eager, each set's
|
|
6
|
+
* JSON is loaded on demand via `descriptor.load()`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
createWordListCatalog,
|
|
11
|
+
jsonDescriptor,
|
|
12
|
+
type ExamGrade,
|
|
13
|
+
type WordListDifficulty,
|
|
14
|
+
type WordListItem,
|
|
15
|
+
type WordListSet,
|
|
16
|
+
} from "@syllst/word-lists";
|
|
17
|
+
|
|
18
|
+
// ─── Sources ───────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
const SUBTITLE_FREQUENCY_LIST = { name: "Subtitle frequency list", url: "https://github.com/hermitdave/FrequencyWords" };
|
|
21
|
+
const UNKNOWN_SOURCE = { name: "Unknown source" };
|
|
22
|
+
|
|
23
|
+
// ─── Descriptors ───────────────────────────────────────────────────────────
|
|
24
|
+
|
|
25
|
+
const descriptors = [
|
|
26
|
+
jsonDescriptor({
|
|
27
|
+
id: "a1-vocabulary-01",
|
|
28
|
+
name: "A1 Frequency Band 1 (1-50)",
|
|
29
|
+
description: "A1 level Malay frequency vocabulary",
|
|
30
|
+
examGrade: "A1",
|
|
31
|
+
category: "general",
|
|
32
|
+
difficulty: "beginner",
|
|
33
|
+
itemCount: 50,
|
|
34
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
35
|
+
}, () => import("./json/a1/a1-vocabulary-01.json")),
|
|
36
|
+
jsonDescriptor({
|
|
37
|
+
id: "a1-vocabulary-02",
|
|
38
|
+
name: "A1 Frequency Band 2 (51-100)",
|
|
39
|
+
description: "A1 level Malay frequency vocabulary",
|
|
40
|
+
examGrade: "A1",
|
|
41
|
+
category: "general",
|
|
42
|
+
difficulty: "beginner",
|
|
43
|
+
itemCount: 50,
|
|
44
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
45
|
+
}, () => import("./json/a1/a1-vocabulary-02.json")),
|
|
46
|
+
jsonDescriptor({
|
|
47
|
+
id: "a1-vocabulary-03",
|
|
48
|
+
name: "A1 Frequency Band 3 (101-150)",
|
|
49
|
+
description: "A1 level Malay frequency vocabulary",
|
|
50
|
+
examGrade: "A1",
|
|
51
|
+
category: "general",
|
|
52
|
+
difficulty: "beginner",
|
|
53
|
+
itemCount: 50,
|
|
54
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
55
|
+
}, () => import("./json/a1/a1-vocabulary-03.json")),
|
|
56
|
+
jsonDescriptor({
|
|
57
|
+
id: "a1-vocabulary-04",
|
|
58
|
+
name: "A1 Frequency Band 4 (151-200)",
|
|
59
|
+
description: "A1 level Malay frequency vocabulary",
|
|
60
|
+
examGrade: "A1",
|
|
61
|
+
category: "general",
|
|
62
|
+
difficulty: "beginner",
|
|
63
|
+
itemCount: 51,
|
|
64
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
65
|
+
}, () => import("./json/a1/a1-vocabulary-04.json")),
|
|
66
|
+
jsonDescriptor({
|
|
67
|
+
id: "a1-greetings",
|
|
68
|
+
name: "Basic Greetings",
|
|
69
|
+
description: "Basic greeting phrases in Malay",
|
|
70
|
+
examGrade: "A1",
|
|
71
|
+
category: "greetings",
|
|
72
|
+
difficulty: "beginner",
|
|
73
|
+
itemCount: 10,
|
|
74
|
+
source: UNKNOWN_SOURCE,
|
|
75
|
+
}, () => import("./json/a1/a1-greetings.json")),
|
|
76
|
+
jsonDescriptor({
|
|
77
|
+
id: "a1-colors",
|
|
78
|
+
name: "Colors",
|
|
79
|
+
description: "Common colors in Malay",
|
|
80
|
+
examGrade: "A1",
|
|
81
|
+
category: "colors",
|
|
82
|
+
difficulty: "beginner",
|
|
83
|
+
itemCount: 10,
|
|
84
|
+
source: UNKNOWN_SOURCE,
|
|
85
|
+
}, () => import("./json/a1/a1-colors.json")),
|
|
86
|
+
jsonDescriptor({
|
|
87
|
+
id: "a1-family",
|
|
88
|
+
name: "Family Members",
|
|
89
|
+
description: "Family member vocabulary in Malay",
|
|
90
|
+
examGrade: "A1",
|
|
91
|
+
category: "family",
|
|
92
|
+
difficulty: "beginner",
|
|
93
|
+
itemCount: 8,
|
|
94
|
+
source: UNKNOWN_SOURCE,
|
|
95
|
+
}, () => import("./json/a1/a1-family.json")),
|
|
96
|
+
jsonDescriptor({
|
|
97
|
+
id: "a1-food",
|
|
98
|
+
name: "Food Basics",
|
|
99
|
+
description: "Basic food vocabulary in Malay",
|
|
100
|
+
examGrade: "A1",
|
|
101
|
+
category: "food",
|
|
102
|
+
difficulty: "beginner",
|
|
103
|
+
itemCount: 10,
|
|
104
|
+
source: UNKNOWN_SOURCE,
|
|
105
|
+
}, () => import("./json/a1/a1-food.json")),
|
|
106
|
+
jsonDescriptor({
|
|
107
|
+
id: "a1-numbers",
|
|
108
|
+
name: "Numbers 1-10",
|
|
109
|
+
description: "Numbers 1-10 in Malay",
|
|
110
|
+
examGrade: "A1",
|
|
111
|
+
category: "numbers",
|
|
112
|
+
difficulty: "beginner",
|
|
113
|
+
itemCount: 10,
|
|
114
|
+
source: UNKNOWN_SOURCE,
|
|
115
|
+
}, () => import("./json/a1/a1-numbers.json")),
|
|
116
|
+
jsonDescriptor({
|
|
117
|
+
id: "a2-vocabulary-01",
|
|
118
|
+
name: "A2 Frequency Band 1 (1-50)",
|
|
119
|
+
description: "A2 level Malay frequency vocabulary",
|
|
120
|
+
examGrade: "A2",
|
|
121
|
+
category: "general",
|
|
122
|
+
difficulty: "intermediate",
|
|
123
|
+
itemCount: 50,
|
|
124
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
125
|
+
}, () => import("./json/a2/a2-vocabulary-01.json")),
|
|
126
|
+
jsonDescriptor({
|
|
127
|
+
id: "a2-vocabulary-02",
|
|
128
|
+
name: "A2 Frequency Band 2 (51-100)",
|
|
129
|
+
description: "A2 level Malay frequency vocabulary",
|
|
130
|
+
examGrade: "A2",
|
|
131
|
+
category: "general",
|
|
132
|
+
difficulty: "intermediate",
|
|
133
|
+
itemCount: 50,
|
|
134
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
135
|
+
}, () => import("./json/a2/a2-vocabulary-02.json")),
|
|
136
|
+
jsonDescriptor({
|
|
137
|
+
id: "a2-vocabulary-03",
|
|
138
|
+
name: "A2 Frequency Band 3 (101-150)",
|
|
139
|
+
description: "A2 level Malay frequency vocabulary",
|
|
140
|
+
examGrade: "A2",
|
|
141
|
+
category: "general",
|
|
142
|
+
difficulty: "intermediate",
|
|
143
|
+
itemCount: 50,
|
|
144
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
145
|
+
}, () => import("./json/a2/a2-vocabulary-03.json")),
|
|
146
|
+
jsonDescriptor({
|
|
147
|
+
id: "a2-vocabulary-04",
|
|
148
|
+
name: "A2 Frequency Band 4 (151-200)",
|
|
149
|
+
description: "A2 level Malay frequency vocabulary",
|
|
150
|
+
examGrade: "A2",
|
|
151
|
+
category: "general",
|
|
152
|
+
difficulty: "intermediate",
|
|
153
|
+
itemCount: 50,
|
|
154
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
155
|
+
}, () => import("./json/a2/a2-vocabulary-04.json")),
|
|
156
|
+
jsonDescriptor({
|
|
157
|
+
id: "a2-vocabulary-05",
|
|
158
|
+
name: "A2 Frequency Band 5 (201-250)",
|
|
159
|
+
description: "A2 level Malay frequency vocabulary",
|
|
160
|
+
examGrade: "A2",
|
|
161
|
+
category: "general",
|
|
162
|
+
difficulty: "intermediate",
|
|
163
|
+
itemCount: 50,
|
|
164
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
165
|
+
}, () => import("./json/a2/a2-vocabulary-05.json")),
|
|
166
|
+
jsonDescriptor({
|
|
167
|
+
id: "a2-vocabulary-06",
|
|
168
|
+
name: "A2 Frequency Band 6 (251-300)",
|
|
169
|
+
description: "A2 level Malay frequency vocabulary",
|
|
170
|
+
examGrade: "A2",
|
|
171
|
+
category: "general",
|
|
172
|
+
difficulty: "intermediate",
|
|
173
|
+
itemCount: 50,
|
|
174
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
175
|
+
}, () => import("./json/a2/a2-vocabulary-06.json")),
|
|
176
|
+
jsonDescriptor({
|
|
177
|
+
id: "a2-vocabulary-07",
|
|
178
|
+
name: "A2 Frequency Band 7 (301-350)",
|
|
179
|
+
description: "A2 level Malay frequency vocabulary",
|
|
180
|
+
examGrade: "A2",
|
|
181
|
+
category: "general",
|
|
182
|
+
difficulty: "intermediate",
|
|
183
|
+
itemCount: 50,
|
|
184
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
185
|
+
}, () => import("./json/a2/a2-vocabulary-07.json")),
|
|
186
|
+
jsonDescriptor({
|
|
187
|
+
id: "a2-vocabulary-08",
|
|
188
|
+
name: "A2 Frequency Band 8 (351-400)",
|
|
189
|
+
description: "A2 level Malay frequency vocabulary",
|
|
190
|
+
examGrade: "A2",
|
|
191
|
+
category: "general",
|
|
192
|
+
difficulty: "intermediate",
|
|
193
|
+
itemCount: 50,
|
|
194
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
195
|
+
}, () => import("./json/a2/a2-vocabulary-08.json")),
|
|
196
|
+
jsonDescriptor({
|
|
197
|
+
id: "a2-vocabulary-09",
|
|
198
|
+
name: "A2 Frequency Band 9 (401-450)",
|
|
199
|
+
description: "A2 level Malay frequency vocabulary",
|
|
200
|
+
examGrade: "A2",
|
|
201
|
+
category: "general",
|
|
202
|
+
difficulty: "intermediate",
|
|
203
|
+
itemCount: 50,
|
|
204
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
205
|
+
}, () => import("./json/a2/a2-vocabulary-09.json")),
|
|
206
|
+
jsonDescriptor({
|
|
207
|
+
id: "a2-vocabulary-10",
|
|
208
|
+
name: "A2 Frequency Band 10 (451-500)",
|
|
209
|
+
description: "A2 level Malay frequency vocabulary",
|
|
210
|
+
examGrade: "A2",
|
|
211
|
+
category: "general",
|
|
212
|
+
difficulty: "intermediate",
|
|
213
|
+
itemCount: 50,
|
|
214
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
215
|
+
}, () => import("./json/a2/a2-vocabulary-10.json")),
|
|
216
|
+
jsonDescriptor({
|
|
217
|
+
id: "a2-vocabulary-11",
|
|
218
|
+
name: "A2 Frequency Band 11 (501-550)",
|
|
219
|
+
description: "A2 level Malay frequency vocabulary",
|
|
220
|
+
examGrade: "A2",
|
|
221
|
+
category: "general",
|
|
222
|
+
difficulty: "intermediate",
|
|
223
|
+
itemCount: 50,
|
|
224
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
225
|
+
}, () => import("./json/a2/a2-vocabulary-11.json")),
|
|
226
|
+
jsonDescriptor({
|
|
227
|
+
id: "a2-vocabulary-12",
|
|
228
|
+
name: "A2 Frequency Band 12 (551-600)",
|
|
229
|
+
description: "A2 level Malay frequency vocabulary",
|
|
230
|
+
examGrade: "A2",
|
|
231
|
+
category: "general",
|
|
232
|
+
difficulty: "intermediate",
|
|
233
|
+
itemCount: 50,
|
|
234
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
235
|
+
}, () => import("./json/a2/a2-vocabulary-12.json")),
|
|
236
|
+
jsonDescriptor({
|
|
237
|
+
id: "b1-vocabulary-01",
|
|
238
|
+
name: "B1 Frequency Band 1 (1-50)",
|
|
239
|
+
description: "B1 level Malay frequency vocabulary",
|
|
240
|
+
examGrade: "B1",
|
|
241
|
+
category: "general",
|
|
242
|
+
difficulty: "intermediate",
|
|
243
|
+
itemCount: 50,
|
|
244
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
245
|
+
}, () => import("./json/b1/b1-vocabulary-01.json")),
|
|
246
|
+
jsonDescriptor({
|
|
247
|
+
id: "b1-vocabulary-02",
|
|
248
|
+
name: "B1 Frequency Band 2 (51-100)",
|
|
249
|
+
description: "B1 level Malay frequency vocabulary",
|
|
250
|
+
examGrade: "B1",
|
|
251
|
+
category: "general",
|
|
252
|
+
difficulty: "intermediate",
|
|
253
|
+
itemCount: 50,
|
|
254
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
255
|
+
}, () => import("./json/b1/b1-vocabulary-02.json")),
|
|
256
|
+
jsonDescriptor({
|
|
257
|
+
id: "b1-vocabulary-03",
|
|
258
|
+
name: "B1 Frequency Band 3 (101-150)",
|
|
259
|
+
description: "B1 level Malay frequency vocabulary",
|
|
260
|
+
examGrade: "B1",
|
|
261
|
+
category: "general",
|
|
262
|
+
difficulty: "intermediate",
|
|
263
|
+
itemCount: 50,
|
|
264
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
265
|
+
}, () => import("./json/b1/b1-vocabulary-03.json")),
|
|
266
|
+
jsonDescriptor({
|
|
267
|
+
id: "b1-vocabulary-04",
|
|
268
|
+
name: "B1 Frequency Band 4 (151-200)",
|
|
269
|
+
description: "B1 level Malay frequency vocabulary",
|
|
270
|
+
examGrade: "B1",
|
|
271
|
+
category: "general",
|
|
272
|
+
difficulty: "intermediate",
|
|
273
|
+
itemCount: 50,
|
|
274
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
275
|
+
}, () => import("./json/b1/b1-vocabulary-04.json")),
|
|
276
|
+
jsonDescriptor({
|
|
277
|
+
id: "b1-vocabulary-05",
|
|
278
|
+
name: "B1 Frequency Band 5 (201-250)",
|
|
279
|
+
description: "B1 level Malay frequency vocabulary",
|
|
280
|
+
examGrade: "B1",
|
|
281
|
+
category: "general",
|
|
282
|
+
difficulty: "intermediate",
|
|
283
|
+
itemCount: 50,
|
|
284
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
285
|
+
}, () => import("./json/b1/b1-vocabulary-05.json")),
|
|
286
|
+
jsonDescriptor({
|
|
287
|
+
id: "b1-vocabulary-06",
|
|
288
|
+
name: "B1 Frequency Band 6 (251-300)",
|
|
289
|
+
description: "B1 level Malay frequency vocabulary",
|
|
290
|
+
examGrade: "B1",
|
|
291
|
+
category: "general",
|
|
292
|
+
difficulty: "intermediate",
|
|
293
|
+
itemCount: 50,
|
|
294
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
295
|
+
}, () => import("./json/b1/b1-vocabulary-06.json")),
|
|
296
|
+
jsonDescriptor({
|
|
297
|
+
id: "b1-vocabulary-07",
|
|
298
|
+
name: "B1 Frequency Band 7 (301-350)",
|
|
299
|
+
description: "B1 level Malay frequency vocabulary",
|
|
300
|
+
examGrade: "B1",
|
|
301
|
+
category: "general",
|
|
302
|
+
difficulty: "intermediate",
|
|
303
|
+
itemCount: 50,
|
|
304
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
305
|
+
}, () => import("./json/b1/b1-vocabulary-07.json")),
|
|
306
|
+
jsonDescriptor({
|
|
307
|
+
id: "b1-vocabulary-08",
|
|
308
|
+
name: "B1 Frequency Band 8 (351-400)",
|
|
309
|
+
description: "B1 level Malay frequency vocabulary",
|
|
310
|
+
examGrade: "B1",
|
|
311
|
+
category: "general",
|
|
312
|
+
difficulty: "intermediate",
|
|
313
|
+
itemCount: 50,
|
|
314
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
315
|
+
}, () => import("./json/b1/b1-vocabulary-08.json")),
|
|
316
|
+
jsonDescriptor({
|
|
317
|
+
id: "b1-vocabulary-09",
|
|
318
|
+
name: "B1 Frequency Band 9 (401-450)",
|
|
319
|
+
description: "B1 level Malay frequency vocabulary",
|
|
320
|
+
examGrade: "B1",
|
|
321
|
+
category: "general",
|
|
322
|
+
difficulty: "intermediate",
|
|
323
|
+
itemCount: 50,
|
|
324
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
325
|
+
}, () => import("./json/b1/b1-vocabulary-09.json")),
|
|
326
|
+
jsonDescriptor({
|
|
327
|
+
id: "b1-vocabulary-10",
|
|
328
|
+
name: "B1 Frequency Band 10 (451-500)",
|
|
329
|
+
description: "B1 level Malay frequency vocabulary",
|
|
330
|
+
examGrade: "B1",
|
|
331
|
+
category: "general",
|
|
332
|
+
difficulty: "intermediate",
|
|
333
|
+
itemCount: 50,
|
|
334
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
335
|
+
}, () => import("./json/b1/b1-vocabulary-10.json")),
|
|
336
|
+
jsonDescriptor({
|
|
337
|
+
id: "b1-vocabulary-11",
|
|
338
|
+
name: "B1 Frequency Band 11 (501-550)",
|
|
339
|
+
description: "B1 level Malay frequency vocabulary",
|
|
340
|
+
examGrade: "B1",
|
|
341
|
+
category: "general",
|
|
342
|
+
difficulty: "intermediate",
|
|
343
|
+
itemCount: 50,
|
|
344
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
345
|
+
}, () => import("./json/b1/b1-vocabulary-11.json")),
|
|
346
|
+
jsonDescriptor({
|
|
347
|
+
id: "b1-vocabulary-12",
|
|
348
|
+
name: "B1 Frequency Band 12 (551-600)",
|
|
349
|
+
description: "B1 level Malay frequency vocabulary",
|
|
350
|
+
examGrade: "B1",
|
|
351
|
+
category: "general",
|
|
352
|
+
difficulty: "intermediate",
|
|
353
|
+
itemCount: 50,
|
|
354
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
355
|
+
}, () => import("./json/b1/b1-vocabulary-12.json")),
|
|
356
|
+
jsonDescriptor({
|
|
357
|
+
id: "b1-vocabulary-13",
|
|
358
|
+
name: "B1 Frequency Band 13 (601-650)",
|
|
359
|
+
description: "B1 level Malay frequency vocabulary",
|
|
360
|
+
examGrade: "B1",
|
|
361
|
+
category: "general",
|
|
362
|
+
difficulty: "intermediate",
|
|
363
|
+
itemCount: 50,
|
|
364
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
365
|
+
}, () => import("./json/b1/b1-vocabulary-13.json")),
|
|
366
|
+
jsonDescriptor({
|
|
367
|
+
id: "b1-vocabulary-14",
|
|
368
|
+
name: "B1 Frequency Band 14 (651-700)",
|
|
369
|
+
description: "B1 level Malay frequency vocabulary",
|
|
370
|
+
examGrade: "B1",
|
|
371
|
+
category: "general",
|
|
372
|
+
difficulty: "intermediate",
|
|
373
|
+
itemCount: 50,
|
|
374
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
375
|
+
}, () => import("./json/b1/b1-vocabulary-14.json")),
|
|
376
|
+
jsonDescriptor({
|
|
377
|
+
id: "b1-vocabulary-15",
|
|
378
|
+
name: "B1 Frequency Band 15 (701-750)",
|
|
379
|
+
description: "B1 level Malay frequency vocabulary",
|
|
380
|
+
examGrade: "B1",
|
|
381
|
+
category: "general",
|
|
382
|
+
difficulty: "intermediate",
|
|
383
|
+
itemCount: 50,
|
|
384
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
385
|
+
}, () => import("./json/b1/b1-vocabulary-15.json")),
|
|
386
|
+
jsonDescriptor({
|
|
387
|
+
id: "b1-vocabulary-16",
|
|
388
|
+
name: "B1 Frequency Band 16 (751-800)",
|
|
389
|
+
description: "B1 level Malay frequency vocabulary",
|
|
390
|
+
examGrade: "B1",
|
|
391
|
+
category: "general",
|
|
392
|
+
difficulty: "intermediate",
|
|
393
|
+
itemCount: 50,
|
|
394
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
395
|
+
}, () => import("./json/b1/b1-vocabulary-16.json")),
|
|
396
|
+
jsonDescriptor({
|
|
397
|
+
id: "b1-vocabulary-17",
|
|
398
|
+
name: "B1 Frequency Band 17 (801-850)",
|
|
399
|
+
description: "B1 level Malay frequency vocabulary",
|
|
400
|
+
examGrade: "B1",
|
|
401
|
+
category: "general",
|
|
402
|
+
difficulty: "intermediate",
|
|
403
|
+
itemCount: 50,
|
|
404
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
405
|
+
}, () => import("./json/b1/b1-vocabulary-17.json")),
|
|
406
|
+
jsonDescriptor({
|
|
407
|
+
id: "b1-vocabulary-18",
|
|
408
|
+
name: "B1 Frequency Band 18 (851-900)",
|
|
409
|
+
description: "B1 level Malay frequency vocabulary",
|
|
410
|
+
examGrade: "B1",
|
|
411
|
+
category: "general",
|
|
412
|
+
difficulty: "intermediate",
|
|
413
|
+
itemCount: 50,
|
|
414
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
415
|
+
}, () => import("./json/b1/b1-vocabulary-18.json")),
|
|
416
|
+
jsonDescriptor({
|
|
417
|
+
id: "b1-vocabulary-19",
|
|
418
|
+
name: "B1 Frequency Band 19 (901-950)",
|
|
419
|
+
description: "B1 level Malay frequency vocabulary",
|
|
420
|
+
examGrade: "B1",
|
|
421
|
+
category: "general",
|
|
422
|
+
difficulty: "intermediate",
|
|
423
|
+
itemCount: 50,
|
|
424
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
425
|
+
}, () => import("./json/b1/b1-vocabulary-19.json")),
|
|
426
|
+
jsonDescriptor({
|
|
427
|
+
id: "b1-vocabulary-20",
|
|
428
|
+
name: "B1 Frequency Band 20 (951-1000)",
|
|
429
|
+
description: "B1 level Malay frequency vocabulary",
|
|
430
|
+
examGrade: "B1",
|
|
431
|
+
category: "general",
|
|
432
|
+
difficulty: "intermediate",
|
|
433
|
+
itemCount: 50,
|
|
434
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
435
|
+
}, () => import("./json/b1/b1-vocabulary-20.json")),
|
|
436
|
+
jsonDescriptor({
|
|
437
|
+
id: "b1-vocabulary-21",
|
|
438
|
+
name: "B1 Frequency Band 21 (1001-1050)",
|
|
439
|
+
description: "B1 level Malay frequency vocabulary",
|
|
440
|
+
examGrade: "B1",
|
|
441
|
+
category: "general",
|
|
442
|
+
difficulty: "intermediate",
|
|
443
|
+
itemCount: 50,
|
|
444
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
445
|
+
}, () => import("./json/b1/b1-vocabulary-21.json")),
|
|
446
|
+
jsonDescriptor({
|
|
447
|
+
id: "b1-vocabulary-22",
|
|
448
|
+
name: "B1 Frequency Band 22 (1051-1100)",
|
|
449
|
+
description: "B1 level Malay frequency vocabulary",
|
|
450
|
+
examGrade: "B1",
|
|
451
|
+
category: "general",
|
|
452
|
+
difficulty: "intermediate",
|
|
453
|
+
itemCount: 50,
|
|
454
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
455
|
+
}, () => import("./json/b1/b1-vocabulary-22.json")),
|
|
456
|
+
jsonDescriptor({
|
|
457
|
+
id: "b1-vocabulary-23",
|
|
458
|
+
name: "B1 Frequency Band 23 (1101-1150)",
|
|
459
|
+
description: "B1 level Malay frequency vocabulary",
|
|
460
|
+
examGrade: "B1",
|
|
461
|
+
category: "general",
|
|
462
|
+
difficulty: "intermediate",
|
|
463
|
+
itemCount: 50,
|
|
464
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
465
|
+
}, () => import("./json/b1/b1-vocabulary-23.json")),
|
|
466
|
+
jsonDescriptor({
|
|
467
|
+
id: "b1-vocabulary-24",
|
|
468
|
+
name: "B1 Frequency Band 24 (1151-1200)",
|
|
469
|
+
description: "B1 level Malay frequency vocabulary",
|
|
470
|
+
examGrade: "B1",
|
|
471
|
+
category: "general",
|
|
472
|
+
difficulty: "intermediate",
|
|
473
|
+
itemCount: 49,
|
|
474
|
+
source: SUBTITLE_FREQUENCY_LIST,
|
|
475
|
+
}, () => import("./json/b1/b1-vocabulary-24.json")),
|
|
476
|
+
] as const;
|
|
477
|
+
|
|
478
|
+
export const malayWordListCatalog = createWordListCatalog([...descriptors]);
|
|
479
|
+
|
|
480
|
+
// Backward-compatible re-exports (deprecated — prefer catalog API)
|
|
481
|
+
export const {
|
|
482
|
+
getDescriptorById,
|
|
483
|
+
getDescriptorsByExamGrade,
|
|
484
|
+
getDescriptorsByCategory,
|
|
485
|
+
getDescriptorsByDifficulty,
|
|
486
|
+
getCategories,
|
|
487
|
+
} = malayWordListCatalog;
|
|
488
|
+
|
|
489
|
+
export type { ExamGrade, WordListDifficulty, WordListItem, WordListSet };
|