@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
package/src/bridge.ts ADDED
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Runtime Bridge
3
+ *
4
+ * Connects the semantic parser to the LokaScript core runtime.
5
+ * Converts SemanticNodes to the CommandNode format expected by the runtime.
6
+ */
7
+
8
+ import type { SemanticNode, EventHandlerSemanticNode, SemanticValue } from './types';
9
+
10
+ // =============================================================================
11
+ // CommandNode Interface (from @lokascript/core)
12
+ // =============================================================================
13
+
14
+ /**
15
+ * Simplified CommandNode interface matching core runtime expectations.
16
+ * In production, this would import from @lokascript/core.
17
+ */
18
+ interface CommandNode {
19
+ type: 'command';
20
+ name: string;
21
+ args: ExpressionNode[];
22
+ modifiers?: Record<string, ExpressionNode>;
23
+ body?: StatementNode[];
24
+ implicitTarget?: ExpressionNode;
25
+ isBlocking: boolean;
26
+ start?: number;
27
+ end?: number;
28
+ line?: number;
29
+ column?: number;
30
+ }
31
+
32
+ interface EventHandlerNode {
33
+ type: 'eventHandler';
34
+ eventName: string;
35
+ body: StatementNode[];
36
+ filter?: ExpressionNode;
37
+ modifiers?: {
38
+ once?: boolean;
39
+ debounce?: number;
40
+ throttle?: number;
41
+ };
42
+ }
43
+
44
+ type ExpressionNode = {
45
+ type: string;
46
+ [key: string]: unknown;
47
+ };
48
+
49
+ type StatementNode = CommandNode | EventHandlerNode | ExpressionNode;
50
+
51
+ // =============================================================================
52
+ // Semantic to Runtime Bridge
53
+ // =============================================================================
54
+
55
+ /**
56
+ * Convert a SemanticNode to a CommandNode for runtime execution.
57
+ */
58
+ export function toCommandNode(semantic: SemanticNode): CommandNode {
59
+ const args: ExpressionNode[] = [];
60
+ const modifiers: Record<string, ExpressionNode> = {};
61
+
62
+ // Map semantic roles to CommandNode structure
63
+ for (const [role, value] of semantic.roles) {
64
+ const expr = valueToExpression(value);
65
+
66
+ switch (role) {
67
+ // Primary arguments (go into args array)
68
+ case 'patient':
69
+ args.push(expr);
70
+ break;
71
+
72
+ // Modifiers (go into modifiers object with preposition keys)
73
+ case 'destination':
74
+ // Determine appropriate preposition based on command
75
+ if (semantic.action === 'put') {
76
+ modifiers['into'] = expr;
77
+ } else {
78
+ modifiers['on'] = expr;
79
+ }
80
+ break;
81
+
82
+ case 'source':
83
+ modifiers['from'] = expr;
84
+ break;
85
+
86
+ case 'style':
87
+ case 'quantity':
88
+ modifiers['by'] = expr;
89
+ break;
90
+
91
+ case 'method':
92
+ modifiers['as'] = expr;
93
+ break;
94
+
95
+ case 'condition':
96
+ modifiers['if'] = expr;
97
+ break;
98
+
99
+ case 'event':
100
+ // For event handlers, this becomes the event name
101
+ args.push(expr);
102
+ break;
103
+
104
+ default:
105
+ // Unknown role - add as modifier
106
+ modifiers[role] = expr;
107
+ }
108
+ }
109
+
110
+ const result: CommandNode = {
111
+ type: 'command',
112
+ name: semantic.action,
113
+ args,
114
+ isBlocking: false,
115
+ start: semantic.metadata?.sourcePosition?.start ?? 0,
116
+ end: semantic.metadata?.sourcePosition?.end ?? 0,
117
+ };
118
+
119
+ if (Object.keys(modifiers).length > 0) {
120
+ result.modifiers = modifiers;
121
+ }
122
+
123
+ return result;
124
+ }
125
+
126
+ /**
127
+ * Convert a SemanticNode to an EventHandlerNode for runtime execution.
128
+ */
129
+ export function toEventHandlerNode(semantic: EventHandlerSemanticNode): EventHandlerNode {
130
+ const eventValue = semantic.roles.get('event');
131
+ const eventName = eventValue ? valueToString(eventValue) : 'click';
132
+
133
+ const body: StatementNode[] = semantic.body.map(node => {
134
+ if (node.kind === 'event-handler') {
135
+ return toEventHandlerNode(node as EventHandlerSemanticNode);
136
+ }
137
+ return toCommandNode(node);
138
+ });
139
+
140
+ const result: EventHandlerNode = {
141
+ type: 'eventHandler',
142
+ eventName,
143
+ body,
144
+ };
145
+
146
+ if (semantic.eventModifiers) {
147
+ const mods: { once?: boolean; debounce?: number; throttle?: number } = {};
148
+ if (semantic.eventModifiers.once !== undefined) mods.once = semantic.eventModifiers.once;
149
+ if (semantic.eventModifiers.debounce !== undefined)
150
+ mods.debounce = semantic.eventModifiers.debounce;
151
+ if (semantic.eventModifiers.throttle !== undefined)
152
+ mods.throttle = semantic.eventModifiers.throttle;
153
+ if (Object.keys(mods).length > 0) {
154
+ result.modifiers = mods;
155
+ }
156
+ }
157
+
158
+ return result;
159
+ }
160
+
161
+ /**
162
+ * Convert a SemanticNode to the appropriate runtime node type.
163
+ */
164
+ export function toRuntimeNode(semantic: SemanticNode): StatementNode {
165
+ if (semantic.kind === 'event-handler') {
166
+ return toEventHandlerNode(semantic as EventHandlerSemanticNode);
167
+ }
168
+ return toCommandNode(semantic);
169
+ }
170
+
171
+ // =============================================================================
172
+ // Helper Functions
173
+ // =============================================================================
174
+
175
+ /**
176
+ * Convert a SemanticValue to an ExpressionNode.
177
+ */
178
+ function valueToExpression(value: SemanticValue): ExpressionNode {
179
+ switch (value.type) {
180
+ case 'literal':
181
+ return {
182
+ type: 'literal',
183
+ value: value.value,
184
+ dataType: value.dataType,
185
+ };
186
+
187
+ case 'selector':
188
+ return {
189
+ type: 'selector',
190
+ value: value.value,
191
+ selectorType: value.selectorKind,
192
+ };
193
+
194
+ case 'reference':
195
+ return {
196
+ type: 'identifier',
197
+ name: value.value,
198
+ };
199
+
200
+ case 'property-path':
201
+ return {
202
+ type: 'memberExpression',
203
+ object: valueToExpression(value.object),
204
+ property: {
205
+ type: 'identifier',
206
+ name: value.property,
207
+ },
208
+ };
209
+
210
+ case 'expression':
211
+ return {
212
+ type: 'raw',
213
+ value: value.raw,
214
+ };
215
+ }
216
+ }
217
+
218
+ /**
219
+ * Convert a SemanticValue to a string.
220
+ */
221
+ function valueToString(value: SemanticValue): string {
222
+ switch (value.type) {
223
+ case 'literal':
224
+ return String(value.value);
225
+ case 'selector':
226
+ return value.value;
227
+ case 'reference':
228
+ return value.value;
229
+ case 'property-path':
230
+ return `${valueToString(value.object)}'s ${value.property}`;
231
+ case 'expression':
232
+ return value.raw;
233
+ }
234
+ }
235
+
236
+ // =============================================================================
237
+ // Integration API
238
+ // =============================================================================
239
+
240
+ /**
241
+ * Parse multilingual hyperscript and return a runtime-compatible node.
242
+ *
243
+ * @param input Hyperscript input (any supported language)
244
+ * @param language Source language code
245
+ * @returns Runtime-compatible node
246
+ */
247
+ export function parseToRuntime(input: string, language: string): StatementNode {
248
+ // Import here to avoid circular dependency
249
+ const { parse } = require('./parser');
250
+ const semantic = parse(input, language);
251
+ return toRuntimeNode(semantic);
252
+ }
253
+
254
+ /**
255
+ * Parse multilingual hyperscript and execute it.
256
+ * This is a placeholder - actual execution requires the core runtime.
257
+ *
258
+ * @param input Hyperscript input
259
+ * @param language Source language code
260
+ * @param context Execution context (from core runtime)
261
+ */
262
+ export async function parseAndExecute(
263
+ input: string,
264
+ language: string,
265
+ _context: unknown
266
+ ): Promise<void> {
267
+ const node = parseToRuntime(input, language);
268
+
269
+ // In production, this would call the core runtime's execute function
270
+ console.log('Would execute:', JSON.stringify(node, null, 2));
271
+
272
+ // Placeholder for actual execution
273
+ // const runtime = context.runtime;
274
+ // await runtime.processCommand(node, context);
275
+ }
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Arabic Browser Bundle Entry Point
3
+ *
4
+ * Minimal single-language bundle.
5
+ * Estimated size: ~69 KB (~24 KB gzip)
6
+ *
7
+ * @example
8
+ * ```html
9
+ * <script src="hyperfixi-semantic.ar.global.js"></script>
10
+ * <script>
11
+ * const ast = LokaScriptSemanticAr.parse('toggle .active', 'ar');
12
+ * </script>
13
+ * ```
14
+ */
15
+
16
+ // =============================================================================
17
+ // Register Languages: ar
18
+ // =============================================================================
19
+
20
+ import './languages/ar';
21
+
22
+ // =============================================================================
23
+ // Version
24
+ // =============================================================================
25
+
26
+ export const VERSION = '1.0.0-ar';
27
+
28
+ // =============================================================================
29
+ // Supported Languages
30
+ // =============================================================================
31
+
32
+ const SUPPORTED_LANGUAGES = ['ar'] as const;
33
+
34
+ /**
35
+ * Get all supported languages in this bundle.
36
+ */
37
+ export function getSupportedLanguages(): string[] {
38
+ return [...SUPPORTED_LANGUAGES];
39
+ }
40
+
41
+ /**
42
+ * Validate that a language is supported by this bundle.
43
+ */
44
+ function validateLanguage(language: string): void {
45
+ if (language !== 'ar') {
46
+ throw new Error(`Language not supported in this bundle: ${language}. ` + `Supported: ar`);
47
+ }
48
+ }
49
+
50
+ // =============================================================================
51
+ // Tokenizers (from registry)
52
+ // =============================================================================
53
+
54
+ export { getTokenizer, isLanguageSupported } from './registry';
55
+
56
+ import type { LanguageToken } from './types';
57
+ import { tokenize as tokenizeInternal } from './tokenizers';
58
+
59
+ /**
60
+ * Tokenize input and return array of tokens (browser-friendly wrapper).
61
+ */
62
+ export function tokenize(input: string, language: string): LanguageToken[] {
63
+ validateLanguage(language);
64
+ const stream = tokenizeInternal(input, language);
65
+ return [...stream.tokens];
66
+ }
67
+
68
+ // Re-export tokenizers
69
+ export { arabicTokenizer } from './tokenizers/arabic';
70
+
71
+ // =============================================================================
72
+ // Patterns (from registry - lazy generation)
73
+ // =============================================================================
74
+
75
+ import { getPatternsForLanguage as getPatternsFromRegistry } from './registry';
76
+ import type { LanguagePattern, ActionType } from './types';
77
+
78
+ /**
79
+ * Get all patterns for a language.
80
+ */
81
+ export function getPatternsForLanguage(language: string): LanguagePattern[] {
82
+ validateLanguage(language);
83
+ return getPatternsFromRegistry(language);
84
+ }
85
+
86
+ /**
87
+ * Get patterns for a language and specific command.
88
+ */
89
+ export function getPatternsForLanguageAndCommand(
90
+ language: string,
91
+ command: ActionType
92
+ ): LanguagePattern[] {
93
+ return getPatternsForLanguage(language)
94
+ .filter(p => p.command === command)
95
+ .sort((a, b) => b.priority - a.priority);
96
+ }
97
+
98
+ // =============================================================================
99
+ // Language Profiles (from registry)
100
+ // =============================================================================
101
+
102
+ export { getProfile, tryGetProfile } from './registry';
103
+ export { arabicProfile } from './generators/language-profiles';
104
+
105
+ // =============================================================================
106
+ // Parsing
107
+ // =============================================================================
108
+
109
+ export { parse, canParse } from './parser';
110
+ export { parseAny, parseExplicit, isExplicitSyntax } from './explicit';
111
+
112
+ // =============================================================================
113
+ // Rendering
114
+ // =============================================================================
115
+
116
+ export { render, renderExplicit, toExplicit, fromExplicit } from './explicit';
117
+
118
+ // =============================================================================
119
+ // AST Builder
120
+ // =============================================================================
121
+
122
+ export { buildAST, ASTBuilder, getCommandMapper, registerCommandMapper } from './ast-builder';
123
+
124
+ // =============================================================================
125
+ // Semantic Analyzer (for core parser integration)
126
+ // =============================================================================
127
+
128
+ export {
129
+ createSemanticAnalyzer,
130
+ SemanticAnalyzerImpl,
131
+ shouldUseSemanticResult,
132
+ DEFAULT_CONFIDENCE_THRESHOLD,
133
+ HIGH_CONFIDENCE_THRESHOLD,
134
+ } from './core-bridge';
135
+
136
+ export type { SemanticAnalyzer, SemanticAnalysisResult } from './core-bridge';
137
+
138
+ // =============================================================================
139
+ // Type Helpers
140
+ // =============================================================================
141
+
142
+ export {
143
+ createSelector,
144
+ createLiteral,
145
+ createReference,
146
+ createPropertyPath,
147
+ createCommandNode,
148
+ createEventHandler,
149
+ } from './types';
150
+
151
+ // =============================================================================
152
+ // Types
153
+ // =============================================================================
154
+
155
+ export type {
156
+ ActionType,
157
+ SemanticRole,
158
+ SemanticValue,
159
+ SemanticNode,
160
+ LanguageToken,
161
+ TokenStream,
162
+ } from './types';
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Core Browser Bundle Entry Point (No Languages)
3
+ *
4
+ * A minimal browser bundle that includes only the parsing infrastructure.
5
+ * Languages must be loaded via URL or pre-loaded modules.
6
+ *
7
+ * This is ideal for:
8
+ * - CDN-based language loading
9
+ * - Applications that load languages dynamically from external sources
10
+ * - Minimizing initial bundle size
11
+ *
12
+ * @example
13
+ * ```html
14
+ * <script src="hyperfixi-semantic-core.global.js"></script>
15
+ * <script src="lang/en.global.js"></script> <!-- Self-registering -->
16
+ * <script>
17
+ * const ast = LokaScriptSemanticCore.parse('toggle .active', 'en');
18
+ * </script>
19
+ * ```
20
+ *
21
+ * @example
22
+ * ```html
23
+ * <script src="hyperfixi-semantic-core.global.js"></script>
24
+ * <script>
25
+ * // Load from URL
26
+ * await LokaScriptSemanticCore.loadLanguageFromUrl('ja', '/lang/ja.global.js');
27
+ * const ast = LokaScriptSemanticCore.parse('トグル .active', 'ja');
28
+ * </script>
29
+ * ```
30
+ */
31
+
32
+ // =============================================================================
33
+ // Version
34
+ // =============================================================================
35
+
36
+ export const VERSION = '1.0.0-core';
37
+
38
+ // =============================================================================
39
+ // Registry (Core)
40
+ // =============================================================================
41
+
42
+ export {
43
+ registerLanguage,
44
+ registerPatterns,
45
+ getTokenizer,
46
+ isLanguageSupported,
47
+ isLanguageRegistered,
48
+ getRegisteredLanguages,
49
+ getProfile,
50
+ tryGetProfile,
51
+ getPatternsForLanguage,
52
+ setPatternGenerator,
53
+ } from './registry';
54
+
55
+ // =============================================================================
56
+ // Tokenizers
57
+ // =============================================================================
58
+
59
+ import type { LanguageToken } from './types';
60
+ import { tokenize as tokenizeInternal } from './tokenizers';
61
+ import { isLanguageRegistered } from './registry';
62
+
63
+ /**
64
+ * Tokenize input and return array of tokens.
65
+ * @throws Error if language is not loaded
66
+ */
67
+ export function tokenize(input: string, language: string): LanguageToken[] {
68
+ if (!isLanguageRegistered(language)) {
69
+ throw new Error(
70
+ `Language '${language}' is not loaded. ` + `Load it via script tag or loadLanguageFromUrl().`
71
+ );
72
+ }
73
+ const stream = tokenizeInternal(input, language);
74
+ return [...stream.tokens];
75
+ }
76
+
77
+ // =============================================================================
78
+ // Parsing
79
+ // =============================================================================
80
+
81
+ export { parse, canParse } from './parser';
82
+ export { parseAny, parseExplicit, isExplicitSyntax } from './explicit';
83
+
84
+ // =============================================================================
85
+ // Rendering
86
+ // =============================================================================
87
+
88
+ export { render, renderExplicit, toExplicit, fromExplicit } from './explicit';
89
+
90
+ // =============================================================================
91
+ // AST Builder
92
+ // =============================================================================
93
+
94
+ export { buildAST, ASTBuilder, getCommandMapper, registerCommandMapper } from './ast-builder';
95
+
96
+ // =============================================================================
97
+ // Semantic Analyzer (for core parser integration)
98
+ // =============================================================================
99
+
100
+ export {
101
+ createSemanticAnalyzer,
102
+ SemanticAnalyzerImpl,
103
+ shouldUseSemanticResult,
104
+ DEFAULT_CONFIDENCE_THRESHOLD,
105
+ HIGH_CONFIDENCE_THRESHOLD,
106
+ } from './core-bridge';
107
+
108
+ export type { SemanticAnalyzer, SemanticAnalysisResult } from './core-bridge';
109
+
110
+ // =============================================================================
111
+ // URL-Based Language Loading
112
+ // =============================================================================
113
+
114
+ import {
115
+ registerLanguage as regLang,
116
+ registerPatterns as regPatterns,
117
+ type LanguageProfile,
118
+ } from './registry';
119
+ import type { LanguageTokenizer, LanguagePattern } from './types';
120
+
121
+ // Re-export for language module registration
122
+ export type { LanguagePattern };
123
+
124
+ /**
125
+ * A language module that can be registered.
126
+ */
127
+ export interface LanguageModule {
128
+ tokenizer: LanguageTokenizer;
129
+ profile: LanguageProfile;
130
+ patterns?: LanguagePattern[];
131
+ buildPatterns?: () => LanguagePattern[];
132
+ }
133
+
134
+ /**
135
+ * Load a language from a URL.
136
+ *
137
+ * The URL should point to a JavaScript file that:
138
+ * - Either self-registers the language (recommended for IIFE bundles)
139
+ * - Or exports a LanguageModule object
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * // Load self-registering bundle
144
+ * await loadLanguageFromUrl('ja', '/lang/ja.global.js');
145
+ *
146
+ * // Load from CDN
147
+ * await loadLanguageFromUrl('ko', 'https://cdn.example.com/semantic/lang/ko.js');
148
+ * ```
149
+ */
150
+ export async function loadLanguageFromUrl(
151
+ code: string,
152
+ url: string
153
+ ): Promise<{ loaded: boolean; error?: string }> {
154
+ try {
155
+ // Fetch the script
156
+ const response = await fetch(url);
157
+ if (!response.ok) {
158
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
159
+ }
160
+
161
+ const text = await response.text();
162
+
163
+ // Execute the script (self-registering bundles will register themselves)
164
+ const script = document.createElement('script');
165
+ script.textContent = text;
166
+ document.head.appendChild(script);
167
+ document.head.removeChild(script);
168
+
169
+ // Check if it registered
170
+ if (isLanguageRegistered(code)) {
171
+ return { loaded: true };
172
+ }
173
+
174
+ return {
175
+ loaded: false,
176
+ error: `Script loaded but language '${code}' was not registered`,
177
+ };
178
+ } catch (error) {
179
+ return {
180
+ loaded: false,
181
+ error: error instanceof Error ? error.message : String(error),
182
+ };
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Register a pre-loaded language module.
188
+ */
189
+ export function registerLanguageModule(code: string, module: LanguageModule): void {
190
+ regLang(code, module.tokenizer, module.profile);
191
+
192
+ if (module.patterns) {
193
+ regPatterns(code, module.patterns);
194
+ } else if (module.buildPatterns) {
195
+ regPatterns(code, module.buildPatterns());
196
+ }
197
+ }
198
+
199
+ // =============================================================================
200
+ // Type Helpers
201
+ // =============================================================================
202
+
203
+ export {
204
+ createSelector,
205
+ createLiteral,
206
+ createReference,
207
+ createPropertyPath,
208
+ createCommandNode,
209
+ createEventHandler,
210
+ } from './types';
211
+
212
+ // =============================================================================
213
+ // Types
214
+ // =============================================================================
215
+
216
+ export type {
217
+ ActionType,
218
+ SemanticRole,
219
+ SemanticValue,
220
+ SemanticNode,
221
+ LanguageToken,
222
+ TokenStream,
223
+ } from './types';
224
+
225
+ // =============================================================================
226
+ // Pattern Generator (Optional)
227
+ // =============================================================================
228
+ // Note: This core bundle does NOT include the pattern generator by default.
229
+ // Language bundles (e.g., browser-en.en.global.js) register their own patterns.
230
+ // If you need dynamic pattern generation, import buildPatternsForLanguage from
231
+ // the full bundle or use setPatternGenerator() to provide your own generator.