@lokascript/semantic 1.2.1 → 2.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.
- package/dist/__test-utils__/index.d.ts +6 -0
- package/dist/__test-utils__/index.d.ts.map +1 -0
- package/dist/__test-utils__/test-helpers.d.ts +7 -0
- package/dist/__test-utils__/test-helpers.d.ts.map +1 -0
- package/dist/__types__/test-helpers.d.ts +67 -0
- package/dist/__types__/test-helpers.d.ts.map +1 -0
- package/dist/analysis/index.d.ts +106 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/ast-builder/command-mappers.d.ts +50 -0
- package/dist/ast-builder/command-mappers.d.ts.map +1 -0
- package/dist/ast-builder/expression-parser/index.d.ts +14 -0
- package/dist/ast-builder/expression-parser/index.d.ts.map +1 -0
- package/dist/ast-builder/expression-parser/parser.d.ts +50 -0
- package/dist/ast-builder/expression-parser/parser.d.ts.map +1 -0
- package/dist/ast-builder/expression-parser/tokenizer.d.ts +44 -0
- package/dist/ast-builder/expression-parser/tokenizer.d.ts.map +1 -0
- package/dist/ast-builder/expression-parser/types.d.ts +111 -0
- package/dist/ast-builder/expression-parser/types.d.ts.map +1 -0
- package/dist/ast-builder/index.d.ts +183 -0
- package/dist/ast-builder/index.d.ts.map +1 -0
- package/dist/ast-builder/value-converters.d.ts +51 -0
- package/dist/ast-builder/value-converters.d.ts.map +1 -0
- package/dist/browser-ar.ar.global.js +2 -2
- package/dist/browser-ar.d.ts +47 -0
- package/dist/browser-ar.d.ts.map +1 -0
- package/dist/browser-bn.bn.global.js +2 -0
- package/dist/browser-bn.d.ts +47 -0
- package/dist/browser-bn.d.ts.map +1 -0
- package/dist/browser-core.core.global.js +2 -2
- package/dist/browser-core.d.ts +83 -0
- package/dist/browser-core.d.ts.map +1 -0
- package/dist/browser-de.d.ts +47 -0
- package/dist/browser-de.d.ts.map +1 -0
- package/dist/browser-de.de.global.js +2 -2
- package/dist/browser-east-asian.d.ts +59 -0
- package/dist/browser-east-asian.d.ts.map +1 -0
- package/dist/browser-east-asian.east-asian.global.js +2 -2
- package/dist/browser-en-tr.d.ts +50 -0
- package/dist/browser-en-tr.d.ts.map +1 -0
- package/dist/browser-en-tr.en-tr.global.js +2 -2
- package/dist/browser-en.d.ts +48 -0
- package/dist/browser-en.d.ts.map +1 -0
- package/dist/browser-en.en.global.js +2 -2
- package/dist/browser-es-en.d.ts +62 -0
- package/dist/browser-es-en.d.ts.map +1 -0
- package/dist/browser-es-en.es-en.global.js +2 -2
- package/dist/browser-es.d.ts +51 -0
- package/dist/browser-es.d.ts.map +1 -0
- package/dist/browser-es.es.global.js +2 -2
- package/dist/browser-fr.d.ts +47 -0
- package/dist/browser-fr.d.ts.map +1 -0
- package/dist/browser-fr.fr.global.js +2 -2
- package/dist/browser-hi.d.ts +47 -0
- package/dist/browser-hi.d.ts.map +1 -0
- package/dist/browser-hi.hi.global.js +2 -0
- package/dist/browser-id.d.ts +47 -0
- package/dist/browser-id.d.ts.map +1 -0
- package/dist/browser-id.id.global.js +2 -2
- package/dist/browser-it.d.ts +47 -0
- package/dist/browser-it.d.ts.map +1 -0
- package/dist/browser-it.it.global.js +2 -0
- package/dist/browser-ja.d.ts +47 -0
- package/dist/browser-ja.d.ts.map +1 -0
- package/dist/browser-ja.ja.global.js +2 -2
- package/dist/browser-ko.d.ts +47 -0
- package/dist/browser-ko.d.ts.map +1 -0
- package/dist/browser-ko.ko.global.js +2 -2
- package/dist/browser-lazy.d.ts +52 -0
- package/dist/browser-lazy.d.ts.map +1 -0
- package/dist/browser-lazy.lazy.global.js +2 -2
- package/dist/browser-ms.d.ts +47 -0
- package/dist/browser-ms.d.ts.map +1 -0
- package/dist/browser-ms.ms.global.js +2 -0
- package/dist/browser-pl.d.ts +47 -0
- package/dist/browser-pl.d.ts.map +1 -0
- package/dist/browser-pl.pl.global.js +2 -0
- package/dist/browser-priority.d.ts +83 -0
- package/dist/browser-priority.d.ts.map +1 -0
- package/dist/browser-priority.priority.global.js +2 -2
- package/dist/browser-pt.d.ts +47 -0
- package/dist/browser-pt.d.ts.map +1 -0
- package/dist/browser-pt.pt.global.js +2 -2
- package/dist/browser-qu.d.ts +47 -0
- package/dist/browser-qu.d.ts.map +1 -0
- package/dist/browser-qu.qu.global.js +2 -2
- package/dist/browser-ru.d.ts +47 -0
- package/dist/browser-ru.d.ts.map +1 -0
- package/dist/browser-ru.ru.global.js +2 -0
- package/dist/browser-sw.d.ts +47 -0
- package/dist/browser-sw.d.ts.map +1 -0
- package/dist/browser-sw.sw.global.js +2 -2
- package/dist/browser-th.d.ts +47 -0
- package/dist/browser-th.d.ts.map +1 -0
- package/dist/browser-th.th.global.js +2 -0
- package/dist/browser-tl.d.ts +47 -0
- package/dist/browser-tl.d.ts.map +1 -0
- package/dist/browser-tl.tl.global.js +2 -0
- package/dist/browser-tr.d.ts +47 -0
- package/dist/browser-tr.d.ts.map +1 -0
- package/dist/browser-tr.tr.global.js +2 -2
- package/dist/browser-uk.d.ts +47 -0
- package/dist/browser-uk.d.ts.map +1 -0
- package/dist/browser-uk.uk.global.js +2 -0
- package/dist/browser-vi.d.ts +47 -0
- package/dist/browser-vi.d.ts.map +1 -0
- package/dist/browser-vi.vi.global.js +2 -0
- package/dist/browser-western.d.ts +67 -0
- package/dist/browser-western.d.ts.map +1 -0
- package/dist/browser-western.western.global.js +2 -2
- package/dist/browser-zh.d.ts +47 -0
- package/dist/browser-zh.d.ts.map +1 -0
- package/dist/browser-zh.zh.global.js +2 -2
- package/dist/browser.d.ts +69 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.global.js +2 -2
- package/dist/browser.global.js.map +1 -1
- package/dist/cache/index.d.ts +7 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/semantic-cache.d.ts +138 -0
- package/dist/cache/semantic-cache.d.ts.map +1 -0
- package/dist/core-bridge.d.ts +154 -0
- package/dist/core-bridge.d.ts.map +1 -0
- package/dist/core.d.ts +24 -1235
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +6433 -1731
- package/dist/core.js.map +1 -1
- package/dist/explicit/converter.d.ts +98 -0
- package/dist/explicit/converter.d.ts.map +1 -0
- package/dist/explicit/index.d.ts +10 -0
- package/dist/explicit/index.d.ts.map +1 -0
- package/dist/explicit/parser.d.ts +25 -0
- package/dist/explicit/parser.d.ts.map +1 -0
- package/dist/explicit/renderer.d.ts +82 -0
- package/dist/explicit/renderer.d.ts.map +1 -0
- package/dist/generators/command-schemas.d.ts +358 -0
- package/dist/generators/command-schemas.d.ts.map +1 -0
- package/dist/generators/event-handlers-sov.d.ts +91 -0
- package/dist/generators/event-handlers-sov.d.ts.map +1 -0
- package/dist/generators/event-handlers-vso.d.ts +69 -0
- package/dist/generators/event-handlers-vso.d.ts.map +1 -0
- package/dist/generators/index.d.ts +12 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/language-profiles.d.ts +65 -0
- package/dist/generators/language-profiles.d.ts.map +1 -0
- package/dist/generators/pattern-generator.d.ts +81 -0
- package/dist/generators/pattern-generator.d.ts.map +1 -0
- package/dist/generators/profiles/arabic.d.ts +9 -0
- package/dist/generators/profiles/arabic.d.ts.map +1 -0
- package/dist/generators/profiles/bengali.d.ts +9 -0
- package/dist/generators/profiles/bengali.d.ts.map +1 -0
- package/dist/generators/profiles/chinese.d.ts +9 -0
- package/dist/generators/profiles/chinese.d.ts.map +1 -0
- package/dist/generators/profiles/english.d.ts +8 -0
- package/dist/generators/profiles/english.d.ts.map +1 -0
- package/dist/generators/profiles/french.d.ts +9 -0
- package/dist/generators/profiles/french.d.ts.map +1 -0
- package/dist/generators/profiles/german.d.ts +9 -0
- package/dist/generators/profiles/german.d.ts.map +1 -0
- package/dist/generators/profiles/hebrew.d.ts +10 -0
- package/dist/generators/profiles/hebrew.d.ts.map +1 -0
- package/dist/generators/profiles/hindi.d.ts +9 -0
- package/dist/generators/profiles/hindi.d.ts.map +1 -0
- package/dist/generators/profiles/index.d.ts +36 -0
- package/dist/generators/profiles/index.d.ts.map +1 -0
- package/dist/generators/profiles/indonesian.d.ts +9 -0
- package/dist/generators/profiles/indonesian.d.ts.map +1 -0
- package/dist/generators/profiles/italian.d.ts +10 -0
- package/dist/generators/profiles/italian.d.ts.map +1 -0
- package/dist/generators/profiles/japanese.d.ts +9 -0
- package/dist/generators/profiles/japanese.d.ts.map +1 -0
- package/dist/generators/profiles/korean.d.ts +9 -0
- package/dist/generators/profiles/korean.d.ts.map +1 -0
- package/dist/generators/profiles/marker-templates.d.ts +119 -0
- package/dist/generators/profiles/marker-templates.d.ts.map +1 -0
- package/dist/generators/profiles/ms.d.ts +8 -0
- package/dist/generators/profiles/ms.d.ts.map +1 -0
- package/dist/generators/profiles/polish.d.ts +10 -0
- package/dist/generators/profiles/polish.d.ts.map +1 -0
- package/dist/generators/profiles/portuguese.d.ts +9 -0
- package/dist/generators/profiles/portuguese.d.ts.map +1 -0
- package/dist/generators/profiles/quechua.d.ts +9 -0
- package/dist/generators/profiles/quechua.d.ts.map +1 -0
- package/dist/generators/profiles/russian.d.ts +10 -0
- package/dist/generators/profiles/russian.d.ts.map +1 -0
- package/dist/generators/profiles/spanish.d.ts +9 -0
- package/dist/generators/profiles/spanish.d.ts.map +1 -0
- package/dist/generators/profiles/spanishMexico.d.ts +19 -0
- package/dist/generators/profiles/spanishMexico.d.ts.map +1 -0
- package/dist/generators/profiles/swahili.d.ts +9 -0
- package/dist/generators/profiles/swahili.d.ts.map +1 -0
- package/dist/generators/profiles/thai.d.ts +9 -0
- package/dist/generators/profiles/thai.d.ts.map +1 -0
- package/dist/generators/profiles/tl.d.ts +8 -0
- package/dist/generators/profiles/tl.d.ts.map +1 -0
- package/dist/generators/profiles/turkish.d.ts +9 -0
- package/dist/generators/profiles/turkish.d.ts.map +1 -0
- package/dist/generators/profiles/types.d.ts +170 -0
- package/dist/generators/profiles/types.d.ts.map +1 -0
- package/dist/generators/profiles/ukrainian.d.ts +10 -0
- package/dist/generators/profiles/ukrainian.d.ts.map +1 -0
- package/dist/generators/profiles/vietnamese.d.ts +10 -0
- package/dist/generators/profiles/vietnamese.d.ts.map +1 -0
- package/dist/generators/schema-error-codes.d.ts +60 -0
- package/dist/generators/schema-error-codes.d.ts.map +1 -0
- package/dist/generators/schema-validator.d.ts +77 -0
- package/dist/generators/schema-validator.d.ts.map +1 -0
- package/dist/index.cjs +5451 -2522
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +50 -3436
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5448 -2526
- package/dist/index.js.map +1 -1
- package/dist/interchange/from-semantic.d.ts +23 -0
- package/dist/interchange/from-semantic.d.ts.map +1 -0
- package/dist/interchange/index.d.ts +7 -0
- package/dist/interchange/index.d.ts.map +1 -0
- package/dist/interchange/types.d.ts +132 -0
- package/dist/interchange/types.d.ts.map +1 -0
- package/dist/language-building-schema.d.ts +163 -0
- package/dist/language-building-schema.d.ts.map +1 -0
- package/dist/language-loader.d.ts +126 -0
- package/dist/language-loader.d.ts.map +1 -0
- package/dist/languages/_all.d.ts +66 -0
- package/dist/languages/_all.d.ts.map +1 -0
- package/dist/languages/ar.d.ts +6 -75
- package/dist/languages/ar.d.ts.map +1 -0
- package/dist/languages/ar.js +65 -14
- package/dist/languages/ar.js.map +1 -1
- package/dist/languages/bn.d.ts +10 -0
- package/dist/languages/bn.d.ts.map +1 -0
- package/dist/languages/bn.js +1163 -0
- package/dist/languages/bn.js.map +1 -0
- package/dist/languages/de.d.ts +6 -35
- package/dist/languages/de.d.ts.map +1 -0
- package/dist/languages/de.js +260 -22
- package/dist/languages/de.js.map +1 -1
- package/dist/languages/en.d.ts +13 -40
- package/dist/languages/en.d.ts.map +1 -0
- package/dist/languages/en.js +788 -241
- package/dist/languages/en.js.map +1 -1
- package/dist/languages/es-MX.d.ts +24 -0
- package/dist/languages/es-MX.d.ts.map +1 -0
- package/dist/languages/es-MX.js +1729 -0
- package/dist/languages/es-MX.js.map +1 -0
- package/dist/languages/es.d.ts +6 -49
- package/dist/languages/es.d.ts.map +1 -0
- package/dist/languages/es.js +60 -13
- package/dist/languages/es.js.map +1 -1
- package/dist/languages/fr.d.ts +6 -34
- package/dist/languages/fr.d.ts.map +1 -0
- package/dist/languages/fr.js +309 -22
- package/dist/languages/fr.js.map +1 -1
- package/dist/languages/he.d.ts +9 -0
- package/dist/languages/he.d.ts.map +1 -0
- package/dist/languages/he.js +1378 -0
- package/dist/languages/he.js.map +1 -0
- package/dist/languages/hi.d.ts +18 -0
- package/dist/languages/hi.d.ts.map +1 -0
- package/dist/languages/hi.js +1209 -0
- package/dist/languages/hi.js.map +1 -0
- package/dist/languages/id.d.ts +6 -32
- package/dist/languages/id.d.ts.map +1 -0
- package/dist/languages/id.js +60 -13
- package/dist/languages/id.js.map +1 -1
- package/dist/languages/index.d.ts +18 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/it.d.ts +9 -0
- package/dist/languages/it.d.ts.map +1 -0
- package/dist/languages/it.js +1647 -0
- package/dist/languages/it.js.map +1 -0
- package/dist/languages/ja.d.ts +6 -50
- package/dist/languages/ja.d.ts.map +1 -0
- package/dist/languages/ja.js +60 -13
- package/dist/languages/ja.js.map +1 -1
- package/dist/languages/ko.d.ts +6 -55
- package/dist/languages/ko.d.ts.map +1 -0
- package/dist/languages/ko.js +64 -13
- package/dist/languages/ko.js.map +1 -1
- package/dist/languages/ms.d.ts +10 -0
- package/dist/languages/ms.d.ts.map +1 -0
- package/dist/languages/ms.js +1088 -0
- package/dist/languages/ms.js.map +1 -0
- package/dist/languages/pl.d.ts +12 -0
- package/dist/languages/pl.d.ts.map +1 -0
- package/dist/languages/pl.js +1586 -0
- package/dist/languages/pl.js.map +1 -0
- package/dist/languages/pt.d.ts +6 -34
- package/dist/languages/pt.d.ts.map +1 -0
- package/dist/languages/pt.js +344 -22
- package/dist/languages/pt.js.map +1 -1
- package/dist/languages/qu.d.ts +6 -44
- package/dist/languages/qu.d.ts.map +1 -0
- package/dist/languages/qu.js +105 -28
- package/dist/languages/qu.js.map +1 -1
- package/dist/languages/ru.d.ts +18 -0
- package/dist/languages/ru.d.ts.map +1 -0
- package/dist/languages/ru.js +1705 -0
- package/dist/languages/ru.js.map +1 -0
- package/dist/languages/sw.d.ts +6 -32
- package/dist/languages/sw.d.ts.map +1 -0
- package/dist/languages/sw.js +69 -17
- package/dist/languages/sw.js.map +1 -1
- package/dist/languages/th.d.ts +10 -0
- package/dist/languages/th.d.ts.map +1 -0
- package/dist/languages/th.js +1123 -0
- package/dist/languages/th.js.map +1 -0
- package/dist/languages/tl.d.ts +10 -0
- package/dist/languages/tl.d.ts.map +1 -0
- package/dist/languages/tl.js +1086 -0
- package/dist/languages/tl.js.map +1 -0
- package/dist/languages/tr.d.ts +6 -50
- package/dist/languages/tr.d.ts.map +1 -0
- package/dist/languages/tr.js +67 -16
- package/dist/languages/tr.js.map +1 -1
- package/dist/languages/uk.d.ts +18 -0
- package/dist/languages/uk.d.ts.map +1 -0
- package/dist/languages/uk.js +1691 -0
- package/dist/languages/uk.js.map +1 -0
- package/dist/languages/vi.d.ts +10 -0
- package/dist/languages/vi.d.ts.map +1 -0
- package/dist/languages/vi.js +1266 -0
- package/dist/languages/vi.js.map +1 -0
- package/dist/languages/zh.d.ts +6 -55
- package/dist/languages/zh.d.ts.map +1 -0
- package/dist/languages/zh.js +59 -13
- package/dist/languages/zh.js.map +1 -1
- package/dist/parser/index.d.ts +8 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/pattern-matcher.d.ts +188 -0
- package/dist/parser/pattern-matcher.d.ts.map +1 -0
- package/dist/parser/semantic-parser.d.ts +238 -0
- package/dist/parser/semantic-parser.d.ts.map +1 -0
- package/dist/parser/utils/index.d.ts +9 -0
- package/dist/parser/utils/index.d.ts.map +1 -0
- package/dist/parser/utils/marker-resolution.d.ts +57 -0
- package/dist/parser/utils/marker-resolution.d.ts.map +1 -0
- package/dist/parser/utils/possessive-keywords.d.ts +31 -0
- package/dist/parser/utils/possessive-keywords.d.ts.map +1 -0
- package/dist/parser/utils/role-positioning.d.ts +42 -0
- package/dist/parser/utils/role-positioning.d.ts.map +1 -0
- package/dist/parser/utils/type-validation.d.ts +63 -0
- package/dist/parser/utils/type-validation.d.ts.map +1 -0
- package/dist/patterns/add/ar.d.ts +12 -0
- package/dist/patterns/add/ar.d.ts.map +1 -0
- package/dist/patterns/add/bn.d.ts +8 -0
- package/dist/patterns/add/bn.d.ts.map +1 -0
- package/dist/patterns/add/hi.d.ts +8 -0
- package/dist/patterns/add/hi.d.ts.map +1 -0
- package/dist/patterns/add/index.d.ts +31 -0
- package/dist/patterns/add/index.d.ts.map +1 -0
- package/dist/patterns/add/it.d.ts +11 -0
- package/dist/patterns/add/it.d.ts.map +1 -0
- package/dist/patterns/add/ja.d.ts +12 -0
- package/dist/patterns/add/ja.d.ts.map +1 -0
- package/dist/patterns/add/ko.d.ts +12 -0
- package/dist/patterns/add/ko.d.ts.map +1 -0
- package/dist/patterns/add/pl.d.ts +12 -0
- package/dist/patterns/add/pl.d.ts.map +1 -0
- package/dist/patterns/add/qu.d.ts +9 -0
- package/dist/patterns/add/qu.d.ts.map +1 -0
- package/dist/patterns/add/ru.d.ts +12 -0
- package/dist/patterns/add/ru.d.ts.map +1 -0
- package/dist/patterns/add/th.d.ts +8 -0
- package/dist/patterns/add/th.d.ts.map +1 -0
- package/dist/patterns/add/tr.d.ts +12 -0
- package/dist/patterns/add/tr.d.ts.map +1 -0
- package/dist/patterns/add/uk.d.ts +12 -0
- package/dist/patterns/add/uk.d.ts.map +1 -0
- package/dist/patterns/add/vi.d.ts +11 -0
- package/dist/patterns/add/vi.d.ts.map +1 -0
- package/dist/patterns/add/zh.d.ts +12 -0
- package/dist/patterns/add/zh.d.ts.map +1 -0
- package/dist/patterns/builders.d.ts +52 -0
- package/dist/patterns/builders.d.ts.map +1 -0
- package/dist/patterns/decrement/bn.d.ts +8 -0
- package/dist/patterns/decrement/bn.d.ts.map +1 -0
- package/dist/patterns/decrement/de.d.ts +12 -0
- package/dist/patterns/decrement/de.d.ts.map +1 -0
- package/dist/patterns/decrement/hi.d.ts +8 -0
- package/dist/patterns/decrement/hi.d.ts.map +1 -0
- package/dist/patterns/decrement/index.d.ts +28 -0
- package/dist/patterns/decrement/index.d.ts.map +1 -0
- package/dist/patterns/decrement/it.d.ts +11 -0
- package/dist/patterns/decrement/it.d.ts.map +1 -0
- package/dist/patterns/decrement/pl.d.ts +12 -0
- package/dist/patterns/decrement/pl.d.ts.map +1 -0
- package/dist/patterns/decrement/ru.d.ts +12 -0
- package/dist/patterns/decrement/ru.d.ts.map +1 -0
- package/dist/patterns/decrement/th.d.ts +8 -0
- package/dist/patterns/decrement/th.d.ts.map +1 -0
- package/dist/patterns/decrement/tr.d.ts +12 -0
- package/dist/patterns/decrement/tr.d.ts.map +1 -0
- package/dist/patterns/decrement/uk.d.ts +12 -0
- package/dist/patterns/decrement/uk.d.ts.map +1 -0
- package/dist/patterns/decrement/vi.d.ts +11 -0
- package/dist/patterns/decrement/vi.d.ts.map +1 -0
- package/dist/patterns/decrement/zh.d.ts +12 -0
- package/dist/patterns/decrement/zh.d.ts.map +1 -0
- package/dist/patterns/en.d.ts +13 -0
- package/dist/patterns/en.d.ts.map +1 -0
- package/dist/patterns/event-handler/ar.d.ts +12 -0
- package/dist/patterns/event-handler/ar.d.ts.map +1 -0
- package/dist/patterns/event-handler/bn.d.ts +8 -0
- package/dist/patterns/event-handler/bn.d.ts.map +1 -0
- package/dist/patterns/event-handler/de.d.ts +11 -0
- package/dist/patterns/event-handler/de.d.ts.map +1 -0
- package/dist/patterns/event-handler/en.d.ts +11 -0
- package/dist/patterns/event-handler/en.d.ts.map +1 -0
- package/dist/patterns/event-handler/es.d.ts +11 -0
- package/dist/patterns/event-handler/es.d.ts.map +1 -0
- package/dist/patterns/event-handler/fr.d.ts +11 -0
- package/dist/patterns/event-handler/fr.d.ts.map +1 -0
- package/dist/patterns/event-handler/he.d.ts +12 -0
- package/dist/patterns/event-handler/he.d.ts.map +1 -0
- package/dist/patterns/event-handler/hi.d.ts +9 -0
- package/dist/patterns/event-handler/hi.d.ts.map +1 -0
- package/dist/patterns/event-handler/id.d.ts +11 -0
- package/dist/patterns/event-handler/id.d.ts.map +1 -0
- package/dist/patterns/event-handler/index.d.ts +41 -0
- package/dist/patterns/event-handler/index.d.ts.map +1 -0
- package/dist/patterns/event-handler/it.d.ts +11 -0
- package/dist/patterns/event-handler/it.d.ts.map +1 -0
- package/dist/patterns/event-handler/ja.d.ts +12 -0
- package/dist/patterns/event-handler/ja.d.ts.map +1 -0
- package/dist/patterns/event-handler/ko.d.ts +12 -0
- package/dist/patterns/event-handler/ko.d.ts.map +1 -0
- package/dist/patterns/event-handler/ms.d.ts +14 -0
- package/dist/patterns/event-handler/ms.d.ts.map +1 -0
- package/dist/patterns/event-handler/pl.d.ts +12 -0
- package/dist/patterns/event-handler/pl.d.ts.map +1 -0
- package/dist/patterns/event-handler/pt.d.ts +11 -0
- package/dist/patterns/event-handler/pt.d.ts.map +1 -0
- package/dist/patterns/event-handler/qu.d.ts +11 -0
- package/dist/patterns/event-handler/qu.d.ts.map +1 -0
- package/dist/patterns/event-handler/ru.d.ts +12 -0
- package/dist/patterns/event-handler/ru.d.ts.map +1 -0
- package/dist/patterns/event-handler/shared.d.ts +15 -0
- package/dist/patterns/event-handler/shared.d.ts.map +1 -0
- package/dist/patterns/event-handler/sw.d.ts +11 -0
- package/dist/patterns/event-handler/sw.d.ts.map +1 -0
- package/dist/patterns/event-handler/th.d.ts +8 -0
- package/dist/patterns/event-handler/th.d.ts.map +1 -0
- package/dist/patterns/event-handler/tl.d.ts +9 -0
- package/dist/patterns/event-handler/tl.d.ts.map +1 -0
- package/dist/patterns/event-handler/tr.d.ts +12 -0
- package/dist/patterns/event-handler/tr.d.ts.map +1 -0
- package/dist/patterns/event-handler/uk.d.ts +12 -0
- package/dist/patterns/event-handler/uk.d.ts.map +1 -0
- package/dist/patterns/event-handler/vi.d.ts +11 -0
- package/dist/patterns/event-handler/vi.d.ts.map +1 -0
- package/dist/patterns/event-handler/zh.d.ts +11 -0
- package/dist/patterns/event-handler/zh.d.ts.map +1 -0
- package/dist/patterns/get/ar.d.ts +12 -0
- package/dist/patterns/get/ar.d.ts.map +1 -0
- package/dist/patterns/get/bn.d.ts +8 -0
- package/dist/patterns/get/bn.d.ts.map +1 -0
- package/dist/patterns/get/de.d.ts +12 -0
- package/dist/patterns/get/de.d.ts.map +1 -0
- package/dist/patterns/get/hi.d.ts +8 -0
- package/dist/patterns/get/hi.d.ts.map +1 -0
- package/dist/patterns/get/index.d.ts +29 -0
- package/dist/patterns/get/index.d.ts.map +1 -0
- package/dist/patterns/get/it.d.ts +11 -0
- package/dist/patterns/get/it.d.ts.map +1 -0
- package/dist/patterns/get/ja.d.ts +12 -0
- package/dist/patterns/get/ja.d.ts.map +1 -0
- package/dist/patterns/get/ko.d.ts +12 -0
- package/dist/patterns/get/ko.d.ts.map +1 -0
- package/dist/patterns/get/pl.d.ts +12 -0
- package/dist/patterns/get/pl.d.ts.map +1 -0
- package/dist/patterns/get/ru.d.ts +12 -0
- package/dist/patterns/get/ru.d.ts.map +1 -0
- package/dist/patterns/get/th.d.ts +8 -0
- package/dist/patterns/get/th.d.ts.map +1 -0
- package/dist/patterns/get/uk.d.ts +12 -0
- package/dist/patterns/get/uk.d.ts.map +1 -0
- package/dist/patterns/get/vi.d.ts +11 -0
- package/dist/patterns/get/vi.d.ts.map +1 -0
- package/dist/patterns/grammar-transformed/index.d.ts +20 -0
- package/dist/patterns/grammar-transformed/index.d.ts.map +1 -0
- package/dist/patterns/grammar-transformed/ja.d.ts +12 -0
- package/dist/patterns/grammar-transformed/ja.d.ts.map +1 -0
- package/dist/patterns/grammar-transformed/ko.d.ts +12 -0
- package/dist/patterns/grammar-transformed/ko.d.ts.map +1 -0
- package/dist/patterns/grammar-transformed/tr.d.ts +12 -0
- package/dist/patterns/grammar-transformed/tr.d.ts.map +1 -0
- package/dist/patterns/hide/ar.d.ts +12 -0
- package/dist/patterns/hide/ar.d.ts.map +1 -0
- package/dist/patterns/hide/bn.d.ts +8 -0
- package/dist/patterns/hide/bn.d.ts.map +1 -0
- package/dist/patterns/hide/de.d.ts +12 -0
- package/dist/patterns/hide/de.d.ts.map +1 -0
- package/dist/patterns/hide/hi.d.ts +8 -0
- package/dist/patterns/hide/hi.d.ts.map +1 -0
- package/dist/patterns/hide/index.d.ts +31 -0
- package/dist/patterns/hide/index.d.ts.map +1 -0
- package/dist/patterns/hide/it.d.ts +11 -0
- package/dist/patterns/hide/it.d.ts.map +1 -0
- package/dist/patterns/hide/ja.d.ts +12 -0
- package/dist/patterns/hide/ja.d.ts.map +1 -0
- package/dist/patterns/hide/ko.d.ts +12 -0
- package/dist/patterns/hide/ko.d.ts.map +1 -0
- package/dist/patterns/hide/pl.d.ts +12 -0
- package/dist/patterns/hide/pl.d.ts.map +1 -0
- package/dist/patterns/hide/ru.d.ts +12 -0
- package/dist/patterns/hide/ru.d.ts.map +1 -0
- package/dist/patterns/hide/th.d.ts +8 -0
- package/dist/patterns/hide/th.d.ts.map +1 -0
- package/dist/patterns/hide/tr.d.ts +12 -0
- package/dist/patterns/hide/tr.d.ts.map +1 -0
- package/dist/patterns/hide/uk.d.ts +12 -0
- package/dist/patterns/hide/uk.d.ts.map +1 -0
- package/dist/patterns/hide/vi.d.ts +11 -0
- package/dist/patterns/hide/vi.d.ts.map +1 -0
- package/dist/patterns/hide/zh.d.ts +12 -0
- package/dist/patterns/hide/zh.d.ts.map +1 -0
- package/dist/patterns/increment/bn.d.ts +8 -0
- package/dist/patterns/increment/bn.d.ts.map +1 -0
- package/dist/patterns/increment/de.d.ts +12 -0
- package/dist/patterns/increment/de.d.ts.map +1 -0
- package/dist/patterns/increment/hi.d.ts +8 -0
- package/dist/patterns/increment/hi.d.ts.map +1 -0
- package/dist/patterns/increment/index.d.ts +28 -0
- package/dist/patterns/increment/index.d.ts.map +1 -0
- package/dist/patterns/increment/it.d.ts +11 -0
- package/dist/patterns/increment/it.d.ts.map +1 -0
- package/dist/patterns/increment/pl.d.ts +12 -0
- package/dist/patterns/increment/pl.d.ts.map +1 -0
- package/dist/patterns/increment/ru.d.ts +12 -0
- package/dist/patterns/increment/ru.d.ts.map +1 -0
- package/dist/patterns/increment/th.d.ts +8 -0
- package/dist/patterns/increment/th.d.ts.map +1 -0
- package/dist/patterns/increment/tr.d.ts +12 -0
- package/dist/patterns/increment/tr.d.ts.map +1 -0
- package/dist/patterns/increment/uk.d.ts +12 -0
- package/dist/patterns/increment/uk.d.ts.map +1 -0
- package/dist/patterns/increment/vi.d.ts +11 -0
- package/dist/patterns/increment/vi.d.ts.map +1 -0
- package/dist/patterns/increment/zh.d.ts +12 -0
- package/dist/patterns/increment/zh.d.ts.map +1 -0
- package/dist/patterns/index.d.ts +21 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/languages/en/control-flow.d.ts +40 -0
- package/dist/patterns/languages/en/control-flow.d.ts.map +1 -0
- package/dist/patterns/languages/en/fetch.d.ts +22 -0
- package/dist/patterns/languages/en/fetch.d.ts.map +1 -0
- package/dist/patterns/languages/en/index.d.ts +22 -0
- package/dist/patterns/languages/en/index.d.ts.map +1 -0
- package/dist/patterns/languages/en/repeat.d.ts +22 -0
- package/dist/patterns/languages/en/repeat.d.ts.map +1 -0
- package/dist/patterns/languages/en/set.d.ts +23 -0
- package/dist/patterns/languages/en/set.d.ts.map +1 -0
- package/dist/patterns/languages/en/swap.d.ts +19 -0
- package/dist/patterns/languages/en/swap.d.ts.map +1 -0
- package/dist/patterns/languages/en/temporal.d.ts +24 -0
- package/dist/patterns/languages/en/temporal.d.ts.map +1 -0
- package/dist/patterns/put/ar.d.ts +12 -0
- package/dist/patterns/put/ar.d.ts.map +1 -0
- package/dist/patterns/put/bn.d.ts +8 -0
- package/dist/patterns/put/bn.d.ts.map +1 -0
- package/dist/patterns/put/en.d.ts +11 -0
- package/dist/patterns/put/en.d.ts.map +1 -0
- package/dist/patterns/put/es.d.ts +11 -0
- package/dist/patterns/put/es.d.ts.map +1 -0
- package/dist/patterns/put/hi.d.ts +8 -0
- package/dist/patterns/put/hi.d.ts.map +1 -0
- package/dist/patterns/put/id.d.ts +15 -0
- package/dist/patterns/put/id.d.ts.map +1 -0
- package/dist/patterns/put/index.d.ts +33 -0
- package/dist/patterns/put/index.d.ts.map +1 -0
- package/dist/patterns/put/it.d.ts +11 -0
- package/dist/patterns/put/it.d.ts.map +1 -0
- package/dist/patterns/put/ja.d.ts +12 -0
- package/dist/patterns/put/ja.d.ts.map +1 -0
- package/dist/patterns/put/ko.d.ts +12 -0
- package/dist/patterns/put/ko.d.ts.map +1 -0
- package/dist/patterns/put/pl.d.ts +12 -0
- package/dist/patterns/put/pl.d.ts.map +1 -0
- package/dist/patterns/put/ru.d.ts +12 -0
- package/dist/patterns/put/ru.d.ts.map +1 -0
- package/dist/patterns/put/th.d.ts +8 -0
- package/dist/patterns/put/th.d.ts.map +1 -0
- package/dist/patterns/put/tr.d.ts +12 -0
- package/dist/patterns/put/tr.d.ts.map +1 -0
- package/dist/patterns/put/uk.d.ts +12 -0
- package/dist/patterns/put/uk.d.ts.map +1 -0
- package/dist/patterns/put/vi.d.ts +11 -0
- package/dist/patterns/put/vi.d.ts.map +1 -0
- package/dist/patterns/put/zh.d.ts +12 -0
- package/dist/patterns/put/zh.d.ts.map +1 -0
- package/dist/patterns/registry.d.ts +53 -0
- package/dist/patterns/registry.d.ts.map +1 -0
- package/dist/patterns/remove/ar.d.ts +12 -0
- package/dist/patterns/remove/ar.d.ts.map +1 -0
- package/dist/patterns/remove/bn.d.ts +8 -0
- package/dist/patterns/remove/bn.d.ts.map +1 -0
- package/dist/patterns/remove/hi.d.ts +8 -0
- package/dist/patterns/remove/hi.d.ts.map +1 -0
- package/dist/patterns/remove/index.d.ts +31 -0
- package/dist/patterns/remove/index.d.ts.map +1 -0
- package/dist/patterns/remove/it.d.ts +11 -0
- package/dist/patterns/remove/it.d.ts.map +1 -0
- package/dist/patterns/remove/ja.d.ts +12 -0
- package/dist/patterns/remove/ja.d.ts.map +1 -0
- package/dist/patterns/remove/ko.d.ts +12 -0
- package/dist/patterns/remove/ko.d.ts.map +1 -0
- package/dist/patterns/remove/pl.d.ts +12 -0
- package/dist/patterns/remove/pl.d.ts.map +1 -0
- package/dist/patterns/remove/qu.d.ts +9 -0
- package/dist/patterns/remove/qu.d.ts.map +1 -0
- package/dist/patterns/remove/ru.d.ts +12 -0
- package/dist/patterns/remove/ru.d.ts.map +1 -0
- package/dist/patterns/remove/th.d.ts +8 -0
- package/dist/patterns/remove/th.d.ts.map +1 -0
- package/dist/patterns/remove/tr.d.ts +12 -0
- package/dist/patterns/remove/tr.d.ts.map +1 -0
- package/dist/patterns/remove/uk.d.ts +12 -0
- package/dist/patterns/remove/uk.d.ts.map +1 -0
- package/dist/patterns/remove/vi.d.ts +11 -0
- package/dist/patterns/remove/vi.d.ts.map +1 -0
- package/dist/patterns/remove/zh.d.ts +12 -0
- package/dist/patterns/remove/zh.d.ts.map +1 -0
- package/dist/patterns/set/ar.d.ts +12 -0
- package/dist/patterns/set/ar.d.ts.map +1 -0
- package/dist/patterns/set/bn.d.ts +8 -0
- package/dist/patterns/set/bn.d.ts.map +1 -0
- package/dist/patterns/set/de.d.ts +12 -0
- package/dist/patterns/set/de.d.ts.map +1 -0
- package/dist/patterns/set/es.d.ts +12 -0
- package/dist/patterns/set/es.d.ts.map +1 -0
- package/dist/patterns/set/fr.d.ts +12 -0
- package/dist/patterns/set/fr.d.ts.map +1 -0
- package/dist/patterns/set/hi.d.ts +8 -0
- package/dist/patterns/set/hi.d.ts.map +1 -0
- package/dist/patterns/set/id.d.ts +12 -0
- package/dist/patterns/set/id.d.ts.map +1 -0
- package/dist/patterns/set/index.d.ts +35 -0
- package/dist/patterns/set/index.d.ts.map +1 -0
- package/dist/patterns/set/it.d.ts +11 -0
- package/dist/patterns/set/it.d.ts.map +1 -0
- package/dist/patterns/set/ja.d.ts +12 -0
- package/dist/patterns/set/ja.d.ts.map +1 -0
- package/dist/patterns/set/ko.d.ts +12 -0
- package/dist/patterns/set/ko.d.ts.map +1 -0
- package/dist/patterns/set/pl.d.ts +12 -0
- package/dist/patterns/set/pl.d.ts.map +1 -0
- package/dist/patterns/set/pt.d.ts +12 -0
- package/dist/patterns/set/pt.d.ts.map +1 -0
- package/dist/patterns/set/ru.d.ts +12 -0
- package/dist/patterns/set/ru.d.ts.map +1 -0
- package/dist/patterns/set/th.d.ts +8 -0
- package/dist/patterns/set/th.d.ts.map +1 -0
- package/dist/patterns/set/tr.d.ts +12 -0
- package/dist/patterns/set/tr.d.ts.map +1 -0
- package/dist/patterns/set/uk.d.ts +12 -0
- package/dist/patterns/set/uk.d.ts.map +1 -0
- package/dist/patterns/set/vi.d.ts +11 -0
- package/dist/patterns/set/vi.d.ts.map +1 -0
- package/dist/patterns/set/zh.d.ts +12 -0
- package/dist/patterns/set/zh.d.ts.map +1 -0
- package/dist/patterns/show/ar.d.ts +12 -0
- package/dist/patterns/show/ar.d.ts.map +1 -0
- package/dist/patterns/show/bn.d.ts +8 -0
- package/dist/patterns/show/bn.d.ts.map +1 -0
- package/dist/patterns/show/de.d.ts +12 -0
- package/dist/patterns/show/de.d.ts.map +1 -0
- package/dist/patterns/show/fr.d.ts +12 -0
- package/dist/patterns/show/fr.d.ts.map +1 -0
- package/dist/patterns/show/hi.d.ts +8 -0
- package/dist/patterns/show/hi.d.ts.map +1 -0
- package/dist/patterns/show/index.d.ts +32 -0
- package/dist/patterns/show/index.d.ts.map +1 -0
- package/dist/patterns/show/it.d.ts +11 -0
- package/dist/patterns/show/it.d.ts.map +1 -0
- package/dist/patterns/show/ja.d.ts +12 -0
- package/dist/patterns/show/ja.d.ts.map +1 -0
- package/dist/patterns/show/ko.d.ts +12 -0
- package/dist/patterns/show/ko.d.ts.map +1 -0
- package/dist/patterns/show/pl.d.ts +12 -0
- package/dist/patterns/show/pl.d.ts.map +1 -0
- package/dist/patterns/show/ru.d.ts +12 -0
- package/dist/patterns/show/ru.d.ts.map +1 -0
- package/dist/patterns/show/th.d.ts +8 -0
- package/dist/patterns/show/th.d.ts.map +1 -0
- package/dist/patterns/show/tr.d.ts +12 -0
- package/dist/patterns/show/tr.d.ts.map +1 -0
- package/dist/patterns/show/uk.d.ts +12 -0
- package/dist/patterns/show/uk.d.ts.map +1 -0
- package/dist/patterns/show/vi.d.ts +11 -0
- package/dist/patterns/show/vi.d.ts.map +1 -0
- package/dist/patterns/show/zh.d.ts +12 -0
- package/dist/patterns/show/zh.d.ts.map +1 -0
- package/dist/patterns/take/ar.d.ts +12 -0
- package/dist/patterns/take/ar.d.ts.map +1 -0
- package/dist/patterns/take/index.d.ts +18 -0
- package/dist/patterns/take/index.d.ts.map +1 -0
- package/dist/patterns/toggle/ar.d.ts +12 -0
- package/dist/patterns/toggle/ar.d.ts.map +1 -0
- package/dist/patterns/toggle/bn.d.ts +8 -0
- package/dist/patterns/toggle/bn.d.ts.map +1 -0
- package/dist/patterns/toggle/en.d.ts +11 -0
- package/dist/patterns/toggle/en.d.ts.map +1 -0
- package/dist/patterns/toggle/es.d.ts +11 -0
- package/dist/patterns/toggle/es.d.ts.map +1 -0
- package/dist/patterns/toggle/hi.d.ts +9 -0
- package/dist/patterns/toggle/hi.d.ts.map +1 -0
- package/dist/patterns/toggle/index.d.ts +33 -0
- package/dist/patterns/toggle/index.d.ts.map +1 -0
- package/dist/patterns/toggle/it.d.ts +11 -0
- package/dist/patterns/toggle/it.d.ts.map +1 -0
- package/dist/patterns/toggle/ja.d.ts +12 -0
- package/dist/patterns/toggle/ja.d.ts.map +1 -0
- package/dist/patterns/toggle/ko.d.ts +12 -0
- package/dist/patterns/toggle/ko.d.ts.map +1 -0
- package/dist/patterns/toggle/pl.d.ts +12 -0
- package/dist/patterns/toggle/pl.d.ts.map +1 -0
- package/dist/patterns/toggle/qu.d.ts +9 -0
- package/dist/patterns/toggle/qu.d.ts.map +1 -0
- package/dist/patterns/toggle/ru.d.ts +12 -0
- package/dist/patterns/toggle/ru.d.ts.map +1 -0
- package/dist/patterns/toggle/th.d.ts +9 -0
- package/dist/patterns/toggle/th.d.ts.map +1 -0
- package/dist/patterns/toggle/tr.d.ts +12 -0
- package/dist/patterns/toggle/tr.d.ts.map +1 -0
- package/dist/patterns/toggle/uk.d.ts +12 -0
- package/dist/patterns/toggle/uk.d.ts.map +1 -0
- package/dist/patterns/toggle/vi.d.ts +11 -0
- package/dist/patterns/toggle/vi.d.ts.map +1 -0
- package/dist/patterns/toggle/zh.d.ts +11 -0
- package/dist/patterns/toggle/zh.d.ts.map +1 -0
- package/dist/public-api.d.ts +190 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/registry.d.ts +225 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/tokenizers/arabic.d.ts +67 -0
- package/dist/tokenizers/arabic.d.ts.map +1 -0
- package/dist/tokenizers/base-tokenizer.d.ts +240 -0
- package/dist/tokenizers/base-tokenizer.d.ts.map +1 -0
- package/dist/tokenizers/base.d.ts +14 -0
- package/dist/tokenizers/base.d.ts.map +1 -0
- package/dist/tokenizers/bengali.d.ts +22 -0
- package/dist/tokenizers/bengali.d.ts.map +1 -0
- package/dist/tokenizers/char-classifiers.d.ts +56 -0
- package/dist/tokenizers/char-classifiers.d.ts.map +1 -0
- package/dist/tokenizers/chinese.d.ts +47 -0
- package/dist/tokenizers/chinese.d.ts.map +1 -0
- package/dist/tokenizers/english.d.ts +34 -0
- package/dist/tokenizers/english.d.ts.map +1 -0
- package/dist/tokenizers/extractors.d.ts +61 -0
- package/dist/tokenizers/extractors.d.ts.map +1 -0
- package/dist/tokenizers/french.d.ts +26 -0
- package/dist/tokenizers/french.d.ts.map +1 -0
- package/dist/tokenizers/german.d.ts +27 -0
- package/dist/tokenizers/german.d.ts.map +1 -0
- package/dist/tokenizers/he.d.ts +58 -0
- package/dist/tokenizers/he.d.ts.map +1 -0
- package/dist/tokenizers/hindi.d.ts +25 -0
- package/dist/tokenizers/hindi.d.ts.map +1 -0
- package/dist/tokenizers/index.d.ts +64 -0
- package/dist/tokenizers/index.d.ts.map +1 -0
- package/dist/tokenizers/indonesian.d.ts +24 -0
- package/dist/tokenizers/indonesian.d.ts.map +1 -0
- package/dist/tokenizers/italian.d.ts +41 -0
- package/dist/tokenizers/italian.d.ts.map +1 -0
- package/dist/tokenizers/japanese.d.ts +42 -0
- package/dist/tokenizers/japanese.d.ts.map +1 -0
- package/dist/tokenizers/korean.d.ts +47 -0
- package/dist/tokenizers/korean.d.ts.map +1 -0
- package/dist/tokenizers/morphology/arabic-normalizer.d.ts +37 -0
- package/dist/tokenizers/morphology/arabic-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/french-normalizer.d.ts +46 -0
- package/dist/tokenizers/morphology/french-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/german-normalizer.d.ts +55 -0
- package/dist/tokenizers/morphology/german-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/index.d.ts +20 -0
- package/dist/tokenizers/morphology/index.d.ts.map +1 -0
- package/dist/tokenizers/morphology/italian-normalizer.d.ts +52 -0
- package/dist/tokenizers/morphology/italian-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/japanese-normalizer.d.ts +43 -0
- package/dist/tokenizers/morphology/japanese-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/korean-normalizer.d.ts +45 -0
- package/dist/tokenizers/morphology/korean-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/polish-normalizer.d.ts +61 -0
- package/dist/tokenizers/morphology/polish-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/portuguese-normalizer.d.ts +51 -0
- package/dist/tokenizers/morphology/portuguese-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/russian-normalizer.d.ts +72 -0
- package/dist/tokenizers/morphology/russian-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/spanish-normalizer.d.ts +49 -0
- package/dist/tokenizers/morphology/spanish-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/turkish-normalizer.d.ts +52 -0
- package/dist/tokenizers/morphology/turkish-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/morphology/types.d.ts +110 -0
- package/dist/tokenizers/morphology/types.d.ts.map +1 -0
- package/dist/tokenizers/morphology/ukrainian-normalizer.d.ts +76 -0
- package/dist/tokenizers/morphology/ukrainian-normalizer.d.ts.map +1 -0
- package/dist/tokenizers/ms.d.ts +22 -0
- package/dist/tokenizers/ms.d.ts.map +1 -0
- package/dist/tokenizers/polish.d.ts +25 -0
- package/dist/tokenizers/polish.d.ts.map +1 -0
- package/dist/tokenizers/portuguese.d.ts +26 -0
- package/dist/tokenizers/portuguese.d.ts.map +1 -0
- package/dist/tokenizers/quechua.d.ts +36 -0
- package/dist/tokenizers/quechua.d.ts.map +1 -0
- package/dist/tokenizers/russian.d.ts +25 -0
- package/dist/tokenizers/russian.d.ts.map +1 -0
- package/dist/tokenizers/spanish.d.ts +41 -0
- package/dist/tokenizers/spanish.d.ts.map +1 -0
- package/dist/tokenizers/swahili.d.ts +24 -0
- package/dist/tokenizers/swahili.d.ts.map +1 -0
- package/dist/tokenizers/thai.d.ts +24 -0
- package/dist/tokenizers/thai.d.ts.map +1 -0
- package/dist/tokenizers/tl.d.ts +22 -0
- package/dist/tokenizers/tl.d.ts.map +1 -0
- package/dist/tokenizers/token-utils.d.ts +97 -0
- package/dist/tokenizers/token-utils.d.ts.map +1 -0
- package/dist/tokenizers/turkish.d.ts +42 -0
- package/dist/tokenizers/turkish.d.ts.map +1 -0
- package/dist/tokenizers/ukrainian.d.ts +25 -0
- package/dist/tokenizers/ukrainian.d.ts.map +1 -0
- package/dist/tokenizers/vietnamese.d.ts +47 -0
- package/dist/tokenizers/vietnamese.d.ts.map +1 -0
- package/dist/types/grammar-types.d.ts +224 -0
- package/dist/types/grammar-types.d.ts.map +1 -0
- package/dist/types/unified-profile.d.ts +167 -0
- package/dist/types/unified-profile.d.ts.map +1 -0
- package/dist/types.d.ts +401 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/confidence-calculator.d.ts +43 -0
- package/dist/utils/confidence-calculator.d.ts.map +1 -0
- package/dist/validators/command-validator.d.ts +83 -0
- package/dist/validators/command-validator.d.ts.map +1 -0
- package/dist/validators/index.d.ts +7 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/package.json +86 -6
- package/src/ast-builder/command-mappers.ts +9 -1
- package/src/ast-builder/expression-parser/parser.ts +13 -2
- package/src/ast-builder/index.ts +20 -6
- package/src/browser-bn.ts +162 -0
- package/src/browser-east-asian.ts +1 -1
- package/src/browser-hi.ts +162 -0
- package/src/browser-it.ts +162 -0
- package/src/browser-ms.ts +162 -0
- package/src/browser-pl.ts +162 -0
- package/src/browser-priority.ts +1 -1
- package/src/browser-ru.ts +162 -0
- package/src/browser-th.ts +162 -0
- package/src/browser-tl.ts +162 -0
- package/src/browser-uk.ts +162 -0
- package/src/browser-vi.ts +162 -0
- package/src/browser-western.ts +1 -1
- package/src/core-bridge.ts +43 -16
- package/src/core.ts +13 -0
- package/src/explicit/parser.ts +4 -2
- package/src/explicit/renderer.ts +1 -1
- package/src/generators/command-schemas.ts +214 -2
- package/src/generators/event-handlers-sov.ts +686 -0
- package/src/generators/event-handlers-vso.ts +489 -0
- package/src/generators/pattern-generator.ts +93 -736
- package/src/generators/profiles/arabic.ts +11 -1
- package/src/generators/profiles/bengali.ts +6 -0
- package/src/generators/profiles/chinese.ts +6 -0
- package/src/generators/profiles/english.ts +6 -0
- package/src/generators/profiles/french.ts +6 -0
- package/src/generators/profiles/german.ts +6 -0
- package/src/generators/profiles/hebrew.ts +6 -0
- package/src/generators/profiles/hindi.ts +6 -0
- package/src/generators/profiles/indonesian.ts +6 -0
- package/src/generators/profiles/italian.ts +6 -0
- package/src/generators/profiles/japanese.ts +6 -0
- package/src/generators/profiles/korean.ts +6 -0
- package/src/generators/profiles/ms.ts +6 -0
- package/src/generators/profiles/polish.ts +6 -0
- package/src/generators/profiles/portuguese.ts +6 -0
- package/src/generators/profiles/quechua.ts +35 -13
- package/src/generators/profiles/russian.ts +6 -0
- package/src/generators/profiles/spanish.ts +6 -0
- package/src/generators/profiles/spanishMexico.ts +6 -0
- package/src/generators/profiles/swahili.ts +14 -3
- package/src/generators/profiles/thai.ts +6 -0
- package/src/generators/profiles/tl.ts +22 -9
- package/src/generators/profiles/turkish.ts +7 -1
- package/src/generators/profiles/ukrainian.ts +6 -0
- package/src/generators/profiles/vietnamese.ts +6 -0
- package/src/generators/schema-validator.ts +8 -3
- package/src/index.ts +54 -0
- package/src/interchange/from-semantic.ts +440 -0
- package/src/interchange/index.ts +26 -0
- package/src/interchange/types.ts +186 -0
- package/src/parser/pattern-matcher.ts +65 -15
- package/src/parser/semantic-parser.ts +850 -8
- package/src/patterns/add/index.ts +1 -9
- package/src/patterns/builders.ts +2 -2
- package/src/patterns/decrement/index.ts +1 -9
- package/src/patterns/event-handler/shared.ts +30 -0
- package/src/patterns/event-handler/tl.ts +39 -19
- package/src/patterns/get/index.ts +1 -9
- package/src/patterns/hide/index.ts +1 -9
- package/src/patterns/increment/index.ts +1 -9
- package/src/patterns/put/index.ts +1 -9
- package/src/patterns/registry.ts +2 -2
- package/src/patterns/remove/index.ts +1 -9
- package/src/patterns/set/index.ts +1 -9
- package/src/patterns/show/index.ts +1 -9
- package/src/patterns/toggle/index.ts +1 -9
- package/src/tokenizers/arabic.ts +14 -1
- package/src/tokenizers/base-tokenizer.ts +644 -0
- package/src/tokenizers/base.ts +39 -1297
- package/src/tokenizers/bengali.ts +37 -10
- package/src/tokenizers/char-classifiers.ts +79 -0
- package/src/tokenizers/chinese.ts +7 -0
- package/src/tokenizers/english.ts +8 -1
- package/src/tokenizers/extractors.ts +452 -0
- package/src/tokenizers/french.ts +16 -1
- package/src/tokenizers/german.ts +16 -1
- package/src/tokenizers/he.ts +14 -1
- package/src/tokenizers/hindi.ts +14 -1
- package/src/tokenizers/indonesian.ts +14 -1
- package/src/tokenizers/italian.ts +14 -1
- package/src/tokenizers/japanese.ts +14 -1
- package/src/tokenizers/korean.ts +19 -1
- package/src/tokenizers/morphology/index.ts +17 -0
- package/src/tokenizers/morphology/polish-normalizer.ts +147 -131
- package/src/tokenizers/morphology/russian-normalizer.ts +397 -0
- package/src/tokenizers/morphology/ukrainian-normalizer.ts +366 -0
- package/src/tokenizers/ms.ts +14 -1
- package/src/tokenizers/polish.ts +16 -1
- package/src/tokenizers/portuguese.ts +16 -1
- package/src/tokenizers/quechua.ts +30 -1
- package/src/tokenizers/russian.ts +16 -1
- package/src/tokenizers/spanish.ts +14 -1
- package/src/tokenizers/swahili.ts +14 -1
- package/src/tokenizers/thai.ts +14 -1
- package/src/tokenizers/tl.ts +14 -1
- package/src/tokenizers/token-utils.ts +205 -0
- package/src/tokenizers/turkish.ts +21 -2
- package/src/tokenizers/ukrainian.ts +16 -1
- package/src/tokenizers/vietnamese.ts +7 -0
- package/src/types.ts +41 -2
- package/src/validators/command-validator.ts +17 -40
- package/dist/index.d.cts +0 -3470
- package/dist/types-BY3Id07j.d.ts +0 -615
- package/src/bridge.ts +0 -275
- package/src/generators/event-handler-generator.ts +0 -115
- package/src/patterns/add/ms.ts +0 -30
- package/src/patterns/add/tl.ts +0 -30
- package/src/patterns/decrement/ms.ts +0 -30
- package/src/patterns/decrement/tl.ts +0 -30
- package/src/patterns/get/ms.ts +0 -30
- package/src/patterns/get/tl.ts +0 -30
- package/src/patterns/hide/ms.ts +0 -30
- package/src/patterns/hide/tl.ts +0 -30
- package/src/patterns/increment/ms.ts +0 -30
- package/src/patterns/increment/tl.ts +0 -30
- package/src/patterns/put/ms.ts +0 -30
- package/src/patterns/put/tl.ts +0 -30
- package/src/patterns/remove/ms.ts +0 -30
- package/src/patterns/remove/tl.ts +0 -30
- package/src/patterns/set/ms.ts +0 -30
- package/src/patterns/set/tl.ts +0 -30
- package/src/patterns/show/ms.ts +0 -30
- package/src/patterns/show/tl.ts +0 -30
- package/src/patterns/toggle/ms.ts +0 -30
- package/src/patterns/toggle/tl.ts +0 -30
|
@@ -15,15 +15,23 @@ import type {
|
|
|
15
15
|
LanguagePattern,
|
|
16
16
|
LanguageToken,
|
|
17
17
|
} from '../types';
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
createCommandNode,
|
|
20
|
+
createEventHandler,
|
|
21
|
+
createCompoundNode,
|
|
22
|
+
createSelector,
|
|
23
|
+
createLiteral,
|
|
24
|
+
createReference,
|
|
25
|
+
} from '../types';
|
|
19
26
|
import {
|
|
20
27
|
tokenize as tokenizeInternal,
|
|
21
28
|
getSupportedLanguages as getTokenizerLanguages,
|
|
22
29
|
TokenStreamImpl,
|
|
23
30
|
} from '../tokenizers';
|
|
24
31
|
// Import from registry for tree-shaking (registry uses directly-registered patterns first)
|
|
25
|
-
import { getPatternsForLanguage } from '../registry';
|
|
32
|
+
import { getPatternsForLanguage, tryGetProfile } from '../registry';
|
|
26
33
|
import { patternMatcher } from './pattern-matcher';
|
|
34
|
+
import { eventNameTranslations } from '../patterns/event-handler/shared';
|
|
27
35
|
import { render as renderExplicitFn } from '../explicit/renderer';
|
|
28
36
|
import { parseExplicit as parseExplicitFn } from '../explicit/parser';
|
|
29
37
|
|
|
@@ -36,8 +44,12 @@ export class SemanticParserImpl implements ISemanticParser {
|
|
|
36
44
|
* Parse input in the specified language to a semantic node.
|
|
37
45
|
*/
|
|
38
46
|
parse(input: string, language: string): SemanticNode {
|
|
47
|
+
// Extract standalone event modifiers (once, debounced, throttled) from input
|
|
48
|
+
const { modifiers, remainingInput } = this.extractStandaloneModifiers(input, language);
|
|
49
|
+
const parseInput = remainingInput || input;
|
|
50
|
+
|
|
39
51
|
// Tokenize the input
|
|
40
|
-
const tokens = tokenizeInternal(
|
|
52
|
+
const tokens = tokenizeInternal(parseInput, language);
|
|
41
53
|
|
|
42
54
|
// Get patterns for this language
|
|
43
55
|
const patterns = getPatternsForLanguage(language);
|
|
@@ -54,7 +66,8 @@ export class SemanticParserImpl implements ISemanticParser {
|
|
|
54
66
|
const eventMatch = patternMatcher.matchBest(tokens, eventPatterns);
|
|
55
67
|
|
|
56
68
|
if (eventMatch) {
|
|
57
|
-
|
|
69
|
+
const handler = this.buildEventHandler(eventMatch, tokens, language);
|
|
70
|
+
return modifiers ? this.applyModifiers(handler, modifiers) : handler;
|
|
58
71
|
}
|
|
59
72
|
|
|
60
73
|
// Try command patterns
|
|
@@ -65,7 +78,25 @@ export class SemanticParserImpl implements ISemanticParser {
|
|
|
65
78
|
return this.buildCommand(commandMatch, language);
|
|
66
79
|
}
|
|
67
80
|
|
|
68
|
-
|
|
81
|
+
// Try SOV event trigger extraction: detect embedded event keywords
|
|
82
|
+
// (e.g., "クリック で" in JA, "클릭 에" in KO, "tıklama de" in TR)
|
|
83
|
+
// and extract them to parse the remaining tokens as command body
|
|
84
|
+
const sovResult = this.trySOVEventExtraction(parseInput, language, sortedPatterns);
|
|
85
|
+
if (sovResult) {
|
|
86
|
+
return modifiers
|
|
87
|
+
? this.applyModifiers(sovResult as EventHandlerSemanticNode, modifiers)
|
|
88
|
+
: sovResult;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Fallback: try parsing as multi-command compound (no event wrapper).
|
|
92
|
+
// This handles patterns like "put X into Y then set Z to W" that have
|
|
93
|
+
// then-keywords but no event trigger (e.g., custom events not in KNOWN_EVENTS).
|
|
94
|
+
const compoundResult = this.tryCompoundCommandParsing(tokens, commandPatterns, language);
|
|
95
|
+
if (compoundResult) {
|
|
96
|
+
return compoundResult;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
throw new Error(`Could not parse input in ${language}: ${parseInput}`);
|
|
69
100
|
}
|
|
70
101
|
|
|
71
102
|
/**
|
|
@@ -131,6 +162,18 @@ export class SemanticParserImpl implements ISemanticParser {
|
|
|
131
162
|
// Extract event modifiers (.once, .debounce(), .throttle(), etc.)
|
|
132
163
|
const eventModifiers = patternMatcher.extractEventModifiers(tokens);
|
|
133
164
|
|
|
165
|
+
// Extract "or" conjunction events (e.g., "click or keydown")
|
|
166
|
+
// Combines into event value string for AST builder compatibility
|
|
167
|
+
const additionalEvents = this.extractOrConjunctionEvents(tokens, language);
|
|
168
|
+
let resolvedEventValue = eventValue;
|
|
169
|
+
if (additionalEvents.length > 0 && eventValue.type === 'literal') {
|
|
170
|
+
const allEvents = [
|
|
171
|
+
String(eventValue.value),
|
|
172
|
+
...additionalEvents.map(e => String('value' in e ? e.value : '')),
|
|
173
|
+
];
|
|
174
|
+
resolvedEventValue = { type: 'literal', value: allEvents.join(' or ') };
|
|
175
|
+
}
|
|
176
|
+
|
|
134
177
|
let body: SemanticNode[];
|
|
135
178
|
|
|
136
179
|
// Check if pattern captured an action (grammar-transformed patterns)
|
|
@@ -194,7 +237,7 @@ export class SemanticParserImpl implements ISemanticParser {
|
|
|
194
237
|
body = this.parseBodyWithClauses(tokens, commandPatterns, language);
|
|
195
238
|
}
|
|
196
239
|
|
|
197
|
-
return createEventHandler(
|
|
240
|
+
return createEventHandler(resolvedEventValue, body, eventModifiers, {
|
|
198
241
|
sourceLanguage: language,
|
|
199
242
|
patternId: match.pattern.id,
|
|
200
243
|
confidence: match.confidence,
|
|
@@ -304,9 +347,348 @@ export class SemanticParserImpl implements ISemanticParser {
|
|
|
304
347
|
}
|
|
305
348
|
}
|
|
306
349
|
|
|
350
|
+
// If pattern matching produced nothing, try verb-anchored SOV parsing.
|
|
351
|
+
// The grammar transformer often puts the verb BETWEEN roles for two-role commands:
|
|
352
|
+
// e.g., "destination を verb patient に" instead of "destination を patient に verb"
|
|
353
|
+
// Pattern matching fails because it expects strict SOV order (verb at end).
|
|
354
|
+
if (commands.length === 0) {
|
|
355
|
+
const sovCommands = this.parseSOVClauseByVerbAnchoring(clauseTokens, language);
|
|
356
|
+
if (sovCommands.length > 0) {
|
|
357
|
+
return sovCommands;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return commands;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// ==========================================================================
|
|
365
|
+
// SOV Verb-Anchored Clause Parsing
|
|
366
|
+
// ==========================================================================
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Build a lookup from native verb keywords to action names for a language profile.
|
|
370
|
+
*/
|
|
371
|
+
private static buildVerbLookup(profile: {
|
|
372
|
+
keywords: Record<string, { primary: string; alternatives?: string[]; normalized?: string }>;
|
|
373
|
+
}): Map<string, string> {
|
|
374
|
+
const lookup = new Map<string, string>();
|
|
375
|
+
for (const [action, kw] of Object.entries(profile.keywords)) {
|
|
376
|
+
// Skip non-command keywords (on, if, else, etc.)
|
|
377
|
+
if (
|
|
378
|
+
['on', 'if', 'else', 'when', 'where', 'while', 'for', 'end', 'then', 'and'].includes(action)
|
|
379
|
+
) {
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
lookup.set(kw.primary.toLowerCase(), action);
|
|
383
|
+
if (kw.alternatives) {
|
|
384
|
+
for (const alt of kw.alternatives) {
|
|
385
|
+
lookup.set(alt.toLowerCase(), action);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return lookup;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Build a lookup from role marker strings to role names.
|
|
394
|
+
*/
|
|
395
|
+
private static buildMarkerToRoleLookup(profile: {
|
|
396
|
+
roleMarkers: Record<string, { primary: string; alternatives?: string[] }>;
|
|
397
|
+
}): Map<string, string> {
|
|
398
|
+
const lookup = new Map<string, string>();
|
|
399
|
+
for (const [role, marker] of Object.entries(profile.roleMarkers)) {
|
|
400
|
+
if (!marker) continue;
|
|
401
|
+
lookup.set(marker.primary, role);
|
|
402
|
+
if (marker.alternatives) {
|
|
403
|
+
for (const alt of marker.alternatives) {
|
|
404
|
+
// Avoid overwriting more specific roles with generic ones
|
|
405
|
+
if (!lookup.has(alt)) {
|
|
406
|
+
lookup.set(alt, role);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return lookup;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Parse an SOV clause by finding command verbs and extracting roles from surrounding tokens.
|
|
416
|
+
*
|
|
417
|
+
* The grammar transformer often produces "verb-in-middle" order for two-role commands:
|
|
418
|
+
* "[role1] [marker1] [verb] [role2] [marker2]"
|
|
419
|
+
*
|
|
420
|
+
* This method:
|
|
421
|
+
* 1. Scans for recognized command verbs in the token stream
|
|
422
|
+
* 2. For each verb, extracts pre-verb and post-verb tokens as roles
|
|
423
|
+
* 3. Uses marker tokens to determine which semantic role each value belongs to
|
|
424
|
+
*/
|
|
425
|
+
private parseSOVClauseByVerbAnchoring(
|
|
426
|
+
clauseTokens: LanguageToken[],
|
|
427
|
+
language: string
|
|
428
|
+
): SemanticNode[] {
|
|
429
|
+
const profile = tryGetProfile(language);
|
|
430
|
+
if (!profile || profile.wordOrder !== 'SOV') return [];
|
|
431
|
+
|
|
432
|
+
const verbLookup = SemanticParserImpl.buildVerbLookup(profile);
|
|
433
|
+
const markerToRole = SemanticParserImpl.buildMarkerToRoleLookup(profile);
|
|
434
|
+
const commands: SemanticNode[] = [];
|
|
435
|
+
|
|
436
|
+
let pos = 0;
|
|
437
|
+
|
|
438
|
+
while (pos < clauseTokens.length) {
|
|
439
|
+
// Find the next verb token
|
|
440
|
+
let verbIdx = -1;
|
|
441
|
+
let verbAction = '';
|
|
442
|
+
|
|
443
|
+
for (let i = pos; i < clauseTokens.length; i++) {
|
|
444
|
+
const token = clauseTokens[i];
|
|
445
|
+
const byValue = verbLookup.get(token.value.toLowerCase());
|
|
446
|
+
const byNormalized = token.normalized
|
|
447
|
+
? verbLookup.get(token.normalized.toLowerCase())
|
|
448
|
+
: undefined;
|
|
449
|
+
const action = byValue || byNormalized;
|
|
450
|
+
|
|
451
|
+
if (action) {
|
|
452
|
+
verbIdx = i;
|
|
453
|
+
verbAction = action;
|
|
454
|
+
break;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
if (verbIdx === -1) break; // No more verbs found
|
|
459
|
+
|
|
460
|
+
// Tokens before verb = pre-verb arguments
|
|
461
|
+
const preVerbTokens = clauseTokens.slice(pos, verbIdx);
|
|
462
|
+
|
|
463
|
+
// Find end of this command: next verb, then-keyword, or end of tokens
|
|
464
|
+
let endIdx = clauseTokens.length;
|
|
465
|
+
for (let i = verbIdx + 1; i < clauseTokens.length; i++) {
|
|
466
|
+
const t = clauseTokens[i];
|
|
467
|
+
// Stop at then-keywords
|
|
468
|
+
if (t.kind === 'conjunction' || this.isThenKeyword(t.value, language)) {
|
|
469
|
+
endIdx = i;
|
|
470
|
+
break;
|
|
471
|
+
}
|
|
472
|
+
// Stop at the next verb (start of new command) — but only if preceded by a marker
|
|
473
|
+
// This prevents stopping at "value" tokens that happen to match a verb name
|
|
474
|
+
if (i > verbIdx + 1) {
|
|
475
|
+
const nextAction =
|
|
476
|
+
verbLookup.get(t.value.toLowerCase()) ||
|
|
477
|
+
(t.normalized ? verbLookup.get(t.normalized.toLowerCase()) : undefined);
|
|
478
|
+
if (nextAction) {
|
|
479
|
+
endIdx = i;
|
|
480
|
+
break;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
// Tokens after verb = post-verb arguments
|
|
486
|
+
const postVerbTokens = clauseTokens.slice(verbIdx + 1, endIdx);
|
|
487
|
+
|
|
488
|
+
// Extract roles from pre-verb and post-verb tokens using markers
|
|
489
|
+
const roles = this.extractRolesFromMarkedTokens(
|
|
490
|
+
preVerbTokens,
|
|
491
|
+
postVerbTokens,
|
|
492
|
+
markerToRole,
|
|
493
|
+
verbAction,
|
|
494
|
+
language
|
|
495
|
+
);
|
|
496
|
+
|
|
497
|
+
commands.push(
|
|
498
|
+
createCommandNode(verbAction as ActionType, roles, {
|
|
499
|
+
sourceLanguage: language,
|
|
500
|
+
confidence: 0.7,
|
|
501
|
+
})
|
|
502
|
+
);
|
|
503
|
+
|
|
504
|
+
pos = endIdx;
|
|
505
|
+
// Skip conjunction/then-keyword if present
|
|
506
|
+
if (pos < clauseTokens.length) {
|
|
507
|
+
const t = clauseTokens[pos];
|
|
508
|
+
if (t.kind === 'conjunction' || this.isThenKeyword(t.value, language)) {
|
|
509
|
+
pos++;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
307
514
|
return commands;
|
|
308
515
|
}
|
|
309
516
|
|
|
517
|
+
/**
|
|
518
|
+
* Extract semantic roles from pre-verb and post-verb token groups using marker analysis.
|
|
519
|
+
*
|
|
520
|
+
* Recognizes patterns like:
|
|
521
|
+
* pre-verb: [expr] [を] → patient (obj marker)
|
|
522
|
+
* post-verb: [expr] [に] → destination (to marker)
|
|
523
|
+
* pre-verb: [expr] [から] → source (from marker)
|
|
524
|
+
*/
|
|
525
|
+
private extractRolesFromMarkedTokens(
|
|
526
|
+
preVerbTokens: LanguageToken[],
|
|
527
|
+
postVerbTokens: LanguageToken[],
|
|
528
|
+
markerToRole: Map<string, string>,
|
|
529
|
+
action: string,
|
|
530
|
+
_language: string
|
|
531
|
+
): Record<string, SemanticValue> {
|
|
532
|
+
const roles: Record<string, SemanticValue> = {};
|
|
533
|
+
|
|
534
|
+
// Process a group of tokens: collect value tokens until a marker is found
|
|
535
|
+
const processGroup = (tokens: LanguageToken[]) => {
|
|
536
|
+
let valueTokens: LanguageToken[] = [];
|
|
537
|
+
|
|
538
|
+
for (const token of tokens) {
|
|
539
|
+
const role = markerToRole.get(token.value);
|
|
540
|
+
if (role && token.kind === 'particle' && valueTokens.length > 0) {
|
|
541
|
+
// This is a marker — assign the preceding value tokens to this role
|
|
542
|
+
const value = this.tokensToSemanticValue(valueTokens);
|
|
543
|
+
if (value) {
|
|
544
|
+
// Map the role name, avoiding overwrites of existing roles
|
|
545
|
+
const roleKey = this.mapRoleForCommand(role, action, roles);
|
|
546
|
+
if (roleKey) {
|
|
547
|
+
roles[roleKey] = value;
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
valueTokens = [];
|
|
551
|
+
} else {
|
|
552
|
+
valueTokens.push(token);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// Remaining tokens without a following marker
|
|
557
|
+
if (valueTokens.length > 0) {
|
|
558
|
+
const value = this.tokensToSemanticValue(valueTokens);
|
|
559
|
+
if (value) {
|
|
560
|
+
// Unmarked trailing tokens: assign based on what's missing
|
|
561
|
+
if (!roles.patient) {
|
|
562
|
+
roles.patient = value;
|
|
563
|
+
} else if (!roles.destination) {
|
|
564
|
+
roles.destination = value;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
};
|
|
569
|
+
|
|
570
|
+
processGroup(preVerbTokens);
|
|
571
|
+
processGroup(postVerbTokens);
|
|
572
|
+
|
|
573
|
+
return roles;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* Map a marker-derived role name to the appropriate semantic role for a command,
|
|
578
|
+
* handling cases where marker roles overlap (e.g., both patient and destination
|
|
579
|
+
* use similar particles in some languages).
|
|
580
|
+
*/
|
|
581
|
+
private mapRoleForCommand(
|
|
582
|
+
markerRole: string,
|
|
583
|
+
_action: string,
|
|
584
|
+
existingRoles: Record<string, SemanticValue>
|
|
585
|
+
): string | null {
|
|
586
|
+
// Direct mapping — if the role isn't taken yet, use it
|
|
587
|
+
if (!existingRoles[markerRole]) {
|
|
588
|
+
return markerRole;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
// If the marker role is already taken, try to assign to a related role
|
|
592
|
+
// For "set" and "put": patient marker (を/i) is the destination, dest marker (に/e) is the patient value
|
|
593
|
+
if (markerRole === 'patient' && !existingRoles.destination) {
|
|
594
|
+
return 'destination';
|
|
595
|
+
}
|
|
596
|
+
if (markerRole === 'destination' && !existingRoles.patient) {
|
|
597
|
+
return 'patient';
|
|
598
|
+
}
|
|
599
|
+
if (markerRole === 'source' && !existingRoles.source) {
|
|
600
|
+
return 'source';
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
return null; // Can't assign
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
/**
|
|
607
|
+
* Convert a sequence of tokens into a single SemanticValue.
|
|
608
|
+
*/
|
|
609
|
+
private tokensToSemanticValue(tokens: LanguageToken[]): SemanticValue | null {
|
|
610
|
+
if (tokens.length === 0) return null;
|
|
611
|
+
|
|
612
|
+
// Filter out noise tokens (whitespace, etc.)
|
|
613
|
+
const meaningful = tokens.filter(t => (t.kind as string) !== 'whitespace');
|
|
614
|
+
if (meaningful.length === 0) return null;
|
|
615
|
+
|
|
616
|
+
// Single token — use its type directly
|
|
617
|
+
if (meaningful.length === 1) {
|
|
618
|
+
return this.tokenToSemanticValue(meaningful[0]);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
// Multiple tokens — concatenate values and infer type from the first token
|
|
622
|
+
const combined = meaningful.map(t => t.value).join('');
|
|
623
|
+
const first = meaningful[0];
|
|
624
|
+
|
|
625
|
+
if (
|
|
626
|
+
first.kind === 'selector' ||
|
|
627
|
+
first.value.startsWith('#') ||
|
|
628
|
+
first.value.startsWith('.') ||
|
|
629
|
+
first.value.startsWith('@') ||
|
|
630
|
+
first.value.startsWith('*')
|
|
631
|
+
) {
|
|
632
|
+
return createSelector(combined);
|
|
633
|
+
}
|
|
634
|
+
if (first.kind === 'literal' || first.value.startsWith('"') || first.value.startsWith("'")) {
|
|
635
|
+
return createLiteral(combined);
|
|
636
|
+
}
|
|
637
|
+
if ((first.kind as string) === 'reference') {
|
|
638
|
+
return createReference(combined as 'me' | 'it' | 'you' | 'result');
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
return createLiteral(combined);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
/**
|
|
645
|
+
* Convert a single token to a SemanticValue.
|
|
646
|
+
*/
|
|
647
|
+
private tokenToSemanticValue(token: LanguageToken): SemanticValue {
|
|
648
|
+
const val = token.value;
|
|
649
|
+
|
|
650
|
+
// Selectors: #id, .class, @attr, *cssProperty
|
|
651
|
+
if (
|
|
652
|
+
token.kind === 'selector' ||
|
|
653
|
+
val.startsWith('#') ||
|
|
654
|
+
val.startsWith('.') ||
|
|
655
|
+
val.startsWith('@') ||
|
|
656
|
+
val.startsWith('*')
|
|
657
|
+
) {
|
|
658
|
+
return createSelector(val);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// String literals
|
|
662
|
+
if (val.startsWith('"') || val.startsWith("'")) {
|
|
663
|
+
return createLiteral(val);
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
// Numbers
|
|
667
|
+
if (/^-?\d+(\.\d+)?$/.test(val)) {
|
|
668
|
+
return createLiteral(parseFloat(val));
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
// Booleans (including translated forms)
|
|
672
|
+
if (val === 'true' || val === '真' || val === '참' || val === 'doğru') {
|
|
673
|
+
return createLiteral(true);
|
|
674
|
+
}
|
|
675
|
+
if (val === 'false' || val === '偽' || val === '거짓' || val === 'yanlış') {
|
|
676
|
+
return createLiteral(false);
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
// References: me, it, you (check normalized form)
|
|
680
|
+
const ref = token.normalized?.toLowerCase();
|
|
681
|
+
if (ref === 'me' || ref === 'it' || ref === 'you' || ref === 'result' || ref === 'body') {
|
|
682
|
+
return createReference(ref as 'me' | 'it' | 'you' | 'result');
|
|
683
|
+
}
|
|
684
|
+
if ((token.kind as string) === 'reference') {
|
|
685
|
+
return createReference((token.normalized as 'me' | 'it' | 'you') || 'me');
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
// Default to literal
|
|
689
|
+
return createLiteral(val);
|
|
690
|
+
}
|
|
691
|
+
|
|
310
692
|
/**
|
|
311
693
|
* Parse body commands with support for grammar-transformed patterns.
|
|
312
694
|
* Used after a grammar-transformed pattern with continuation marker.
|
|
@@ -390,6 +772,286 @@ export class SemanticParserImpl implements ISemanticParser {
|
|
|
390
772
|
return commands;
|
|
391
773
|
}
|
|
392
774
|
|
|
775
|
+
// ==========================================================================
|
|
776
|
+
// Multi-Command Compound Fallback
|
|
777
|
+
// ==========================================================================
|
|
778
|
+
|
|
779
|
+
/**
|
|
780
|
+
* Try parsing input as a multi-command compound (no event wrapper).
|
|
781
|
+
* Handles standalone command sequences separated by then-keywords.
|
|
782
|
+
* Used as a last resort when no event trigger is detected.
|
|
783
|
+
*/
|
|
784
|
+
private tryCompoundCommandParsing(
|
|
785
|
+
tokens: ReturnType<typeof tokenizeInternal>,
|
|
786
|
+
commandPatterns: LanguagePattern[],
|
|
787
|
+
language: string
|
|
788
|
+
): SemanticNode | null {
|
|
789
|
+
// Only try if the input contains then-keywords (otherwise single-command already tried)
|
|
790
|
+
const allTokens = tokens.tokens;
|
|
791
|
+
const hasThenKeyword = allTokens.some(
|
|
792
|
+
t =>
|
|
793
|
+
t.kind === 'conjunction' || (t.kind === 'keyword' && this.isThenKeyword(t.value, language))
|
|
794
|
+
);
|
|
795
|
+
if (!hasThenKeyword) return null;
|
|
796
|
+
|
|
797
|
+
// Reset token stream and parse using clause-based parsing
|
|
798
|
+
const freshStream = new TokenStreamImpl(allTokens as LanguageToken[], language);
|
|
799
|
+
const body = this.parseBodyWithClauses(freshStream, commandPatterns, language);
|
|
800
|
+
|
|
801
|
+
if (body.length === 0) return null;
|
|
802
|
+
|
|
803
|
+
// Return the compound node (or single command if only one clause parsed)
|
|
804
|
+
if (body.length === 1) {
|
|
805
|
+
return body[0];
|
|
806
|
+
}
|
|
807
|
+
return createCompoundNode(body, 'then', {
|
|
808
|
+
sourceLanguage: language,
|
|
809
|
+
confidence: 0.65,
|
|
810
|
+
});
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
// ==========================================================================
|
|
814
|
+
// SOV Event Trigger Extraction
|
|
815
|
+
// ==========================================================================
|
|
816
|
+
|
|
817
|
+
/**
|
|
818
|
+
* Known event names for detection (common DOM events).
|
|
819
|
+
*/
|
|
820
|
+
private static readonly KNOWN_EVENTS = new Set([
|
|
821
|
+
'click',
|
|
822
|
+
'dblclick',
|
|
823
|
+
'input',
|
|
824
|
+
'change',
|
|
825
|
+
'submit',
|
|
826
|
+
'keydown',
|
|
827
|
+
'keyup',
|
|
828
|
+
'keypress',
|
|
829
|
+
'mouseover',
|
|
830
|
+
'mouseout',
|
|
831
|
+
'mousedown',
|
|
832
|
+
'mouseup',
|
|
833
|
+
'focus',
|
|
834
|
+
'blur',
|
|
835
|
+
'load',
|
|
836
|
+
'scroll',
|
|
837
|
+
'resize',
|
|
838
|
+
'contextmenu',
|
|
839
|
+
]);
|
|
840
|
+
|
|
841
|
+
/**
|
|
842
|
+
* SOV event marker particles per language (postpositions that mark the event role).
|
|
843
|
+
* Korean has no event marker particle -- the event keyword stands alone.
|
|
844
|
+
*/
|
|
845
|
+
private static readonly SOV_EVENT_MARKERS: Record<string, Set<string>> = {
|
|
846
|
+
ja: new Set(['で']),
|
|
847
|
+
ko: new Set(), // Korean doesn't use event marker particles
|
|
848
|
+
tr: new Set(['de', 'da', 'te', 'ta']),
|
|
849
|
+
bn: new Set(['এ']),
|
|
850
|
+
qu: new Set(['pi']),
|
|
851
|
+
};
|
|
852
|
+
|
|
853
|
+
/**
|
|
854
|
+
* SOV source markers ("from" equivalents) and window tokens per language.
|
|
855
|
+
* Used to strip "from window/elsewhere" event modifiers.
|
|
856
|
+
*/
|
|
857
|
+
private static readonly SOV_SOURCE_MARKERS: Record<
|
|
858
|
+
string,
|
|
859
|
+
{ markers: Set<string>; windowTokens: Set<string> }
|
|
860
|
+
> = {
|
|
861
|
+
ja: {
|
|
862
|
+
markers: new Set(['から']),
|
|
863
|
+
windowTokens: new Set(['ウィンドウ', 'ドキュメント', 'window', 'document']),
|
|
864
|
+
},
|
|
865
|
+
ko: {
|
|
866
|
+
markers: new Set(['에서']),
|
|
867
|
+
windowTokens: new Set(['창', '윈도우', '문서', 'window', 'document']),
|
|
868
|
+
},
|
|
869
|
+
tr: {
|
|
870
|
+
markers: new Set(['den', 'dan', 'ten', 'tan']),
|
|
871
|
+
windowTokens: new Set(['pencere', 'belge', 'window', 'document']),
|
|
872
|
+
},
|
|
873
|
+
bn: {
|
|
874
|
+
markers: new Set(['থেকে', 'মধ্যে']),
|
|
875
|
+
windowTokens: new Set(['উইন্ডো', 'ডকুমেন্ট', 'window', 'document']),
|
|
876
|
+
},
|
|
877
|
+
qu: {
|
|
878
|
+
markers: new Set(['manta']),
|
|
879
|
+
windowTokens: new Set(['k_iri', 'ventana', 'window', 'document']),
|
|
880
|
+
},
|
|
881
|
+
};
|
|
882
|
+
|
|
883
|
+
/**
|
|
884
|
+
* Try to extract an embedded event trigger from SOV grammar-transformed text.
|
|
885
|
+
*
|
|
886
|
+
* SOV languages embed the event trigger within the sentence:
|
|
887
|
+
* JA: ".active を クリック で 切り替え" (patient event-marker action)
|
|
888
|
+
* KO: ".active 를 클릭 에 토글" (patient event-marker action)
|
|
889
|
+
* TR: ".active i tıklama de değiştir" (patient event-marker action)
|
|
890
|
+
*
|
|
891
|
+
* This method detects the [event_keyword] [event_particle] pair,
|
|
892
|
+
* removes those tokens, and parses the remaining tokens as command body.
|
|
893
|
+
*/
|
|
894
|
+
private trySOVEventExtraction(
|
|
895
|
+
input: string,
|
|
896
|
+
language: string,
|
|
897
|
+
patterns: LanguagePattern[]
|
|
898
|
+
): SemanticNode | null {
|
|
899
|
+
const eventMarkers = SemanticParserImpl.SOV_EVENT_MARKERS[language];
|
|
900
|
+
if (!eventMarkers) return null;
|
|
901
|
+
|
|
902
|
+
const tokens = tokenizeInternal(input, language);
|
|
903
|
+
const allTokens = tokens.tokens;
|
|
904
|
+
|
|
905
|
+
// Build a set of native event names for this language (from eventNameTranslations)
|
|
906
|
+
const langEvents = eventNameTranslations[language];
|
|
907
|
+
const nativeEventNames = new Set<string>();
|
|
908
|
+
if (langEvents) {
|
|
909
|
+
for (const native of Object.keys(langEvents)) {
|
|
910
|
+
nativeEventNames.add(native.toLowerCase());
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
// Source markers for "from window/elsewhere" stripping per language
|
|
915
|
+
const sourceMarkers = SemanticParserImpl.SOV_SOURCE_MARKERS[language];
|
|
916
|
+
|
|
917
|
+
// Scan for event keyword + optional event marker particle pattern
|
|
918
|
+
let eventIndex = -1;
|
|
919
|
+
let eventName = '';
|
|
920
|
+
let keyFilter = '';
|
|
921
|
+
let tokensToRemove = 1; // How many tokens to strip (1 = event only, 2 = event + marker)
|
|
922
|
+
|
|
923
|
+
for (let i = 0; i < allTokens.length; i++) {
|
|
924
|
+
const token = allTokens[i];
|
|
925
|
+
const tokenValue = token.value.toLowerCase();
|
|
926
|
+
|
|
927
|
+
// Strip bracket key-filter from event token value for matching
|
|
928
|
+
// e.g., "keydown[key==\"Escape\"]" → "keydown" (with filter extracted)
|
|
929
|
+
let bareEventValue = tokenValue;
|
|
930
|
+
let tokenKeyFilter = '';
|
|
931
|
+
const bracketIdx = tokenValue.indexOf('[');
|
|
932
|
+
if (bracketIdx > 0) {
|
|
933
|
+
bareEventValue = tokenValue.slice(0, bracketIdx);
|
|
934
|
+
tokenKeyFilter = token.value.slice(bracketIdx);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
// Check if this token is a known event name (by normalized value, native text, or bare value)
|
|
938
|
+
const normalizedLower = token.normalized?.toLowerCase();
|
|
939
|
+
const isEventByNormalized =
|
|
940
|
+
normalizedLower && SemanticParserImpl.KNOWN_EVENTS.has(normalizedLower);
|
|
941
|
+
const isEventByNative =
|
|
942
|
+
nativeEventNames.has(tokenValue) || nativeEventNames.has(bareEventValue);
|
|
943
|
+
const isEventByBare = SemanticParserImpl.KNOWN_EVENTS.has(bareEventValue);
|
|
944
|
+
|
|
945
|
+
if (isEventByNormalized || isEventByNative || isEventByBare) {
|
|
946
|
+
// Resolve the English event name
|
|
947
|
+
let resolvedName: string;
|
|
948
|
+
if (isEventByNormalized) {
|
|
949
|
+
resolvedName = normalizedLower!;
|
|
950
|
+
} else if (isEventByNative) {
|
|
951
|
+
resolvedName = langEvents?.[tokenValue] ?? langEvents?.[bareEventValue] ?? bareEventValue;
|
|
952
|
+
} else {
|
|
953
|
+
resolvedName = bareEventValue;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
if (eventMarkers.size > 0) {
|
|
957
|
+
// Languages with event markers (JA, TR): require marker after event keyword
|
|
958
|
+
// The marker may be at i+1 (direct) or i+2 (if there's a bracket key-filter selector between)
|
|
959
|
+
let markerOffset = 1;
|
|
960
|
+
const nextToken = allTokens[i + 1];
|
|
961
|
+
// Skip over bracket selector token (e.g., [key=="Escape"]) between event and marker
|
|
962
|
+
if (nextToken && nextToken.kind === 'selector' && nextToken.value.startsWith('[')) {
|
|
963
|
+
markerOffset = 2;
|
|
964
|
+
}
|
|
965
|
+
const markerToken = allTokens[i + markerOffset];
|
|
966
|
+
if (
|
|
967
|
+
markerToken &&
|
|
968
|
+
(markerToken.kind === 'particle' || markerToken.kind === 'keyword') &&
|
|
969
|
+
eventMarkers.has(markerToken.value)
|
|
970
|
+
) {
|
|
971
|
+
eventIndex = i;
|
|
972
|
+
eventName = resolvedName;
|
|
973
|
+
keyFilter = tokenKeyFilter || (markerOffset === 2 ? allTokens[i + 1].value : '');
|
|
974
|
+
tokensToRemove = markerOffset + 1; // Remove event keyword + optional filter + marker
|
|
975
|
+
break;
|
|
976
|
+
}
|
|
977
|
+
} else {
|
|
978
|
+
// Languages without event markers (KO): event keyword stands alone
|
|
979
|
+
eventIndex = i;
|
|
980
|
+
eventName = resolvedName;
|
|
981
|
+
keyFilter = tokenKeyFilter;
|
|
982
|
+
tokensToRemove = 1; // Remove event keyword only
|
|
983
|
+
break;
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
if (eventIndex === -1) return null;
|
|
989
|
+
|
|
990
|
+
// Build the list of indices to remove: event keyword + marker
|
|
991
|
+
const removeIndices = new Set<number>();
|
|
992
|
+
for (let i = eventIndex; i < eventIndex + tokensToRemove; i++) {
|
|
993
|
+
removeIndices.add(i);
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
// Strip "from window/elsewhere" source modifiers near the event
|
|
997
|
+
// Pattern: [source-marker] appears after event marker (JA: から, KO: 에서, TR: den/dan/ten/tan)
|
|
998
|
+
// Or the source element (window/ウィンドウ/창/pencere) may appear before the event
|
|
999
|
+
if (sourceMarkers) {
|
|
1000
|
+
const afterEventEnd = eventIndex + tokensToRemove;
|
|
1001
|
+
|
|
1002
|
+
// Check for source marker right after event+marker (e.g., "keydown で から")
|
|
1003
|
+
if (afterEventEnd < allTokens.length) {
|
|
1004
|
+
const afterToken = allTokens[afterEventEnd];
|
|
1005
|
+
if (
|
|
1006
|
+
(afterToken.kind === 'particle' || afterToken.kind === 'keyword') &&
|
|
1007
|
+
sourceMarkers.markers.has(afterToken.value)
|
|
1008
|
+
) {
|
|
1009
|
+
removeIndices.add(afterEventEnd);
|
|
1010
|
+
}
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
// Check for source element (window token) before the event
|
|
1014
|
+
// It could be immediately before, or earlier in the stream
|
|
1015
|
+
for (let i = 0; i < eventIndex; i++) {
|
|
1016
|
+
const t = allTokens[i];
|
|
1017
|
+
const tLower = t.value.toLowerCase();
|
|
1018
|
+
const tNorm = t.normalized?.toLowerCase();
|
|
1019
|
+
if (
|
|
1020
|
+
sourceMarkers.windowTokens.has(tLower) ||
|
|
1021
|
+
(tNorm && sourceMarkers.windowTokens.has(tNorm))
|
|
1022
|
+
) {
|
|
1023
|
+
removeIndices.add(i);
|
|
1024
|
+
break;
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
// Remove marked tokens from the array
|
|
1030
|
+
const bodyTokens = allTokens.filter((_, idx) => !removeIndices.has(idx));
|
|
1031
|
+
|
|
1032
|
+
if (bodyTokens.length === 0) return null;
|
|
1033
|
+
|
|
1034
|
+
// Parse body tokens as command(s)
|
|
1035
|
+
const commandPatterns = patterns.filter(p => p.command !== 'on');
|
|
1036
|
+
const bodyStream = new TokenStreamImpl(bodyTokens, language);
|
|
1037
|
+
|
|
1038
|
+
// Use clause-based parsing to handle then-chains
|
|
1039
|
+
const body = this.parseBodyWithClauses(bodyStream, commandPatterns, language);
|
|
1040
|
+
|
|
1041
|
+
if (body.length === 0) return null;
|
|
1042
|
+
|
|
1043
|
+
// Build event metadata including key filter and source info
|
|
1044
|
+
const metadata: Record<string, unknown> = {
|
|
1045
|
+
sourceLanguage: language,
|
|
1046
|
+
confidence: 0.75,
|
|
1047
|
+
};
|
|
1048
|
+
if (keyFilter) {
|
|
1049
|
+
metadata.keyFilter = keyFilter;
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
return createEventHandler({ type: 'literal', value: eventName }, body, undefined, metadata);
|
|
1053
|
+
}
|
|
1054
|
+
|
|
393
1055
|
/**
|
|
394
1056
|
* Check if a token is a 'then' keyword in the given language.
|
|
395
1057
|
*/
|
|
@@ -399,14 +1061,16 @@ export class SemanticParserImpl implements ISemanticParser {
|
|
|
399
1061
|
ja: new Set(['それから', '次に', 'そして']),
|
|
400
1062
|
ar: new Set(['ثم', 'بعدها', 'ثمّ']),
|
|
401
1063
|
es: new Set(['entonces', 'luego', 'después']),
|
|
402
|
-
ko: new Set(['그다음', '그리고', '그런후']),
|
|
1064
|
+
ko: new Set(['그다음', '그리고', '그런후', '그러면']),
|
|
403
1065
|
zh: new Set(['然后', '接着', '之后']),
|
|
404
1066
|
tr: new Set(['sonra', 'ardından', 'daha sonra']),
|
|
405
1067
|
pt: new Set(['então', 'depois', 'logo']),
|
|
406
1068
|
fr: new Set(['puis', 'ensuite', 'alors']),
|
|
407
1069
|
de: new Set(['dann', 'danach', 'anschließend']),
|
|
408
1070
|
id: new Set(['lalu', 'kemudian', 'setelah itu']),
|
|
409
|
-
|
|
1071
|
+
tl: new Set(['pagkatapos', 'tapos']),
|
|
1072
|
+
bn: new Set(['তারপর', 'পরে']),
|
|
1073
|
+
qu: new Set(['chaymantataq', 'hinaspa', 'chaymanta', 'chayqa']),
|
|
410
1074
|
sw: new Set(['kisha', 'halafu', 'baadaye']),
|
|
411
1075
|
};
|
|
412
1076
|
const keywords = thenKeywords[language] || thenKeywords.en;
|
|
@@ -429,12 +1093,190 @@ export class SemanticParserImpl implements ISemanticParser {
|
|
|
429
1093
|
fr: new Set(['fin', 'terminer', 'finir']),
|
|
430
1094
|
de: new Set(['ende', 'beenden', 'fertig']),
|
|
431
1095
|
id: new Set(['selesai', 'akhir', 'tamat']),
|
|
1096
|
+
tl: new Set(['wakas', 'tapos']),
|
|
1097
|
+
bn: new Set(['সমাপ্ত']),
|
|
432
1098
|
qu: new Set(['tukukuy', 'tukuy', 'puchukay']),
|
|
433
1099
|
sw: new Set(['mwisho', 'maliza', 'tamati']),
|
|
434
1100
|
};
|
|
435
1101
|
const keywords = endKeywords[language] || endKeywords.en;
|
|
436
1102
|
return keywords.has(value.toLowerCase());
|
|
437
1103
|
}
|
|
1104
|
+
|
|
1105
|
+
/**
|
|
1106
|
+
* Standalone event modifier keywords (loanwords used across languages).
|
|
1107
|
+
* Pattern: `[modifier] [preposition?] [duration?] [rest...]`
|
|
1108
|
+
*/
|
|
1109
|
+
private static readonly STANDALONE_MODIFIERS: Record<string, 'once' | 'debounce' | 'throttle'> = {
|
|
1110
|
+
once: 'once',
|
|
1111
|
+
debounced: 'debounce',
|
|
1112
|
+
debounce: 'debounce',
|
|
1113
|
+
throttled: 'throttle',
|
|
1114
|
+
throttle: 'throttle',
|
|
1115
|
+
};
|
|
1116
|
+
|
|
1117
|
+
/**
|
|
1118
|
+
* "Or" conjunction keywords across languages for multiple events.
|
|
1119
|
+
* Maps lowercase keyword → true. Used to detect "click or keydown" patterns.
|
|
1120
|
+
*/
|
|
1121
|
+
private static readonly OR_KEYWORDS = new Set([
|
|
1122
|
+
'or', // EN
|
|
1123
|
+
'أو', // AR
|
|
1124
|
+
'o', // ES, TL
|
|
1125
|
+
'ou', // PT, FR
|
|
1126
|
+
'oder', // DE
|
|
1127
|
+
'atau', // ID
|
|
1128
|
+
'atau', // MS (same as ID)
|
|
1129
|
+
'或', // ZH
|
|
1130
|
+
'または', // JA
|
|
1131
|
+
'또는', // KO
|
|
1132
|
+
'veya', // TR
|
|
1133
|
+
'অথবা', // BN
|
|
1134
|
+
'utaq', // QU
|
|
1135
|
+
'au', // SW
|
|
1136
|
+
'або', // UK
|
|
1137
|
+
'или', // RU
|
|
1138
|
+
'hoặc', // VI
|
|
1139
|
+
'lub', // PL
|
|
1140
|
+
'או', // HE
|
|
1141
|
+
'หรือ', // TH
|
|
1142
|
+
'o', // IT
|
|
1143
|
+
]);
|
|
1144
|
+
|
|
1145
|
+
/**
|
|
1146
|
+
* Extract standalone event modifiers from the beginning of input.
|
|
1147
|
+
* Returns the modifiers (if any) and the remaining input string.
|
|
1148
|
+
*/
|
|
1149
|
+
private extractStandaloneModifiers(
|
|
1150
|
+
input: string,
|
|
1151
|
+
_language: string
|
|
1152
|
+
): {
|
|
1153
|
+
modifiers: { once?: boolean; debounce?: number; throttle?: number } | null;
|
|
1154
|
+
remainingInput: string | null;
|
|
1155
|
+
} {
|
|
1156
|
+
const tokens = tokenizeInternal(input, _language);
|
|
1157
|
+
const allTokens = tokens.tokens;
|
|
1158
|
+
|
|
1159
|
+
if (allTokens.length === 0) return { modifiers: null, remainingInput: null };
|
|
1160
|
+
|
|
1161
|
+
const firstToken = allTokens[0];
|
|
1162
|
+
const firstLower = firstToken.value.toLowerCase();
|
|
1163
|
+
const modType = SemanticParserImpl.STANDALONE_MODIFIERS[firstLower];
|
|
1164
|
+
|
|
1165
|
+
if (!modType) return { modifiers: null, remainingInput: null };
|
|
1166
|
+
|
|
1167
|
+
const modifiers: { once?: boolean; debounce?: number; throttle?: number } = {};
|
|
1168
|
+
let tokensToSkip = 1; // At least the modifier keyword
|
|
1169
|
+
|
|
1170
|
+
if (modType === 'once') {
|
|
1171
|
+
modifiers.once = true;
|
|
1172
|
+
} else {
|
|
1173
|
+
// debounce/throttle: look for optional preposition + duration
|
|
1174
|
+
let nextIdx = 1;
|
|
1175
|
+
|
|
1176
|
+
// Skip preposition tokens (sa, عند, at, etc.)
|
|
1177
|
+
if (nextIdx < allTokens.length) {
|
|
1178
|
+
const nextToken = allTokens[nextIdx];
|
|
1179
|
+
// Skip keyword/particle tokens that are prepositions (not selectors, literals, etc.)
|
|
1180
|
+
if (nextToken.kind === 'keyword' || nextToken.kind === 'particle') {
|
|
1181
|
+
nextIdx++;
|
|
1182
|
+
tokensToSkip++;
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
// Look for duration (number with unit like "100ms", "300ms")
|
|
1187
|
+
if (nextIdx < allTokens.length) {
|
|
1188
|
+
const durToken = allTokens[nextIdx];
|
|
1189
|
+
if (durToken.kind === 'literal') {
|
|
1190
|
+
const match = durToken.value.match(/^(\d+)(ms|s|m)?$/);
|
|
1191
|
+
if (match) {
|
|
1192
|
+
let ms = parseInt(match[1], 10);
|
|
1193
|
+
const unit = match[2] || 'ms';
|
|
1194
|
+
if (unit === 's') ms *= 1000;
|
|
1195
|
+
else if (unit === 'm') ms *= 60000;
|
|
1196
|
+
modifiers[modType] = ms;
|
|
1197
|
+
tokensToSkip = nextIdx + 1;
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
// If no duration found, use default
|
|
1203
|
+
if (!modifiers[modType]) {
|
|
1204
|
+
modifiers[modType] = modType === 'debounce' ? 300 : 100;
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
// Reconstruct remaining input from the tokens after the modifier
|
|
1209
|
+
const remainingTokens = allTokens.slice(tokensToSkip);
|
|
1210
|
+
if (remainingTokens.length === 0) return { modifiers: null, remainingInput: null };
|
|
1211
|
+
|
|
1212
|
+
// Use position data to extract the remaining input string
|
|
1213
|
+
const startPos = remainingTokens[0].position.start;
|
|
1214
|
+
const remainingInput = input.slice(startPos);
|
|
1215
|
+
|
|
1216
|
+
return { modifiers, remainingInput };
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
/**
|
|
1220
|
+
* Apply standalone modifiers to an event handler node.
|
|
1221
|
+
*/
|
|
1222
|
+
private applyModifiers(
|
|
1223
|
+
node: EventHandlerSemanticNode,
|
|
1224
|
+
modifiers: { once?: boolean; debounce?: number; throttle?: number }
|
|
1225
|
+
): EventHandlerSemanticNode {
|
|
1226
|
+
return {
|
|
1227
|
+
...node,
|
|
1228
|
+
eventModifiers: {
|
|
1229
|
+
...node.eventModifiers,
|
|
1230
|
+
...modifiers,
|
|
1231
|
+
},
|
|
1232
|
+
};
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
/**
|
|
1236
|
+
* Extract "or" conjunction events from the token stream.
|
|
1237
|
+
* If the next tokens follow the pattern "or EVENT [or EVENT ...]",
|
|
1238
|
+
* consume them and return the additional event values.
|
|
1239
|
+
*
|
|
1240
|
+
* The token stream is advanced past any consumed "or EVENT" tokens.
|
|
1241
|
+
*/
|
|
1242
|
+
private extractOrConjunctionEvents(
|
|
1243
|
+
tokens: Pick<ReturnType<typeof tokenizeInternal>, 'peek' | 'advance' | 'mark' | 'reset'>,
|
|
1244
|
+
_language: string
|
|
1245
|
+
): SemanticValue[] {
|
|
1246
|
+
const additionalEvents: SemanticValue[] = [];
|
|
1247
|
+
|
|
1248
|
+
while (true) {
|
|
1249
|
+
const mark = tokens.mark();
|
|
1250
|
+
const orToken = tokens.peek();
|
|
1251
|
+
if (!orToken) break;
|
|
1252
|
+
|
|
1253
|
+
const orLower = (orToken.normalized || orToken.value).toLowerCase();
|
|
1254
|
+
if (!SemanticParserImpl.OR_KEYWORDS.has(orLower)) {
|
|
1255
|
+
tokens.reset(mark);
|
|
1256
|
+
break;
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
// Consume the "or" token
|
|
1260
|
+
tokens.advance();
|
|
1261
|
+
|
|
1262
|
+
// Next token should be the event name
|
|
1263
|
+
const eventToken = tokens.peek();
|
|
1264
|
+
if (!eventToken) {
|
|
1265
|
+
// "or" at end of input — revert
|
|
1266
|
+
tokens.reset(mark);
|
|
1267
|
+
break;
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
// Normalize event name using shared translations
|
|
1271
|
+
const eventLower = (eventToken.normalized || eventToken.value).toLowerCase();
|
|
1272
|
+
|
|
1273
|
+
// Accept it as an event (could be native or English event name)
|
|
1274
|
+
tokens.advance();
|
|
1275
|
+
additionalEvents.push({ type: 'literal', value: eventLower });
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
return additionalEvents;
|
|
1279
|
+
}
|
|
438
1280
|
}
|
|
439
1281
|
|
|
440
1282
|
// =============================================================================
|