@lokascript/semantic 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +686 -0
  3. package/dist/browser-ar.ar.global.js +2 -0
  4. package/dist/browser-core.core.global.js +2 -0
  5. package/dist/browser-de.de.global.js +2 -0
  6. package/dist/browser-east-asian.east-asian.global.js +2 -0
  7. package/dist/browser-en-tr.en-tr.global.js +2 -0
  8. package/dist/browser-en.en.global.js +2 -0
  9. package/dist/browser-es-en.es-en.global.js +2 -0
  10. package/dist/browser-es.es.global.js +2 -0
  11. package/dist/browser-fr.fr.global.js +2 -0
  12. package/dist/browser-id.id.global.js +2 -0
  13. package/dist/browser-ja.ja.global.js +2 -0
  14. package/dist/browser-ko.ko.global.js +2 -0
  15. package/dist/browser-lazy.lazy.global.js +2 -0
  16. package/dist/browser-priority.priority.global.js +2 -0
  17. package/dist/browser-pt.pt.global.js +2 -0
  18. package/dist/browser-qu.qu.global.js +2 -0
  19. package/dist/browser-sw.sw.global.js +2 -0
  20. package/dist/browser-tr.tr.global.js +2 -0
  21. package/dist/browser-western.western.global.js +2 -0
  22. package/dist/browser-zh.zh.global.js +2 -0
  23. package/dist/browser.global.js +3 -0
  24. package/dist/browser.global.js.map +1 -0
  25. package/dist/index.cjs +35051 -0
  26. package/dist/index.cjs.map +1 -0
  27. package/dist/index.d.cts +3426 -0
  28. package/dist/index.d.ts +3426 -0
  29. package/dist/index.js +34890 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/languages/ar.d.ts +78 -0
  32. package/dist/languages/ar.js +1622 -0
  33. package/dist/languages/ar.js.map +1 -0
  34. package/dist/languages/de.d.ts +38 -0
  35. package/dist/languages/de.js +1168 -0
  36. package/dist/languages/de.js.map +1 -0
  37. package/dist/languages/en.d.ts +44 -0
  38. package/dist/languages/en.js +3491 -0
  39. package/dist/languages/en.js.map +1 -0
  40. package/dist/languages/es.d.ts +52 -0
  41. package/dist/languages/es.js +1493 -0
  42. package/dist/languages/es.js.map +1 -0
  43. package/dist/languages/fr.d.ts +37 -0
  44. package/dist/languages/fr.js +1159 -0
  45. package/dist/languages/fr.js.map +1 -0
  46. package/dist/languages/id.d.ts +35 -0
  47. package/dist/languages/id.js +1152 -0
  48. package/dist/languages/id.js.map +1 -0
  49. package/dist/languages/ja.d.ts +53 -0
  50. package/dist/languages/ja.js +1430 -0
  51. package/dist/languages/ja.js.map +1 -0
  52. package/dist/languages/ko.d.ts +51 -0
  53. package/dist/languages/ko.js +1729 -0
  54. package/dist/languages/ko.js.map +1 -0
  55. package/dist/languages/pt.d.ts +37 -0
  56. package/dist/languages/pt.js +1127 -0
  57. package/dist/languages/pt.js.map +1 -0
  58. package/dist/languages/qu.d.ts +36 -0
  59. package/dist/languages/qu.js +1143 -0
  60. package/dist/languages/qu.js.map +1 -0
  61. package/dist/languages/sw.d.ts +35 -0
  62. package/dist/languages/sw.js +1147 -0
  63. package/dist/languages/sw.js.map +1 -0
  64. package/dist/languages/tr.d.ts +45 -0
  65. package/dist/languages/tr.js +1529 -0
  66. package/dist/languages/tr.js.map +1 -0
  67. package/dist/languages/zh.d.ts +58 -0
  68. package/dist/languages/zh.js +1257 -0
  69. package/dist/languages/zh.js.map +1 -0
  70. package/dist/types-C4dcj53L.d.ts +600 -0
  71. package/package.json +202 -0
  72. package/src/__test-utils__/index.ts +7 -0
  73. package/src/__test-utils__/test-helpers.ts +8 -0
  74. package/src/__types__/test-helpers.ts +122 -0
  75. package/src/analysis/index.ts +479 -0
  76. package/src/ast-builder/command-mappers.ts +1133 -0
  77. package/src/ast-builder/expression-parser/index.ts +41 -0
  78. package/src/ast-builder/expression-parser/parser.ts +563 -0
  79. package/src/ast-builder/expression-parser/tokenizer.ts +394 -0
  80. package/src/ast-builder/expression-parser/types.ts +208 -0
  81. package/src/ast-builder/index.ts +536 -0
  82. package/src/ast-builder/value-converters.ts +172 -0
  83. package/src/bridge.ts +275 -0
  84. package/src/browser-ar.ts +162 -0
  85. package/src/browser-core.ts +231 -0
  86. package/src/browser-de.ts +162 -0
  87. package/src/browser-east-asian.ts +173 -0
  88. package/src/browser-en-tr.ts +165 -0
  89. package/src/browser-en.ts +157 -0
  90. package/src/browser-es-en.ts +200 -0
  91. package/src/browser-es.ts +170 -0
  92. package/src/browser-fr.ts +162 -0
  93. package/src/browser-id.ts +162 -0
  94. package/src/browser-ja.ts +162 -0
  95. package/src/browser-ko.ts +162 -0
  96. package/src/browser-lazy.ts +189 -0
  97. package/src/browser-priority.ts +214 -0
  98. package/src/browser-pt.ts +162 -0
  99. package/src/browser-qu.ts +162 -0
  100. package/src/browser-sw.ts +162 -0
  101. package/src/browser-tr.ts +162 -0
  102. package/src/browser-western.ts +181 -0
  103. package/src/browser-zh.ts +162 -0
  104. package/src/browser.ts +268 -0
  105. package/src/cache/index.ts +14 -0
  106. package/src/cache/semantic-cache.ts +344 -0
  107. package/src/core-bridge.ts +372 -0
  108. package/src/explicit/converter.ts +258 -0
  109. package/src/explicit/index.ts +18 -0
  110. package/src/explicit/parser.ts +236 -0
  111. package/src/explicit/renderer.ts +424 -0
  112. package/src/generators/command-schemas.ts +1636 -0
  113. package/src/generators/event-handler-generator.ts +109 -0
  114. package/src/generators/index.ts +117 -0
  115. package/src/generators/language-profiles.ts +139 -0
  116. package/src/generators/pattern-generator.ts +537 -0
  117. package/src/generators/profiles/arabic.ts +131 -0
  118. package/src/generators/profiles/bengali.ts +132 -0
  119. package/src/generators/profiles/chinese.ts +124 -0
  120. package/src/generators/profiles/english.ts +113 -0
  121. package/src/generators/profiles/french.ts +125 -0
  122. package/src/generators/profiles/german.ts +126 -0
  123. package/src/generators/profiles/hindi.ts +146 -0
  124. package/src/generators/profiles/index.ts +46 -0
  125. package/src/generators/profiles/indonesian.ts +125 -0
  126. package/src/generators/profiles/italian.ts +139 -0
  127. package/src/generators/profiles/japanese.ts +149 -0
  128. package/src/generators/profiles/korean.ts +127 -0
  129. package/src/generators/profiles/marker-templates.ts +288 -0
  130. package/src/generators/profiles/ms.ts +130 -0
  131. package/src/generators/profiles/polish.ts +249 -0
  132. package/src/generators/profiles/portuguese.ts +115 -0
  133. package/src/generators/profiles/quechua.ts +113 -0
  134. package/src/generators/profiles/russian.ts +260 -0
  135. package/src/generators/profiles/spanish.ts +130 -0
  136. package/src/generators/profiles/swahili.ts +129 -0
  137. package/src/generators/profiles/thai.ts +132 -0
  138. package/src/generators/profiles/tl.ts +128 -0
  139. package/src/generators/profiles/turkish.ts +124 -0
  140. package/src/generators/profiles/types.ts +165 -0
  141. package/src/generators/profiles/ukrainian.ts +270 -0
  142. package/src/generators/profiles/vietnamese.ts +133 -0
  143. package/src/generators/schema-error-codes.ts +160 -0
  144. package/src/generators/schema-validator.ts +391 -0
  145. package/src/index.ts +429 -0
  146. package/src/language-building-schema.ts +3170 -0
  147. package/src/language-loader.ts +394 -0
  148. package/src/languages/_all.ts +65 -0
  149. package/src/languages/ar.ts +15 -0
  150. package/src/languages/bn.ts +16 -0
  151. package/src/languages/de.ts +15 -0
  152. package/src/languages/en.ts +29 -0
  153. package/src/languages/es.ts +15 -0
  154. package/src/languages/fr.ts +15 -0
  155. package/src/languages/hi.ts +26 -0
  156. package/src/languages/id.ts +15 -0
  157. package/src/languages/index.ts +18 -0
  158. package/src/languages/it.ts +15 -0
  159. package/src/languages/ja.ts +15 -0
  160. package/src/languages/ko.ts +15 -0
  161. package/src/languages/ms.ts +16 -0
  162. package/src/languages/pl.ts +18 -0
  163. package/src/languages/pt.ts +15 -0
  164. package/src/languages/qu.ts +15 -0
  165. package/src/languages/ru.ts +26 -0
  166. package/src/languages/sw.ts +15 -0
  167. package/src/languages/th.ts +16 -0
  168. package/src/languages/tl.ts +16 -0
  169. package/src/languages/tr.ts +15 -0
  170. package/src/languages/uk.ts +26 -0
  171. package/src/languages/vi.ts +16 -0
  172. package/src/languages/zh.ts +15 -0
  173. package/src/parser/index.ts +15 -0
  174. package/src/parser/pattern-matcher.ts +1181 -0
  175. package/src/parser/semantic-parser.ts +573 -0
  176. package/src/parser/utils/index.ts +35 -0
  177. package/src/parser/utils/marker-resolution.ts +111 -0
  178. package/src/parser/utils/possessive-keywords.ts +43 -0
  179. package/src/parser/utils/role-positioning.ts +70 -0
  180. package/src/parser/utils/type-validation.ts +134 -0
  181. package/src/patterns/add/ar.ts +71 -0
  182. package/src/patterns/add/bn.ts +70 -0
  183. package/src/patterns/add/hi.ts +69 -0
  184. package/src/patterns/add/index.ts +87 -0
  185. package/src/patterns/add/it.ts +61 -0
  186. package/src/patterns/add/ja.ts +93 -0
  187. package/src/patterns/add/ko.ts +74 -0
  188. package/src/patterns/add/ms.ts +30 -0
  189. package/src/patterns/add/pl.ts +62 -0
  190. package/src/patterns/add/ru.ts +62 -0
  191. package/src/patterns/add/th.ts +49 -0
  192. package/src/patterns/add/tl.ts +30 -0
  193. package/src/patterns/add/tr.ts +71 -0
  194. package/src/patterns/add/uk.ts +62 -0
  195. package/src/patterns/add/vi.ts +61 -0
  196. package/src/patterns/add/zh.ts +71 -0
  197. package/src/patterns/builders.ts +207 -0
  198. package/src/patterns/decrement/bn.ts +70 -0
  199. package/src/patterns/decrement/de.ts +42 -0
  200. package/src/patterns/decrement/hi.ts +68 -0
  201. package/src/patterns/decrement/index.ts +79 -0
  202. package/src/patterns/decrement/it.ts +69 -0
  203. package/src/patterns/decrement/ms.ts +30 -0
  204. package/src/patterns/decrement/pl.ts +58 -0
  205. package/src/patterns/decrement/ru.ts +58 -0
  206. package/src/patterns/decrement/th.ts +49 -0
  207. package/src/patterns/decrement/tl.ts +30 -0
  208. package/src/patterns/decrement/tr.ts +48 -0
  209. package/src/patterns/decrement/uk.ts +58 -0
  210. package/src/patterns/decrement/vi.ts +61 -0
  211. package/src/patterns/decrement/zh.ts +32 -0
  212. package/src/patterns/en.ts +302 -0
  213. package/src/patterns/event-handler/ar.ts +151 -0
  214. package/src/patterns/event-handler/bn.ts +72 -0
  215. package/src/patterns/event-handler/de.ts +117 -0
  216. package/src/patterns/event-handler/en.ts +117 -0
  217. package/src/patterns/event-handler/es.ts +136 -0
  218. package/src/patterns/event-handler/fr.ts +117 -0
  219. package/src/patterns/event-handler/hi.ts +64 -0
  220. package/src/patterns/event-handler/id.ts +117 -0
  221. package/src/patterns/event-handler/index.ts +119 -0
  222. package/src/patterns/event-handler/it.ts +54 -0
  223. package/src/patterns/event-handler/ja.ts +118 -0
  224. package/src/patterns/event-handler/ko.ts +133 -0
  225. package/src/patterns/event-handler/ms.ts +30 -0
  226. package/src/patterns/event-handler/pl.ts +62 -0
  227. package/src/patterns/event-handler/pt.ts +117 -0
  228. package/src/patterns/event-handler/qu.ts +66 -0
  229. package/src/patterns/event-handler/ru.ts +62 -0
  230. package/src/patterns/event-handler/shared.ts +270 -0
  231. package/src/patterns/event-handler/sw.ts +117 -0
  232. package/src/patterns/event-handler/th.ts +53 -0
  233. package/src/patterns/event-handler/tl.ts +30 -0
  234. package/src/patterns/event-handler/tr.ts +170 -0
  235. package/src/patterns/event-handler/uk.ts +62 -0
  236. package/src/patterns/event-handler/vi.ts +61 -0
  237. package/src/patterns/event-handler/zh.ts +150 -0
  238. package/src/patterns/get/ar.ts +49 -0
  239. package/src/patterns/get/bn.ts +47 -0
  240. package/src/patterns/get/de.ts +32 -0
  241. package/src/patterns/get/hi.ts +52 -0
  242. package/src/patterns/get/index.ts +83 -0
  243. package/src/patterns/get/it.ts +56 -0
  244. package/src/patterns/get/ja.ts +53 -0
  245. package/src/patterns/get/ko.ts +53 -0
  246. package/src/patterns/get/ms.ts +30 -0
  247. package/src/patterns/get/pl.ts +57 -0
  248. package/src/patterns/get/ru.ts +57 -0
  249. package/src/patterns/get/th.ts +29 -0
  250. package/src/patterns/get/tl.ts +30 -0
  251. package/src/patterns/get/uk.ts +57 -0
  252. package/src/patterns/get/vi.ts +48 -0
  253. package/src/patterns/grammar-transformed/index.ts +39 -0
  254. package/src/patterns/grammar-transformed/ja.ts +1713 -0
  255. package/src/patterns/grammar-transformed/ko.ts +1311 -0
  256. package/src/patterns/grammar-transformed/tr.ts +1067 -0
  257. package/src/patterns/hide/ar.ts +67 -0
  258. package/src/patterns/hide/bn.ts +47 -0
  259. package/src/patterns/hide/de.ts +36 -0
  260. package/src/patterns/hide/hi.ts +61 -0
  261. package/src/patterns/hide/index.ts +91 -0
  262. package/src/patterns/hide/it.ts +56 -0
  263. package/src/patterns/hide/ja.ts +69 -0
  264. package/src/patterns/hide/ko.ts +69 -0
  265. package/src/patterns/hide/ms.ts +30 -0
  266. package/src/patterns/hide/pl.ts +57 -0
  267. package/src/patterns/hide/ru.ts +57 -0
  268. package/src/patterns/hide/th.ts +29 -0
  269. package/src/patterns/hide/tl.ts +30 -0
  270. package/src/patterns/hide/tr.ts +65 -0
  271. package/src/patterns/hide/uk.ts +57 -0
  272. package/src/patterns/hide/vi.ts +56 -0
  273. package/src/patterns/hide/zh.ts +68 -0
  274. package/src/patterns/increment/bn.ts +70 -0
  275. package/src/patterns/increment/de.ts +36 -0
  276. package/src/patterns/increment/hi.ts +68 -0
  277. package/src/patterns/increment/index.ts +79 -0
  278. package/src/patterns/increment/it.ts +69 -0
  279. package/src/patterns/increment/ms.ts +30 -0
  280. package/src/patterns/increment/pl.ts +58 -0
  281. package/src/patterns/increment/ru.ts +58 -0
  282. package/src/patterns/increment/th.ts +49 -0
  283. package/src/patterns/increment/tl.ts +30 -0
  284. package/src/patterns/increment/tr.ts +52 -0
  285. package/src/patterns/increment/uk.ts +58 -0
  286. package/src/patterns/increment/vi.ts +61 -0
  287. package/src/patterns/increment/zh.ts +32 -0
  288. package/src/patterns/index.ts +84 -0
  289. package/src/patterns/languages/en/control-flow.ts +93 -0
  290. package/src/patterns/languages/en/fetch.ts +62 -0
  291. package/src/patterns/languages/en/index.ts +42 -0
  292. package/src/patterns/languages/en/repeat.ts +67 -0
  293. package/src/patterns/languages/en/set.ts +48 -0
  294. package/src/patterns/languages/en/swap.ts +38 -0
  295. package/src/patterns/languages/en/temporal.ts +57 -0
  296. package/src/patterns/put/ar.ts +74 -0
  297. package/src/patterns/put/bn.ts +53 -0
  298. package/src/patterns/put/en.ts +74 -0
  299. package/src/patterns/put/es.ts +74 -0
  300. package/src/patterns/put/hi.ts +69 -0
  301. package/src/patterns/put/id.ts +96 -0
  302. package/src/patterns/put/index.ts +99 -0
  303. package/src/patterns/put/it.ts +56 -0
  304. package/src/patterns/put/ja.ts +75 -0
  305. package/src/patterns/put/ko.ts +67 -0
  306. package/src/patterns/put/ms.ts +30 -0
  307. package/src/patterns/put/pl.ts +81 -0
  308. package/src/patterns/put/ru.ts +85 -0
  309. package/src/patterns/put/th.ts +32 -0
  310. package/src/patterns/put/tl.ts +30 -0
  311. package/src/patterns/put/tr.ts +67 -0
  312. package/src/patterns/put/uk.ts +85 -0
  313. package/src/patterns/put/vi.ts +72 -0
  314. package/src/patterns/put/zh.ts +62 -0
  315. package/src/patterns/registry.ts +163 -0
  316. package/src/patterns/remove/ar.ts +71 -0
  317. package/src/patterns/remove/bn.ts +68 -0
  318. package/src/patterns/remove/hi.ts +69 -0
  319. package/src/patterns/remove/index.ts +87 -0
  320. package/src/patterns/remove/it.ts +69 -0
  321. package/src/patterns/remove/ja.ts +74 -0
  322. package/src/patterns/remove/ko.ts +78 -0
  323. package/src/patterns/remove/ms.ts +30 -0
  324. package/src/patterns/remove/pl.ts +62 -0
  325. package/src/patterns/remove/ru.ts +62 -0
  326. package/src/patterns/remove/th.ts +49 -0
  327. package/src/patterns/remove/tl.ts +30 -0
  328. package/src/patterns/remove/tr.ts +78 -0
  329. package/src/patterns/remove/uk.ts +62 -0
  330. package/src/patterns/remove/vi.ts +61 -0
  331. package/src/patterns/remove/zh.ts +72 -0
  332. package/src/patterns/set/ar.ts +84 -0
  333. package/src/patterns/set/bn.ts +53 -0
  334. package/src/patterns/set/de.ts +84 -0
  335. package/src/patterns/set/es.ts +92 -0
  336. package/src/patterns/set/fr.ts +88 -0
  337. package/src/patterns/set/hi.ts +56 -0
  338. package/src/patterns/set/id.ts +84 -0
  339. package/src/patterns/set/index.ts +107 -0
  340. package/src/patterns/set/it.ts +56 -0
  341. package/src/patterns/set/ja.ts +86 -0
  342. package/src/patterns/set/ko.ts +85 -0
  343. package/src/patterns/set/ms.ts +30 -0
  344. package/src/patterns/set/pl.ts +57 -0
  345. package/src/patterns/set/pt.ts +84 -0
  346. package/src/patterns/set/ru.ts +57 -0
  347. package/src/patterns/set/th.ts +31 -0
  348. package/src/patterns/set/tl.ts +30 -0
  349. package/src/patterns/set/tr.ts +107 -0
  350. package/src/patterns/set/uk.ts +57 -0
  351. package/src/patterns/set/vi.ts +53 -0
  352. package/src/patterns/set/zh.ts +84 -0
  353. package/src/patterns/show/ar.ts +67 -0
  354. package/src/patterns/show/bn.ts +47 -0
  355. package/src/patterns/show/de.ts +32 -0
  356. package/src/patterns/show/fr.ts +32 -0
  357. package/src/patterns/show/hi.ts +61 -0
  358. package/src/patterns/show/index.ts +95 -0
  359. package/src/patterns/show/it.ts +56 -0
  360. package/src/patterns/show/ja.ts +69 -0
  361. package/src/patterns/show/ko.ts +73 -0
  362. package/src/patterns/show/ms.ts +30 -0
  363. package/src/patterns/show/pl.ts +57 -0
  364. package/src/patterns/show/ru.ts +57 -0
  365. package/src/patterns/show/th.ts +29 -0
  366. package/src/patterns/show/tl.ts +30 -0
  367. package/src/patterns/show/tr.ts +65 -0
  368. package/src/patterns/show/uk.ts +57 -0
  369. package/src/patterns/show/vi.ts +56 -0
  370. package/src/patterns/show/zh.ts +68 -0
  371. package/src/patterns/take/ar.ts +51 -0
  372. package/src/patterns/take/index.ts +31 -0
  373. package/src/patterns/toggle/ar.ts +61 -0
  374. package/src/patterns/toggle/bn.ts +70 -0
  375. package/src/patterns/toggle/en.ts +61 -0
  376. package/src/patterns/toggle/es.ts +61 -0
  377. package/src/patterns/toggle/hi.ts +80 -0
  378. package/src/patterns/toggle/index.ts +95 -0
  379. package/src/patterns/toggle/it.ts +69 -0
  380. package/src/patterns/toggle/ja.ts +156 -0
  381. package/src/patterns/toggle/ko.ts +113 -0
  382. package/src/patterns/toggle/ms.ts +30 -0
  383. package/src/patterns/toggle/pl.ts +62 -0
  384. package/src/patterns/toggle/ru.ts +62 -0
  385. package/src/patterns/toggle/th.ts +50 -0
  386. package/src/patterns/toggle/tl.ts +30 -0
  387. package/src/patterns/toggle/tr.ts +88 -0
  388. package/src/patterns/toggle/uk.ts +62 -0
  389. package/src/patterns/toggle/vi.ts +61 -0
  390. package/src/patterns/toggle/zh.ts +99 -0
  391. package/src/public-api.ts +286 -0
  392. package/src/registry.ts +441 -0
  393. package/src/tokenizers/arabic.ts +723 -0
  394. package/src/tokenizers/base.ts +1300 -0
  395. package/src/tokenizers/bengali.ts +289 -0
  396. package/src/tokenizers/chinese.ts +481 -0
  397. package/src/tokenizers/english.ts +416 -0
  398. package/src/tokenizers/french.ts +326 -0
  399. package/src/tokenizers/german.ts +324 -0
  400. package/src/tokenizers/hindi.ts +319 -0
  401. package/src/tokenizers/index.ts +127 -0
  402. package/src/tokenizers/indonesian.ts +306 -0
  403. package/src/tokenizers/italian.ts +458 -0
  404. package/src/tokenizers/japanese.ts +447 -0
  405. package/src/tokenizers/korean.ts +642 -0
  406. package/src/tokenizers/morphology/arabic-normalizer.ts +242 -0
  407. package/src/tokenizers/morphology/french-normalizer.ts +268 -0
  408. package/src/tokenizers/morphology/german-normalizer.ts +256 -0
  409. package/src/tokenizers/morphology/index.ts +46 -0
  410. package/src/tokenizers/morphology/italian-normalizer.ts +329 -0
  411. package/src/tokenizers/morphology/japanese-normalizer.ts +288 -0
  412. package/src/tokenizers/morphology/korean-normalizer.ts +428 -0
  413. package/src/tokenizers/morphology/polish-normalizer.ts +264 -0
  414. package/src/tokenizers/morphology/portuguese-normalizer.ts +310 -0
  415. package/src/tokenizers/morphology/spanish-normalizer.ts +327 -0
  416. package/src/tokenizers/morphology/turkish-normalizer.ts +412 -0
  417. package/src/tokenizers/morphology/types.ts +211 -0
  418. package/src/tokenizers/ms.ts +198 -0
  419. package/src/tokenizers/polish.ts +354 -0
  420. package/src/tokenizers/portuguese.ts +304 -0
  421. package/src/tokenizers/quechua.ts +339 -0
  422. package/src/tokenizers/russian.ts +375 -0
  423. package/src/tokenizers/spanish.ts +403 -0
  424. package/src/tokenizers/swahili.ts +303 -0
  425. package/src/tokenizers/thai.ts +236 -0
  426. package/src/tokenizers/tl.ts +198 -0
  427. package/src/tokenizers/turkish.ts +411 -0
  428. package/src/tokenizers/ukrainian.ts +369 -0
  429. package/src/tokenizers/vietnamese.ts +410 -0
  430. package/src/types/grammar-types.ts +617 -0
  431. package/src/types/unified-profile.ts +267 -0
  432. package/src/types.ts +709 -0
  433. package/src/utils/confidence-calculator.ts +147 -0
  434. package/src/validators/command-validator.ts +380 -0
  435. package/src/validators/index.ts +15 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Confidence Calculator Utility
