@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,394 @@
1
+ /**
2
+ * Expression Tokenizer
3
+ *
4
+ * Tokenizes expression strings into tokens for parsing.
5
+ * Focused on expression-level constructs, not full hyperscript syntax.
6
+ */
7
+
8
+ // =============================================================================
9
+ // Token Types
10
+ // =============================================================================
11
+
12
+ export enum TokenType {
13
+ // Literals
14
+ NUMBER = 'NUMBER',
15
+ STRING = 'STRING',
16
+ BOOLEAN = 'BOOLEAN',
17
+ TEMPLATE_LITERAL = 'TEMPLATE_LITERAL',
18
+
19
+ // Selectors
20
+ ID_SELECTOR = 'ID_SELECTOR',
21
+ CLASS_SELECTOR = 'CLASS_SELECTOR',
22
+ ATTRIBUTE_SELECTOR = 'ATTRIBUTE_SELECTOR',
23
+ QUERY_SELECTOR = 'QUERY_SELECTOR',
24
+
25
+ // References
26
+ CONTEXT_VAR = 'CONTEXT_VAR',
27
+ IDENTIFIER = 'IDENTIFIER',
28
+
29
+ // Operators
30
+ OPERATOR = 'OPERATOR',
31
+ COMPARISON = 'COMPARISON',
32
+ LOGICAL = 'LOGICAL',
33
+ POSSESSIVE = 'POSSESSIVE',
34
+
35
+ // Punctuation
36
+ LPAREN = 'LPAREN',
37
+ RPAREN = 'RPAREN',
38
+ LBRACKET = 'LBRACKET',
39
+ RBRACKET = 'RBRACKET',
40
+ LBRACE = 'LBRACE',
41
+ RBRACE = 'RBRACE',
42
+ COMMA = 'COMMA',
43
+ DOT = 'DOT',
44
+ COLON = 'COLON',
45
+
46
+ // Special
47
+ TIME_EXPRESSION = 'TIME_EXPRESSION',
48
+ EOF = 'EOF',
49
+ ERROR = 'ERROR',
50
+ }
51
+
52
+ export interface Token {
53
+ type: TokenType;
54
+ value: string;
55
+ start: number;
56
+ end: number;
57
+ line?: number;
58
+ column?: number;
59
+ }
60
+
61
+ // =============================================================================
62
+ // Constants
63
+ // =============================================================================
64
+
65
+ const CONTEXT_VARS = new Set([
66
+ 'me',
67
+ 'my',
68
+ 'myself',
69
+ 'you',
70
+ 'your',
71
+ 'yourself',
72
+ 'it',
73
+ 'its',
74
+ 'result',
75
+ 'event',
76
+ 'target',
77
+ 'body',
78
+ 'detail',
79
+ 'window',
80
+ 'document',
81
+ ]);
82
+
83
+ const LOGICAL_OPERATORS = new Set(['and', 'or', 'not', 'no']);
84
+
85
+ const BOOLEAN_LITERALS = new Set(['true', 'false', 'null', 'undefined']);
86
+
87
+ const TIME_UNITS = new Set([
88
+ 'ms',
89
+ 's',
90
+ 'seconds',
91
+ 'second',
92
+ 'milliseconds',
93
+ 'millisecond',
94
+ 'minutes',
95
+ 'minute',
96
+ 'hours',
97
+ 'hour',
98
+ ]);
99
+
100
+ // =============================================================================
101
+ // Tokenizer
102
+ // =============================================================================
103
+
104
+ export function tokenize(input: string): Token[] {
105
+ const tokens: Token[] = [];
106
+ let pos = 0;
107
+ let line = 1;
108
+ let column = 1;
109
+
110
+ // Track if the previous token allows a selector
111
+ // Selectors are only valid at the start or after operators, opening brackets, etc.
112
+ function previousTokenAllowsSelector(): boolean {
113
+ if (tokens.length === 0) return true;
114
+ const prev = tokens[tokens.length - 1];
115
+ // After these token types, a selector is valid
116
+ return [
117
+ TokenType.OPERATOR,
118
+ TokenType.COMPARISON,
119
+ TokenType.LOGICAL,
120
+ TokenType.LPAREN,
121
+ TokenType.LBRACKET,
122
+ TokenType.LBRACE,
123
+ TokenType.COMMA,
124
+ TokenType.COLON,
125
+ ].includes(prev.type);
126
+ }
127
+
128
+ function peek(offset = 0): string {
129
+ return input[pos + offset] ?? '';
130
+ }
131
+
132
+ function advance(): string {
133
+ const char = input[pos];
134
+ pos++;
135
+ if (char === '\n') {
136
+ line++;
137
+ column = 1;
138
+ } else {
139
+ column++;
140
+ }
141
+ return char;
142
+ }
143
+
144
+ function skipWhitespace(): void {
145
+ while (pos < input.length && /\s/.test(input[pos])) {
146
+ advance();
147
+ }
148
+ }
149
+
150
+ function readWhile(predicate: (char: string) => boolean): string {
151
+ let result = '';
152
+ while (pos < input.length && predicate(input[pos])) {
153
+ result += advance();
154
+ }
155
+ return result;
156
+ }
157
+
158
+ function readString(quote: string): string {
159
+ let result = quote;
160
+ advance(); // consume opening quote
161
+ while (pos < input.length && input[pos] !== quote) {
162
+ if (input[pos] === '\\' && pos + 1 < input.length) {
163
+ result += advance(); // backslash
164
+ result += advance(); // escaped char
165
+ } else {
166
+ result += advance();
167
+ }
168
+ }
169
+ if (pos < input.length) {
170
+ result += advance(); // closing quote
171
+ }
172
+ return result;
173
+ }
174
+
175
+ function readTemplateLiteral(): string {
176
+ let result = '`';
177
+ advance(); // consume opening backtick
178
+ while (pos < input.length && input[pos] !== '`') {
179
+ if (input[pos] === '\\' && pos + 1 < input.length) {
180
+ result += advance();
181
+ result += advance();
182
+ } else {
183
+ result += advance();
184
+ }
185
+ }
186
+ if (pos < input.length) {
187
+ result += advance(); // closing backtick
188
+ }
189
+ return result;
190
+ }
191
+
192
+ function readQuerySelector(): string {
193
+ let result = '<';
194
+ advance(); // consume <
195
+ while (pos < input.length) {
196
+ result += advance();
197
+ if (result.endsWith('/>')) {
198
+ break;
199
+ }
200
+ }
201
+ return result;
202
+ }
203
+
204
+ function makeToken(type: TokenType, value: string, start: number): Token {
205
+ return {
206
+ type,
207
+ value,
208
+ start,
209
+ end: pos,
210
+ line,
211
+ column: column - value.length,
212
+ };
213
+ }
214
+
215
+ while (pos < input.length) {
216
+ skipWhitespace();
217
+ if (pos >= input.length) break;
218
+
219
+ const start = pos;
220
+ const char = peek();
221
+
222
+ // Possessive 's (check before string literals)
223
+ if (char === "'" && peek(1) === 's' && !/\w/.test(peek(2))) {
224
+ advance(); // '
225
+ advance(); // s
226
+ tokens.push(makeToken(TokenType.POSSESSIVE, "'s", start));
227
+ continue;
228
+ }
229
+
230
+ // String literals
231
+ if (char === '"' || char === "'") {
232
+ const value = readString(char);
233
+ tokens.push(makeToken(TokenType.STRING, value, start));
234
+ continue;
235
+ }
236
+
237
+ // Template literals
238
+ if (char === '`') {
239
+ const value = readTemplateLiteral();
240
+ tokens.push(makeToken(TokenType.TEMPLATE_LITERAL, value, start));
241
+ continue;
242
+ }
243
+
244
+ // Query selectors <tag/>
245
+ if (char === '<' && /[a-zA-Z.#\[]/.test(peek(1))) {
246
+ const value = readQuerySelector();
247
+ tokens.push(makeToken(TokenType.QUERY_SELECTOR, value, start));
248
+ continue;
249
+ }
250
+
251
+ // ID selectors #id (only at start or after operators)
252
+ if (char === '#' && previousTokenAllowsSelector()) {
253
+ advance();
254
+ const name = readWhile(c => /[\w-]/.test(c));
255
+ tokens.push(makeToken(TokenType.ID_SELECTOR, '#' + name, start));
256
+ continue;
257
+ }
258
+
259
+ // Class selectors .class (only at start or after operators)
260
+ if (char === '.' && /[a-zA-Z_-]/.test(peek(1)) && previousTokenAllowsSelector()) {
261
+ advance();
262
+ const name = readWhile(c => /[\w-]/.test(c));
263
+ tokens.push(makeToken(TokenType.CLASS_SELECTOR, '.' + name, start));
264
+ continue;
265
+ }
266
+
267
+ // Attribute selectors [attr] or [attr="value"] (only at start or after operators)
268
+ if (char === '[' && previousTokenAllowsSelector()) {
269
+ // Check if this looks like an attribute selector (starts with @ or identifier)
270
+ const nextChar = peek(1);
271
+ if (nextChar === '@' || /[a-zA-Z]/.test(nextChar)) {
272
+ let value = '';
273
+ value += advance(); // [
274
+ while (pos < input.length && input[pos] !== ']') {
275
+ if (input[pos] === '"' || input[pos] === "'") {
276
+ value += readString(input[pos]);
277
+ } else {
278
+ value += advance();
279
+ }
280
+ }
281
+ if (pos < input.length) {
282
+ value += advance(); // ]
283
+ }
284
+ tokens.push(makeToken(TokenType.ATTRIBUTE_SELECTOR, value, start));
285
+ continue;
286
+ }
287
+ }
288
+
289
+ // Array brackets [ and ]
290
+ if (char === '[') {
291
+ advance();
292
+ tokens.push(makeToken(TokenType.LBRACKET, '[', start));
293
+ continue;
294
+ }
295
+ if (char === ']') {
296
+ advance();
297
+ tokens.push(makeToken(TokenType.RBRACKET, ']', start));
298
+ continue;
299
+ }
300
+
301
+ // Numbers (including time expressions like 2s, 500ms)
302
+ if (/\d/.test(char)) {
303
+ const num = readWhile(c => /[\d.]/.test(c));
304
+ const unitStart = pos;
305
+ const unit = readWhile(c => /[a-zA-Z]/.test(c));
306
+
307
+ if (TIME_UNITS.has(unit)) {
308
+ tokens.push(makeToken(TokenType.TIME_EXPRESSION, num + unit, start));
309
+ } else {
310
+ // Put back the unit if it's not a time unit
311
+ pos = unitStart;
312
+ tokens.push(makeToken(TokenType.NUMBER, num, start));
313
+ }
314
+ continue;
315
+ }
316
+
317
+ // Punctuation
318
+ if (char === '(') {
319
+ advance();
320
+ tokens.push(makeToken(TokenType.LPAREN, '(', start));
321
+ continue;
322
+ }
323
+ if (char === ')') {
324
+ advance();
325
+ tokens.push(makeToken(TokenType.RPAREN, ')', start));
326
+ continue;
327
+ }
328
+ if (char === '{') {
329
+ advance();
330
+ tokens.push(makeToken(TokenType.LBRACE, '{', start));
331
+ continue;
332
+ }
333
+ if (char === '}') {
334
+ advance();
335
+ tokens.push(makeToken(TokenType.RBRACE, '}', start));
336
+ continue;
337
+ }
338
+ if (char === ',') {
339
+ advance();
340
+ tokens.push(makeToken(TokenType.COMMA, ',', start));
341
+ continue;
342
+ }
343
+ if (char === ':') {
344
+ advance();
345
+ tokens.push(makeToken(TokenType.COLON, ':', start));
346
+ continue;
347
+ }
348
+ if (char === '.') {
349
+ advance();
350
+ tokens.push(makeToken(TokenType.DOT, '.', start));
351
+ continue;
352
+ }
353
+
354
+ // Operators
355
+ if (char === '+' || char === '-' || char === '*' || char === '/' || char === '%') {
356
+ advance();
357
+ tokens.push(makeToken(TokenType.OPERATOR, char, start));
358
+ continue;
359
+ }
360
+
361
+ // Comparison operators
362
+ if (char === '=' || char === '!' || char === '<' || char === '>') {
363
+ let op = advance();
364
+ if (peek() === '=') {
365
+ op += advance();
366
+ }
367
+ tokens.push(makeToken(TokenType.COMPARISON, op, start));
368
+ continue;
369
+ }
370
+
371
+ // Identifiers and keywords
372
+ if (/[a-zA-Z_$]/.test(char)) {
373
+ const word = readWhile(c => /[\w$]/.test(c));
374
+ const lower = word.toLowerCase();
375
+
376
+ if (CONTEXT_VARS.has(lower)) {
377
+ tokens.push(makeToken(TokenType.CONTEXT_VAR, word, start));
378
+ } else if (LOGICAL_OPERATORS.has(lower)) {
379
+ tokens.push(makeToken(TokenType.LOGICAL, word, start));
380
+ } else if (BOOLEAN_LITERALS.has(lower)) {
381
+ tokens.push(makeToken(TokenType.BOOLEAN, word, start));
382
+ } else {
383
+ tokens.push(makeToken(TokenType.IDENTIFIER, word, start));
384
+ }
385
+ continue;
386
+ }
387
+
388
+ // Unknown character - skip it
389
+ advance();
390
+ }
391
+
392
+ tokens.push(makeToken(TokenType.EOF, '', pos));
393
+ return tokens;
394
+ }
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Expression Parser Types
3
+ *
4
+ * Defines AST node types for expressions that can be shared between
5
+ * the semantic package (AST building) and core package (runtime).
6
+ *
7
+ * These types are intentionally minimal and focused on expressions only.
8
+ */
9
+
10
+ // =============================================================================
11
+ // Base Types
12
+ // =============================================================================
13
+
14
+ /**
15
+ * Base interface for all expression AST nodes
16
+ */
17
+ export interface ExpressionNode {
18
+ readonly type: string;
19
+ readonly start?: number | undefined;
20
+ readonly end?: number | undefined;
21
+ readonly line?: number | undefined;
22
+ readonly column?: number | undefined;
23
+ }
24
+
25
+ // =============================================================================
26
+ // Literal Nodes
27
+ // =============================================================================
28
+
29
+ export interface LiteralNode extends ExpressionNode {
30
+ readonly type: 'literal';
31
+ readonly value: string | number | boolean | null | undefined;
32
+ readonly raw?: string | undefined;
33
+ readonly dataType?:
34
+ | 'string'
35
+ | 'number'
36
+ | 'boolean'
37
+ | 'null'
38
+ | 'undefined'
39
+ | 'duration'
40
+ | undefined;
41
+ }
42
+
43
+ export interface TemplateLiteralNode extends ExpressionNode {
44
+ readonly type: 'templateLiteral';
45
+ readonly value: string;
46
+ }
47
+
48
+ // =============================================================================
49
+ // Selector Nodes
50
+ // =============================================================================
51
+
52
+ export type SelectorKind = 'id' | 'class' | 'attribute' | 'element' | 'query' | 'complex';
53
+
54
+ export interface SelectorNode extends ExpressionNode {
55
+ readonly type: 'selector' | 'cssSelector' | 'idRef' | 'classRef';
56
+ readonly value?: string;
57
+ readonly selector?: string;
58
+ readonly selectorType?: SelectorKind;
59
+ }
60
+
61
+ // =============================================================================
62
+ // Reference Nodes
63
+ // =============================================================================
64
+
65
+ export type ContextType =
66
+ | 'me'
67
+ | 'you'
68
+ | 'it'
69
+ | 'its'
70
+ | 'my'
71
+ | 'your'
72
+ | 'result'
73
+ | 'event'
74
+ | 'target'
75
+ | 'body'
76
+ | 'detail';
77
+
78
+ export interface ContextReferenceNode extends ExpressionNode {
79
+ readonly type: 'contextReference' | 'symbol';
80
+ readonly contextType?: ContextType;
81
+ readonly name?: string;
82
+ }
83
+
84
+ export interface IdentifierNode extends ExpressionNode {
85
+ readonly type: 'identifier';
86
+ readonly name: string;
87
+ readonly scope?: 'local' | 'global' | 'element';
88
+ }
89
+
90
+ // =============================================================================
91
+ // Property Access Nodes
92
+ // =============================================================================
93
+
94
+ export interface PropertyAccessNode extends ExpressionNode {
95
+ readonly type: 'propertyAccess';
96
+ readonly object: ExpressionNode;
97
+ readonly property: string;
98
+ }
99
+
100
+ export interface MemberExpressionNode extends ExpressionNode {
101
+ readonly type: 'memberExpression';
102
+ readonly object: ExpressionNode;
103
+ readonly property: ExpressionNode;
104
+ readonly computed?: boolean;
105
+ }
106
+
107
+ export interface PossessiveExpressionNode extends ExpressionNode {
108
+ readonly type: 'possessiveExpression';
109
+ readonly object: ExpressionNode;
110
+ readonly property: ExpressionNode | string;
111
+ }
112
+
113
+ // =============================================================================
114
+ // Binary/Unary Expression Nodes
115
+ // =============================================================================
116
+
117
+ export interface BinaryExpressionNode extends ExpressionNode {
118
+ readonly type: 'binaryExpression';
119
+ readonly operator: string;
120
+ readonly left: ExpressionNode;
121
+ readonly right: ExpressionNode;
122
+ }
123
+
124
+ export interface UnaryExpressionNode extends ExpressionNode {
125
+ readonly type: 'unaryExpression';
126
+ readonly operator: string;
127
+ readonly operand: ExpressionNode;
128
+ readonly prefix?: boolean;
129
+ }
130
+
131
+ // =============================================================================
132
+ // Call Expression Nodes
133
+ // =============================================================================
134
+
135
+ export interface CallExpressionNode extends ExpressionNode {
136
+ readonly type: 'callExpression' | 'functionCall';
137
+ readonly callee: ExpressionNode | string;
138
+ readonly arguments: ExpressionNode[];
139
+ }
140
+
141
+ // =============================================================================
142
+ // Array/Object Nodes
143
+ // =============================================================================
144
+
145
+ export interface ArrayLiteralNode extends ExpressionNode {
146
+ readonly type: 'arrayLiteral';
147
+ readonly elements: ExpressionNode[];
148
+ }
149
+
150
+ export interface ObjectLiteralNode extends ExpressionNode {
151
+ readonly type: 'objectLiteral';
152
+ readonly properties: ObjectPropertyNode[];
153
+ }
154
+
155
+ export interface ObjectPropertyNode extends ExpressionNode {
156
+ readonly type: 'objectProperty';
157
+ readonly key: string | ExpressionNode;
158
+ readonly value: ExpressionNode;
159
+ readonly computed?: boolean;
160
+ }
161
+
162
+ // =============================================================================
163
+ // Special Nodes
164
+ // =============================================================================
165
+
166
+ export interface TimeExpressionNode extends ExpressionNode {
167
+ readonly type: 'timeExpression';
168
+ readonly value: number;
169
+ readonly unit: 'ms' | 's' | 'seconds' | 'milliseconds' | 'minutes' | 'hours';
170
+ readonly raw?: string | undefined;
171
+ }
172
+
173
+ export interface ErrorNode extends ExpressionNode {
174
+ readonly type: 'error';
175
+ readonly message?: string;
176
+ }
177
+
178
+ // =============================================================================
179
+ // Union Type for All Expression Nodes
180
+ // =============================================================================
181
+
182
+ export type AnyExpressionNode =
183
+ | LiteralNode
184
+ | TemplateLiteralNode
185
+ | SelectorNode
186
+ | ContextReferenceNode
187
+ | IdentifierNode
188
+ | PropertyAccessNode
189
+ | MemberExpressionNode
190
+ | PossessiveExpressionNode
191
+ | BinaryExpressionNode
192
+ | UnaryExpressionNode
193
+ | CallExpressionNode
194
+ | ArrayLiteralNode
195
+ | ObjectLiteralNode
196
+ | TimeExpressionNode
197
+ | ErrorNode;
198
+
199
+ // =============================================================================
200
+ // Parse Result
201
+ // =============================================================================
202
+
203
+ export interface ExpressionParseResult {
204
+ readonly success: boolean;
205
+ readonly node?: ExpressionNode;
206
+ readonly error?: string;
207
+ readonly consumed?: number;
208
+ }