@polyglot-bundles/ms-word-lists 0.1.2 → 0.3.7

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