3
+ *
4
+ * Provides standalone confidence calculation for translations.
5
+ * Exposes the pattern matcher's confidence scoring for use in scripts.
6
+ */
7
+
8
+ import { tokenize } from '../tokenizers';
9
+ import { getPatternsForLanguage } from '../registry';
10
+ import { patternMatcher } from '../parser/pattern-matcher';
11
+ import type { SemanticNode, ActionType } from '../types';
12
+
13
+ export interface ConfidenceResult {
14
+ /** Confidence score from 0-1 */
15
+ confidence: number;
16
+ /** Whether the input parsed successfully */
17
+ parseSuccess: boolean;
18
+ /** Pattern ID that matched, if any */
19
+ patternId?: string;
20
+ /** The action type (command) that was parsed */
21
+ action?: ActionType;
22
+ /** Number of tokens consumed during matching */
23
+ tokensConsumed?: number;
24
+ /** Error message if parsing failed */
25
+ error?: string;
26
+ }
27
+
28
+ /**
29
+ * Calculate confidence score for a hyperscript translation.
30
+ *
31
+ * Uses the pattern matcher to determine how well the input matches
32
+ * available patterns for the given language.
33
+ *
34
+ * @param hyperscript - The hyperscript code to analyze
35
+ * @param language - The language code (e.g., 'ja', 'es', 'en')
36
+ * @returns Confidence result with score and match details
37
+ */
38
+ export function calculateTranslationConfidence(
39
+ hyperscript: string,
40
+ language: string
41
+ ): ConfidenceResult {
42
+ try {
43
+ // Tokenize the input
44
+ const tokens = tokenize(hyperscript, language);
45
+
46
+ // Get patterns for this language
47
+ const patterns = getPatternsForLanguage(language);
48
+
49
+ if (patterns.length === 0) {
50
+ return {
51
+ confidence: 0,
52
+ parseSuccess: false,
53
+ error: `No patterns available for language: ${language}`,
54
+ };
55
+ }
56
+
57
+ // Sort patterns by priority (descending)
58
+ const sortedPatterns = [...patterns].sort((a, b) => b.priority - a.priority);
59
+
60
+ // Try to match event handler patterns first (they wrap commands)
61
+ const eventPatterns = sortedPatterns.filter(p => p.command === 'on');
62
+ const eventMatch = patternMatcher.matchBest(tokens, eventPatterns);
63
+
64
+ if (eventMatch) {
65
+ return {
66
+ confidence: eventMatch.confidence,
67
+ parseSuccess: true,
68
+ patternId: eventMatch.pattern.id,
69
+ action: eventMatch.pattern.command,
70
+ tokensConsumed: eventMatch.consumedTokens,
71
+ };
72
+ }
73
+
74
+ // Reset tokens for command matching
75
+ tokens.reset(tokens.mark());
76
+
77
+ // Try command patterns
78
+ const commandPatterns = sortedPatterns.filter(p => p.command !== 'on');
79
+ const commandMatch = patternMatcher.matchBest(tokens, commandPatterns);
80
+
81
+ if (commandMatch) {
82
+ return {
83
+ confidence: commandMatch.confidence,
84
+ parseSuccess: true,
85
+ patternId: commandMatch.pattern.id,
86
+ action: commandMatch.pattern.command,
87
+ tokensConsumed: commandMatch.consumedTokens,
88
+ };
89
+ }
90
+
91
+ return {
92
+ confidence: 0,
93
+ parseSuccess: false,
94
+ error: `Could not match any patterns for: ${hyperscript}`,
95
+ };
96
+ } catch (error) {
97
+ return {
98
+ confidence: 0,
99
+ parseSuccess: false,
100
+ error: error instanceof Error ? error.message : String(error),
101
+ };
102
+ }
103
+ }
104
+
105
+ export interface ParseWithConfidenceResult {
106
+ node: SemanticNode | null;
107
+ confidence: number;
108
+ error: string | undefined;
109
+ }
110
+
111
+ /**
112
+ * Calculate confidence and parse to a semantic node in one call.
113
+ * Returns both the parsed node and the confidence score.
114
+ */
115
+ export function parseWithConfidence(
116
+ hyperscript: string,
117
+ language: string
118
+ ): ParseWithConfidenceResult {
119
+ // Use the confidence calculator for the score
120
+ const confidenceResult = calculateTranslationConfidence(hyperscript, language);
121
+
122
+ if (!confidenceResult.parseSuccess) {
123
+ return {
124
+ node: null,
125
+ confidence: 0,
126
+ error: confidenceResult.error,
127
+ };
128
+ }
129
+
130
+ // Also do the full parse to get the semantic node
131
+ // (import parse here to avoid circular dependency)
132
+ try {
133
+ const { parse } = require('../parser/semantic-parser');
134
+ const node = parse(hyperscript, language);
135
+ return {
136
+ node,
137
+ confidence: confidenceResult.confidence,
138
+ error: undefined,
139
+ };
140
+ } catch (error) {
141
+ return {
142
+ node: null,
143
+ confidence: confidenceResult.confidence,
144
+ error: error instanceof Error ? error.message : String(error),
145
+ };
146
+ }
147
+ }
@@ -0,0 +1,380 @@
1
+ /**
2
+ * Per-Command Semantic Validation
3
+ *
4
+ * Validates semantic parse results against command schemas.
5
+ * Ensures that role assignments match expected types and constraints.
6
+ *
7
+ * Design Philosophy:
8
+ * - Command schemas are the source of truth for validation rules
9
+ * - Validation happens AFTER pattern matching, BEFORE AST conversion
10
+ * - Provides detailed error messages for debugging
11
+ * - Supports confidence scoring for ambiguous parses
12
+ *
13
+ * Integration with core validators:
14
+ * - Uses patterns from @lokascript/core's lightweight-validators where applicable
15
+ * - Type validation follows same patterns as runtime validation
16
+ * - Can be extended with custom validators using the same API
17
+ */
18
+
19
+ import type { SemanticParseResult, SemanticValue, SemanticRole, ActionType } from '../types';
20
+ import type { CommandSchema } from '../generators/command-schemas';
21
+ import {
22
+ toggleSchema,
23
+ addSchema,
24
+ removeSchema,
25
+ putSchema,
26
+ setSchema,
27
+ showSchema,
28
+ hideSchema,
29
+ onSchema,
30
+ triggerSchema,
31
+ waitSchema,
32
+ fetchSchema,
33
+ incrementSchema,
34
+ decrementSchema,
35
+ appendSchema,
36
+ } from '../generators/command-schemas';
37
+
38
+ // =============================================================================
39
+ // Types
40
+ // =============================================================================
41
+
42
+ /**
43
+ * Validation error with detailed context.
44
+ */
45
+ export interface ValidationError {
46
+ /** Error code for programmatic handling */
47
+ code: 'MISSING_REQUIRED_ROLE' | 'INVALID_TYPE' | 'UNKNOWN_ROLE' | 'CONSTRAINT_VIOLATION';
48
+ /** Human-readable message */
49
+ message: string;
50
+ /** The role that failed validation */
51
+ role?: SemanticRole;
52
+ /** Expected types */
53
+ expected?: string[];
54
+ /** Actual value */
55
+ actual?: SemanticValue;
56
+ /** Severity: 'error' blocks execution, 'warning' is logged */
57
+ severity: 'error' | 'warning';
58
+ }
59
+
60
+ /**
61
+ * Result of command validation.
62
+ */
63
+ export interface ValidationResult {
64
+ /** Whether validation passed */
65
+ valid: boolean;
66
+ /** Validation errors (if any) */
67
+ errors: ValidationError[];
68
+ /** Warnings (non-blocking issues) */
69
+ warnings: ValidationError[];
70
+ /** Confidence adjustment (-1 to +1) based on validation */
71
+ confidenceAdjustment: number;
72
+ /** Suggested fixes for errors */
73
+ suggestions: string[];
74
+ }
75
+
76
+ // =============================================================================
77
+ // Schema Registry
78
+ // =============================================================================
79
+
80
+ /**
81
+ * Maps action types to their schemas.
82
+ */
83
+ const schemaRegistry = new Map<ActionType, CommandSchema>([
84
+ ['toggle', toggleSchema],
85
+ ['add', addSchema],
86
+ ['remove', removeSchema],
87
+ ['put', putSchema],
88
+ ['set', setSchema],
89
+ ['show', showSchema],
90
+ ['hide', hideSchema],
91
+ ['on', onSchema],
92
+ ['trigger', triggerSchema],
93
+ ['wait', waitSchema],
94
+ ['fetch', fetchSchema],
95
+ ['increment', incrementSchema],
96
+ ['decrement', decrementSchema],
97
+ ['append', appendSchema],
98
+ ]);
99
+
100
+ /**
101
+ * Get schema for an action type.
102
+ */
103
+ export function getSchema(action: ActionType): CommandSchema | undefined {
104
+ return schemaRegistry.get(action);
105
+ }
106
+
107
+ /**
108
+ * Register a custom schema.
109
+ */
110
+ export function registerSchema(action: ActionType, schema: CommandSchema): void {
111
+ schemaRegistry.set(action, schema);
112
+ }
113
+
114
+ // =============================================================================
115
+ // Type Validation
116
+ // =============================================================================
117
+
118
+ /**
119
+ * Helper to get the string value from a semantic value (if it has one).
120
+ */
121
+ function getStringValue(value: SemanticValue): string | undefined {
122
+ if (value.type === 'literal' && typeof value.value === 'string') {
123
+ return value.value;
124
+ }
125
+ if (value.type === 'selector') {
126
+ return value.value;
127
+ }
128
+ if (value.type === 'reference') {
129
+ return value.value;
130
+ }
131
+ // PropertyPathValue and ExpressionValue don't have a direct string value
132
+ return undefined;
133
+ }
134
+
135
+ /**
136
+ * Check if a semantic value matches expected types.
137
+ */
138
+ function valueMatchesType(
139
+ value: SemanticValue,
140
+ expectedTypes: Array<'selector' | 'literal' | 'reference' | 'expression'>
141
+ ): boolean {
142
+ // Handle null/undefined
143
+ if (value === null || value === undefined) {
144
+ return false;
145
+ }
146
+
147
+ // Type-specific checks
148
+ for (const expectedType of expectedTypes) {
149
+ switch (expectedType) {
150
+ case 'selector':
151
+ // Selectors are strings starting with ., #, or [
152
+ if (value.type === 'selector') {
153
+ return true;
154
+ }
155
+ // Check if literal/reference looks like a selector
156
+ const selectorStr = getStringValue(value);
157
+ if (
158
+ selectorStr &&
159
+ (selectorStr.startsWith('.') ||
160
+ selectorStr.startsWith('#') ||
161
+ selectorStr.startsWith('['))
162
+ ) {
163
+ return true;
164
+ }
165
+ break;
166
+
167
+ case 'literal':
168
+ // Literals include strings, numbers, booleans
169
+ if (value.type === 'literal') {
170
+ return true;
171
+ }
172
+ // PropertyPathValue is also a valid value (e.g., "my value")
173
+ if (value.type === 'property-path') {
174
+ return true;
175
+ }
176
+ break;
177
+
178
+ case 'reference':
179
+ // References are special keywords (me, you, it, etc.)
180
+ if (value.type === 'reference') {
181
+ return true;
182
+ }
183
+ // PropertyPathValue represents a reference with property access
184
+ if (value.type === 'property-path') {
185
+ return true;
186
+ }
187
+ // Check if it looks like a reference
188
+ const refStr = getStringValue(value);
189
+ if (
190
+ refStr &&
191
+ ['me', 'you', 'it', 'my', 'its', 'result', 'event', 'target'].includes(
192
+ refStr.toLowerCase()
193
+ )
194
+ ) {
195
+ return true;
196
+ }
197
+ break;
198
+
199
+ case 'expression':
200
+ // Expressions are complex computed values
201
+ if (value.type === 'expression') {
202
+ return true;
203
+ }
204
+ // PropertyPathValue is essentially an expression
205
+ if (value.type === 'property-path') {
206
+ return true;
207
+ }
208
+ break;
209
+ }
210
+ }
211
+
212
+ return false;
213
+ }
214
+
215
+ // =============================================================================
216
+ // Validation Logic
217
+ // =============================================================================
218
+
219
+ /**
220
+ * Validate a semantic parse result against its command schema.
221
+ *
222
+ * @param result - The semantic parse result to validate
223
+ * @returns Validation result with errors, warnings, and confidence adjustment
224
+ */
225
+ export function validateSemanticResult(result: SemanticParseResult): ValidationResult {
226
+ const errors: ValidationError[] = [];
227
+ const warnings: ValidationError[] = [];
228
+ const suggestions: string[] = [];
229
+ let confidenceAdjustment = 0;
230
+
231
+ // Get schema for this action
232
+ const schema = getSchema(result.action);
233
+ if (!schema) {
234
+ // No schema means we can't validate - pass through with warning
235
+ warnings.push({
236
+ code: 'UNKNOWN_ROLE',
237
+ message: `No schema found for action '${result.action}'. Skipping validation.`,
238
+ severity: 'warning',
239
+ });
240
+ return {
241
+ valid: true,
242
+ errors,
243
+ warnings,
244
+ confidenceAdjustment: -0.1, // Slight penalty for unknown command
245
+ suggestions,
246
+ };
247
+ }
248
+
249
+ // Create a map of assigned roles
250
+ const assignedRoles = new Map<SemanticRole, SemanticValue>();
251
+ for (const arg of result.arguments) {
252
+ if (arg.role) {
253
+ assignedRoles.set(arg.role, arg);
254
+ }
255
+ }
256
+
257
+ // Validate each role spec
258
+ for (const roleSpec of schema.roles) {
259
+ const assignedValue = assignedRoles.get(roleSpec.role);
260
+
261
+ // Check required roles
262
+ if (roleSpec.required && !assignedValue) {
263
+ // Check if there's a default
264
+ if (roleSpec.default) {
265
+ // Has default - just a warning
266
+ warnings.push({
267
+ code: 'MISSING_REQUIRED_ROLE',
268
+ message: `Role '${roleSpec.role}' not provided, using default.`,
269
+ role: roleSpec.role,
270
+ severity: 'warning',
271
+ });
272
+ } else {
273
+ // No default - error
274
+ errors.push({
275
+ code: 'MISSING_REQUIRED_ROLE',
276
+ message: `Required role '${roleSpec.role}' (${roleSpec.description}) is missing.`,
277
+ role: roleSpec.role,
278
+ expected: roleSpec.expectedTypes,
279
+ severity: 'error',
280
+ });
281
+ suggestions.push(`Add ${roleSpec.description.toLowerCase()} to the command.`);
282
+ confidenceAdjustment -= 0.2;
283
+ }
284
+ continue;
285
+ }
286
+
287
+ // Validate type if value is provided
288
+ if (assignedValue && !valueMatchesType(assignedValue, roleSpec.expectedTypes)) {
289
+ warnings.push({
290
+ code: 'INVALID_TYPE',
291
+ message: `Role '${roleSpec.role}' expected ${roleSpec.expectedTypes.join(' or ')}, got ${assignedValue.type}.`,
292
+ role: roleSpec.role,
293
+ expected: roleSpec.expectedTypes,
294
+ actual: assignedValue,
295
+ severity: 'warning',
296
+ });
297
+ confidenceAdjustment -= 0.1;
298
+ }
299
+ }
300
+
301
+ // Check for unknown roles
302
+ for (const arg of result.arguments) {
303
+ if (arg.role) {
304
+ const isKnownRole = schema.roles.some(spec => spec.role === arg.role);
305
+ if (!isKnownRole) {
306
+ warnings.push({
307
+ code: 'UNKNOWN_ROLE',
308
+ message: `Role '${arg.role}' is not recognized for command '${result.action}'.`,
309
+ role: arg.role,
310
+ severity: 'warning',
311
+ });
312
+ confidenceAdjustment -= 0.05;
313
+ }
314
+ }
315
+ }
316
+
317
+ // Boost confidence if all required roles are properly typed
318
+ const allRequiredPresent = schema.roles
319
+ .filter(spec => spec.required && !spec.default)
320
+ .every(spec => assignedRoles.has(spec.role));
321
+ if (allRequiredPresent && errors.length === 0) {
322
+ confidenceAdjustment += 0.1;
323
+ }
324
+
325
+ return {
326
+ valid: errors.length === 0,
327
+ errors,
328
+ warnings,
329
+ confidenceAdjustment: Math.max(-1, Math.min(1, confidenceAdjustment)),
330
+ suggestions,
331
+ };
332
+ }
333
+
334
+ /**
335
+ * Apply validation to a parse result and adjust confidence.
336
+ *
337
+ * @param result - The semantic parse result
338
+ * @returns Updated result with adjusted confidence
339
+ */
340
+ export function validateAndAdjustConfidence(
341
+ result: SemanticParseResult
342
+ ): SemanticParseResult & { validation: ValidationResult } {
343
+ const validation = validateSemanticResult(result);
344
+
345
+ return {
346
+ ...result,
347
+ confidence: Math.max(0, Math.min(1, result.confidence + validation.confidenceAdjustment)),
348
+ validation,
349
+ };
350
+ }
351
+
352
+ // =============================================================================
353
+ // Relationship to Core Validators
354
+ // =============================================================================
355
+ //
356
+ // This semantic validator is distinct from but complementary to core validators:
357
+ //
358
+ // 1. @lokascript/core/validation/lightweight-validators.ts
359
+ // - Runtime type validation (v.string(), v.object(), etc.)
360
+ // - Zod-replacement for validating runtime input shapes
361
+ // - Used: command inputs, API payloads, configuration
362
+ //
363
+ // 2. @lokascript/core/validation/command-pattern-validator.ts
364
+ // - Class structure validation
365
+ // - Checks command classes follow TypeScript patterns
366
+ // - Used: CI/CD, development tooling
367
+ //
368
+ // 3. @lokascript/semantic/validators/command-validator.ts (this file)
369
+ // - Semantic role validation
370
+ // - Checks parse results against command schemas
371
+ // - Used: semantic parser confidence scoring, debugging
372
+ //
373
+ // Future integration opportunity: Use lightweight-validators for type checking
374
+ // in valueMatchesType() for consistency with core validation patterns.
375
+ //
376
+ // =============================================================================
377
+ // Exports
378
+ // =============================================================================
379
+
380
+ export { schemaRegistry };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Semantic Validators
3
+ *
4
+ * Validates semantic parse results for correctness and type safety.
5
+ */
6
+
7
+ export {
8
+ validateSemanticResult,
9
+ validateAndAdjustConfidence,
10
+ getSchema,
11
+ registerSchema,
12
+ schemaRegistry,
13
+ type ValidationError,
14
+ type ValidationResult,
15
+ } from './command-validator';