langtell 0.0.1 → 0.3.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/README.md +67 -26
- package/dist/chrome-ai.d.ts +29 -0
- package/dist/chrome-ai.js +71 -0
- package/dist/chrome-ai.js.map +1 -0
- package/dist/chunk-3LDE35U2.js +36 -0
- package/dist/chunk-3LDE35U2.js.map +1 -0
- package/dist/chunk-7G3MEXWK.js +109 -0
- package/dist/chunk-7G3MEXWK.js.map +1 -0
- package/dist/chunk-KI4MAI3N.js +27 -0
- package/dist/chunk-KI4MAI3N.js.map +1 -0
- package/dist/chunk-NCGZPEDA.js +131 -0
- package/dist/chunk-NCGZPEDA.js.map +1 -0
- package/dist/chunk-OVSPOZ5J.js +115 -0
- package/dist/chunk-OVSPOZ5J.js.map +1 -0
- package/dist/chunk-PT7R2BRQ.js +35 -0
- package/dist/chunk-PT7R2BRQ.js.map +1 -0
- package/dist/classify.d.ts +63 -0
- package/dist/classify.js +3 -0
- package/dist/classify.js.map +1 -0
- package/dist/franc.d.ts +25 -0
- package/dist/franc.js +59 -0
- package/dist/franc.js.map +1 -0
- package/dist/fuse.d.ts +30 -0
- package/dist/fuse.js +4 -0
- package/dist/fuse.js.map +1 -0
- package/dist/headers.d.ts +6 -0
- package/dist/headers.js +4 -0
- package/dist/headers.js.map +1 -0
- package/dist/html.d.ts +17 -0
- package/dist/html.js +4 -0
- package/dist/html.js.map +1 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/profiles.d.ts +47 -0
- package/dist/profiles.js +1030 -0
- package/dist/profiles.js.map +1 -0
- package/dist/text.d.ts +22 -0
- package/dist/text.js +4 -0
- package/dist/text.js.map +1 -0
- package/dist/types-BIXrkuAr.d.ts +120 -0
- package/package.json +104 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/frequent.ts","../src/profiles.ts"],"names":[],"mappings":";AAOO,IAAM,kBAAA,GAAkE;AAAA,EAC7E,EAAA,EAAI;AAAA,IACF,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,sCAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,gCAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,sCAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,gCAAA;AAAA,IACA,gCAAA;AAAA,IACA,cAAA;AAAA,IACA,gCAAA;AAAA,IACA,gCAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,sCAAA;AAAA,IACA,oBAAA;AAAA,IACA,gCAAA;AAAA,IACA,sCAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,sCAAA;AAAA,IACA,oBAAA;AAAA,IACA,sCAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,sCAAA;AAAA,IACA,gCAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,gCAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,gCAAA;AAAA,IACA,sCAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,sCAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,sCAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,4CAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,sCAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,sCAAA;AAAA,IACA,gCAAA;AAAA,IACA,gCAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,oBAAA;AAAA,IACA,gCAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,sCAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,kDAAA;AAAA,IACA,cAAA;AAAA,IACA,gCAAA;AAAA,IACA,gCAAA;AAAA,IACA,gCAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,oBAAA;AAAA,IACA,sCAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,4CAAA;AAAA,IACA,4CAAA;AAAA,IACA,4CAAA;AAAA,IACA,gCAAA;AAAA,IACA,oBAAA;AAAA,IACA,gCAAA;AAAA,IACA,gCAAA;AAAA,IACA,gCAAA;AAAA,IACA,kDAAA;AAAA,IACA,cAAA;AAAA,IACA,gCAAA;AAAA,IACA,4CAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,sCAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,4CAA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AA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,4CAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,gCAAA;AAAA,IACA,sCAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,sCAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,gCAAA;AAAA,IACA,sCAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,gCAAA;AAAA,IACA,sCAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,sCAAA;AAAA,IACA,sCAAA;AAAA,IACA,0BAAA;AAAA,IACA,sCAAA;AAAA,IACA,0BAAA;AAAA,IACA,sCAAA;AAAA,IACA,gCAAA;AAAA,IACA,4CAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,0BAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA,4CAAA;AAAA,IACA,sCAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,8DAAA;AAAA,IACA,gCAAA;AAAA,IACA,4CAAA;AAAA,IACA,4CAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,sCAAA;AAAA,IACA,0BAAA;AAAA,IACA,0BAAA;AAAA,IACA,sCAAA;AAAA,IACA,4CAAA;AAAA,IACA,sCAAA;AAAA,IACA,0BAAA;AAAA,IACA,gCAAA;AAAA,IACA,cAAA;AAAA,IACA,sCAAA;AAAA,IACA,4CAAA;AAAA,IA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","file":"profiles.js","sourcesContent":["// Generated frequency lists — the top everyday words for each language,\n// taken from an open subtitle-frequency corpus (general vocabulary; no\n// project-specific terms). Kept out of the zero-dependency core: this data\n// lives behind the `langtell/profiles` subpath only.\n//\n// Rung 2b of the classifier (internal/classify.ts) reads these. They sharpen\n// distinctive-free disambiguation (e.g. uk \"робота\" vs ru \"работа\").\nexport const FREQUENT_GENERATED: Readonly<Record<string, readonly string[]>> = {\n uk: [\n \"не\",\n \"що\",\n \"на\",\n \"це\",\n \"ти\",\n \"что\",\n \"так\",\n \"ты\",\n \"это\",\n \"ми\",\n \"все\",\n \"тебе\",\n \"він\",\n \"як\",\n \"за\",\n \"ви\",\n \"до\",\n \"мене\",\n \"он\",\n \"мені\",\n \"ні\",\n \"але\",\n \"мы\",\n \"мне\",\n \"да\",\n \"как\",\n \"просто\",\n \"меня\",\n \"нет\",\n \"тут\",\n \"для\",\n \"його\",\n \"вы\",\n \"но\",\n \"то\",\n \"ну\",\n \"знаю\",\n \"про\",\n \"нас\",\n \"вас\",\n \"вони\",\n \"тебя\",\n \"вона\",\n \"она\",\n \"тобі\",\n \"его\",\n \"там\",\n \"якщо\",\n \"ще\",\n \"та\",\n \"добре\",\n \"щоб\",\n \"вам\",\n \"по\",\n \"нам\",\n \"хочу\",\n \"коли\",\n \"если\",\n \"бы\",\n \"же\",\n \"вже\",\n \"було\",\n \"був\",\n \"они\",\n \"може\",\n \"чи\",\n \"чтобы\",\n \"дуже\",\n \"від\",\n \"хорошо\",\n \"чому\",\n \"буде\",\n \"хто\",\n \"есть\",\n \"всё\",\n \"давай\",\n \"тому\",\n \"де\",\n \"здесь\",\n \"треба\",\n \"от\",\n \"думаю\",\n \"когда\",\n \"из\",\n \"того\",\n \"щось\",\n \"гаразд\",\n \"был\",\n \"цього\",\n \"только\",\n \"зараз\",\n \"было\",\n \"может\",\n \"нічого\",\n \"моя\",\n \"тільки\",\n \"те\",\n \"бути\",\n \"один\",\n \"уже\",\n \"можу\",\n \"тепер\",\n \"мій\",\n \"быть\",\n \"ось\",\n \"почему\",\n \"дякую\",\n \"раз\",\n \"вот\",\n \"могу\",\n \"через\",\n \"нужно\",\n \"всі\",\n \"бо\",\n \"кто\",\n \"будет\",\n \"правда\",\n \"без\",\n \"себе\",\n \"більше\",\n \"тоді\",\n \"час\",\n \"день\",\n \"ладно\",\n \"сейчас\",\n \"можна\",\n \"була\",\n \"их\",\n \"боже\",\n \"еще\",\n \"спасибо\",\n \"или\",\n \"будь\",\n \"йому\",\n \"где\",\n \"лише\",\n \"очень\",\n \"была\",\n \"ним\",\n \"привіт\",\n \"них\",\n \"чем\",\n \"навіть\",\n \"ніколи\",\n \"знаешь\",\n \"этого\",\n \"буду\",\n \"би\",\n \"её\",\n \"зі\",\n \"ее\",\n \"мой\",\n \"ничего\",\n \"хочеш\",\n \"нього\",\n \"цей\",\n \"чого\",\n \"життя\",\n \"этом\",\n \"теж\",\n \"люди\",\n \"твоя\",\n \"со\",\n \"потому\",\n \"сказав\",\n \"больше\",\n \"теперь\",\n \"ещё\",\n \"людей\",\n \"або\",\n \"свою\",\n \"привет\",\n \"який\",\n \"сюди\",\n \"таке\",\n \"даже\",\n \"із\",\n \"об\",\n \"тобою\",\n \"були\",\n \"два\",\n \"краще\",\n \"пока\",\n \"ему\",\n \"завжди\",\n \"хочешь\",\n \"должен\",\n \"багато\",\n \"сьогодні\",\n \"ей\",\n \"точно\",\n \"ласка\",\n \"время\",\n \"эй\",\n \"той\",\n \"себя\",\n \"надо\",\n \"сам\",\n \"мною\",\n \"тоже\",\n \"этот\",\n \"прошу\",\n \"маю\",\n \"сказал\",\n \"мама\",\n \"ли\",\n \"зробити\",\n \"сказати\",\n \"сказала\",\n \"назад\",\n \"які\",\n \"можеш\",\n \"тобой\",\n \"трохи\",\n \"потрібно\",\n \"ці\",\n \"тогда\",\n \"порядке\",\n \"ага\",\n \"саме\",\n \"хотів\",\n \"можешь\",\n \"під\",\n \"три\",\n \"никогда\",\n \"можете\",\n \"років\",\n \"собі\",\n \"скажи\",\n \"него\",\n \"пане\",\n \"робити\",\n \"знову\",\n \"твій\",\n \"люблю\",\n \"пожалуйста\",\n \"наш\",\n \"ни\",\n \"сегодня\",\n \"мной\",\n \"потім\",\n \"ніж\",\n \"были\",\n \"гей\",\n \"дай\",\n \"перед\",\n \"завтра\",\n \"вами\",\n \"яка\",\n \"одного\",\n \"ваша\",\n \"конечно\",\n \"сделать\",\n \"лучше\",\n \"цьому\",\n \"ваш\",\n \"цю\",\n \"сказать\",\n \"пам\",\n \"ніхто\",\n \"сюда\",\n \"нами\",\n \"можливо\",\n \"після\",\n \"значит\",\n \"прямо\",\n \"скільки\",\n \"одна\",\n \"чудово\",\n \"давайте\",\n \"бачив\",\n \"такий\",\n \"кого\",\n \"хтось\",\n \"сер\",\n \"ця\",\n \"мою\",\n \"усе\",\n \"разом\",\n \"чего\",\n \"куди\",\n \"звичайно\",\n \"справді\",\n \"поки\",\n \"должны\",\n \"всегда\",\n \"делать\",\n \"дело\",\n \"гроші\",\n \"цим\",\n \"міг\",\n \"том\",\n \"хіба\",\n \"ней\",\n \"твой\",\n \"этим\",\n \"повинен\",\n \"друг\",\n \"можно\",\n \"дня\",\n \"досить\",\n \"можемо\",\n \"зробив\",\n \"много\",\n \"хотел\",\n \"над\",\n \"должна\",\n \"после\",\n \"хоче\",\n \"якби\",\n \"могли\",\n \"місце\",\n \"всего\",\n \"воно\",\n \"часу\",\n \"робиш\",\n \"хлопці\",\n \"вибачте\",\n \"додому\",\n \"весь\",\n \"руки\",\n \"ведь\",\n \"ясно\",\n \"возможно\",\n \"вибач\",\n \"такой\",\n \"доктор\",\n \"повинні\",\n \"эти\",\n \"говорить\",\n \"мого\",\n \"нема\",\n \"нб\",\n \"йди\",\n \"думаешь\",\n \"моей\",\n \"немного\",\n \"навіщо\",\n \"господи\",\n \"мабуть\",\n \"жизнь\",\n \"твою\",\n \"зачем\",\n \"чоловік\",\n \"ходімо\",\n \"лет\",\n \"такое\",\n \"случилось\",\n \"звідси\",\n \"слишком\",\n \"мати\",\n \"скажу\",\n \"скоро\",\n \"сталося\",\n \"прости\",\n \"нормально\",\n \"пані\",\n \"всіх\",\n \"також\",\n \"вместе\",\n \"кілька\",\n \"брат\",\n \"чорт\",\n \"сама\",\n \"во\",\n \"потом\",\n \"такого\",\n \"казав\",\n \"розумію\",\n \"батько\",\n \"отже\",\n \"сделал\",\n \"таким\",\n \"могла\",\n \"тим\",\n \"швидше\",\n \"жаль\",\n \"туди\",\n \"речі\",\n \"знати\",\n \"поэтому\",\n \"мог\",\n \"хочете\",\n \"помочь\",\n \"одну\",\n \"всех\",\n \"который\",\n \"им\",\n \"ім\",\n \"думав\",\n \"можем\",\n \"под\",\n \"допомогти\",\n \"людина\",\n \"куда\",\n \"яку\",\n \"правильно\",\n \"давно\",\n \"зовсім\",\n \"при\",\n ],\n ru: [\n \"не\",\n \"что\",\n \"ты\",\n \"это\",\n \"на\",\n \"он\",\n \"мы\",\n \"как\",\n \"вы\",\n \"да\",\n \"мне\",\n \"нет\",\n \"меня\",\n \"так\",\n \"но\",\n \"его\",\n \"все\",\n \"она\",\n \"тебя\",\n \"если\",\n \"за\",\n \"бы\",\n \"тебе\",\n \"они\",\n \"чтобы\",\n \"же\",\n \"есть\",\n \"просто\",\n \"из\",\n \"для\",\n \"ну\",\n \"когда\",\n \"хорошо\",\n \"здесь\",\n \"по\",\n \"был\",\n \"знаю\",\n \"то\",\n \"только\",\n \"всё\",\n \"было\",\n \"вас\",\n \"может\",\n \"нас\",\n \"вот\",\n \"от\",\n \"быть\",\n \"кто\",\n \"будет\",\n \"почему\",\n \"вам\",\n \"их\",\n \"очень\",\n \"могу\",\n \"уже\",\n \"спасибо\",\n \"или\",\n \"нам\",\n \"еще\",\n \"там\",\n \"нужно\",\n \"сейчас\",\n \"где\",\n \"чем\",\n \"хочу\",\n \"ничего\",\n \"этого\",\n \"была\",\n \"мой\",\n \"ее\",\n \"ладно\",\n \"знаешь\",\n \"до\",\n \"этом\",\n \"потому\",\n \"теперь\",\n \"думаю\",\n \"больше\",\n \"её\",\n \"со\",\n \"раз\",\n \"ему\",\n \"надо\",\n \"время\",\n \"этот\",\n \"ли\",\n \"ещё\",\n \"пока\",\n \"даже\",\n \"привет\",\n \"сказал\",\n \"себя\",\n \"должен\",\n \"тоже\",\n \"хочешь\",\n \"давай\",\n \"никогда\",\n \"эй\",\n \"того\",\n \"тогда\",\n \"него\",\n \"ни\",\n \"тут\",\n \"были\",\n \"конечно\",\n \"правда\",\n \"об\",\n \"моя\",\n \"пожалуйста\",\n \"тобой\",\n \"сказать\",\n \"сегодня\",\n \"один\",\n \"лучше\",\n \"можешь\",\n \"сюда\",\n \"мной\",\n \"значит\",\n \"сделать\",\n \"всегда\",\n \"дело\",\n \"можно\",\n \"ей\",\n \"должны\",\n \"порядке\",\n \"без\",\n \"день\",\n \"том\",\n \"буду\",\n \"делать\",\n \"хотел\",\n \"чего\",\n \"эти\",\n \"много\",\n \"после\",\n \"этим\",\n \"всего\",\n \"во\",\n \"твой\",\n \"ним\",\n \"лет\",\n \"боже\",\n \"них\",\n \"сэр\",\n \"ведь\",\n \"мистер\",\n \"жизнь\",\n \"потом\",\n \"ней\",\n \"такой\",\n \"который\",\n \"всех\",\n \"через\",\n \"им\",\n \"возможно\",\n \"немного\",\n \"такое\",\n \"слишком\",\n \"себе\",\n \"зачем\",\n \"должна\",\n \"моей\",\n \"люди\",\n \"знаете\",\n \"этой\",\n \"думаешь\",\n \"свою\",\n \"точно\",\n \"человек\",\n \"твоя\",\n \"под\",\n \"сказала\",\n \"назад\",\n \"эту\",\n \"можем\",\n \"случилось\",\n \"мама\",\n \"мог\",\n \"вместе\",\n \"отец\",\n \"сделал\",\n \"мои\",\n \"кажется\",\n \"друг\",\n \"куда\",\n \"никто\",\n \"поэтому\",\n \"эта\",\n \"которые\",\n \"два\",\n \"тот\",\n \"сколько\",\n \"понимаю\",\n \"снова\",\n \"жизни\",\n \"нравится\",\n \"людей\",\n \"помочь\",\n \"видел\",\n \"люблю\",\n \"хочет\",\n \"место\",\n \"знать\",\n \"прости\",\n \"отлично\",\n \"похоже\",\n \"парень\",\n \"домой\",\n \"всем\",\n \"деньги\",\n \"иди\",\n \"времени\",\n \"дома\",\n \"именно\",\n \"доктор\",\n \"думал\",\n \"говорил\",\n \"делаешь\",\n \"будем\",\n \"прямо\",\n \"стоит\",\n \"поговорить\",\n \"найти\",\n \"разве\",\n \"слушай\",\n \"своей\",\n \"лишь\",\n \"ага\",\n \"можете\",\n \"простите\",\n \"хотела\",\n \"сам\",\n \"тем\",\n \"будешь\",\n \"прошу\",\n \"три\",\n \"деле\",\n \"хотите\",\n \"говорить\",\n \"давайте\",\n \"совсем\",\n \"знал\",\n \"знает\",\n \"какой\",\n \"моего\",\n \"скажи\",\n \"дом\",\n \"дела\",\n \"вами\",\n \"свои\",\n \"говорит\",\n \"несколько\",\n \"должно\",\n \"про\",\n \"ваш\",\n \"происходит\",\n \"жаль\",\n \"туда\",\n \"действительно\",\n \"папа\",\n \"завтра\",\n \"оно\",\n \"черт\",\n \"одна\",\n \"перед\",\n \"наш\",\n \"уверен\",\n \"отсюда\",\n \"нужна\",\n \"самом\",\n \"тех\",\n \"нужен\",\n \"свой\",\n \"мою\",\n \"кого\",\n \"верно\",\n \"работу\",\n \"каждый\",\n \"твоей\",\n \"будут\",\n \"хватит\",\n \"понял\",\n \"нее\",\n \"уж\",\n \"имя\",\n \"против\",\n \"пор\",\n \"чём\",\n \"раньше\",\n \"говорю\",\n \"более\",\n \"надеюсь\",\n \"итак\",\n \"при\",\n \"ваша\",\n \"вообще\",\n \"пошли\",\n \"мать\",\n \"нельзя\",\n \"наверное\",\n \"нами\",\n \"твои\",\n \"могли\",\n \"дай\",\n \"ради\",\n \"всю\",\n \"ребята\",\n \"ко\",\n \"хотя\",\n \"понимаешь\",\n \"идти\",\n \"этих\",\n \"откуда\",\n \"такая\",\n \"ясно\",\n \"другой\",\n \"извините\",\n \"вижу\",\n \"видеть\",\n \"над\",\n \"могут\",\n \"равно\",\n \"мисс\",\n \"скоро\",\n \"будто\",\n \"зовут\",\n \"виду\",\n \"наши\",\n \"думала\",\n \"послушай\",\n \"между\",\n \"своего\",\n \"вопрос\",\n \"этому\",\n \"почти\",\n \"года\",\n \"человека\",\n \"которая\",\n \"подожди\",\n \"руки\",\n \"нормально\",\n \"такие\",\n \"возьми\",\n \"минут\",\n \"извини\",\n \"вещи\",\n \"могла\",\n \"смотри\",\n \"хоть\",\n \"работа\",\n \"пару\",\n \"сын\",\n \"ваше\",\n \"дня\",\n \"пора\",\n \"неё\",\n \"жить\",\n \"видишь\",\n \"достаточно\",\n \"господи\",\n \"быстро\",\n \"твою\",\n \"весь\",\n \"убить\",\n \"ночь\",\n \"говоришь\",\n \"собой\",\n \"скажу\",\n \"готов\",\n \"слышал\",\n \"какая\",\n \"посмотри\",\n \"первый\",\n \"самое\",\n \"видела\",\n \"пусть\",\n \"месте\",\n \"нашли\",\n \"сказали\",\n \"плохо\",\n \"смогу\",\n \"ваши\",\n \"отца\",\n \"детей\",\n \"знаем\",\n \"рад\",\n \"прав\",\n \"никаких\",\n \"имею\",\n \"миссис\",\n \"иногда\",\n \"смерти\",\n \"своих\",\n \"пойду\",\n \"брат\",\n \"вроде\",\n \"рядом\",\n \"мир\",\n \"произошло\",\n \"которую\",\n ],\n en: [],\n};\n","/**\n * `langtell/profiles` — ready-to-use {@link LanguageProfile} data.\n *\n * This is the heavy DATA half of the library: alphabets, curated function-word\n * lists, and corpus-frequent word lists. It is deliberately kept behind its own\n * subpath, OUT of the zero-dependency core, so `import { compile } from\n * \"langtell\"` never drags the word corpora into a bundle that only needs the\n * script/letter rungs. Pass these into `compile({ candidates: [...] })`.\n *\n * Each profile is declarative and auditable:\n * - `alphabet` — the language's lowercased alphabet (raw; distinctiveness\n * is computed at runtime per candidate set).\n * - `marks` — orthographic marks that count as rung-1 evidence but\n * are not alphabet letters (the intra-word apostrophe).\n * - `words.function` — curated grammatical markers, hand-verified.\n * - `words.frequent` — common everyday words from a subtitle-frequency corpus.\n * - `iso6393` — ISO 639-3 code for the optional franc engine.\n *\n * Curation rule for `function`: a token may appear in exactly one candidate's\n * list ONLY if that form is genuinely used by only that language among those we\n * support. Shared forms must be in every list that uses them (set-difference\n * then cancels them) or omitted from all. When in doubt, omit: a missing marker\n * only costs recall.\n */\nimport type { LanguageCode, LanguageProfile } from \"./types.js\";\nimport { FREQUENT_GENERATED } from \"./internal/frequent.js\";\n\n/** Belarusian has no subtitle frequency data — hand-curated content words. */\nconst BE_FREQUENT: readonly string[] = [\n \"навіны\",\n \"відэа\",\n \"горад\",\n \"краіна\",\n \"дзень\",\n \"жыццё\",\n \"людзі\",\n \"праца\",\n \"беларуская\",\n \"сёння\",\n \"вядомы\",\n];\n\n/** Bulgarian has no subtitle frequency data here — hand-curated content words,\n * mirroring the BE fallback. Forms whose spelling is genuinely Bulgarian\n * (e.g. `град`/`днес` vs ru `город`/`сегодня`) so set-difference can use them. */\nconst BG_FREQUENT: readonly string[] = [\n \"новини\",\n \"видео\",\n \"град\",\n \"държава\",\n \"днес\",\n \"живот\",\n \"хора\",\n \"работа\",\n \"българия\",\n \"български\",\n \"известен\",\n \"страна\",\n];\n\nconst uk: LanguageProfile = {\n code: \"uk\",\n iso6393: \"ukr\",\n // has і ї є ґ and и; lacks ё ъ ы э\n alphabet: \"абвгґдеєжзиіїйклмнопрстуфхцчшщьюя\",\n // intra-word apostrophe (uk/be use it where ru uses ъ/nothing). All three\n // codepoints: U+0027 ' U+2019 ’ U+02BC ʼ.\n marks: \"'’ʼ\",\n words: {\n function: [\n \"і\",\n \"й\",\n \"що\",\n \"як\",\n \"це\",\n \"бо\",\n \"ще\",\n \"дуже\",\n \"де\",\n \"його\",\n \"її\",\n \"але\",\n \"який\",\n \"яка\",\n \"цей\",\n \"ця\",\n \"навіть\",\n \"чи\",\n \"або\",\n \"ні\",\n \"щоб\",\n \"теж\",\n \"також\",\n \"він\",\n \"вона\",\n \"вони\",\n ],\n frequent: FREQUENT_GENERATED[\"uk\"] ?? [],\n },\n};\n\nconst ru: LanguageProfile = {\n code: \"ru\",\n iso6393: \"rus\",\n // has ё ъ ы э and и; lacks і ї є ґ ў\n alphabet: \"абвгдеёжзийклмнопрстуфхцчшщъыьэюя\",\n words: {\n function: [\n \"и\",\n \"что\",\n \"как\",\n \"это\",\n \"бы\",\n \"уже\",\n \"или\",\n \"нет\",\n \"очень\",\n \"его\",\n \"её\",\n \"ее\",\n \"где\",\n \"когда\",\n \"этот\",\n \"эта\",\n \"но\",\n \"какой\",\n \"какая\",\n \"даже\",\n \"ещё\",\n \"чтобы\",\n \"потому\",\n \"тоже\",\n \"он\",\n \"она\",\n \"они\",\n ],\n frequent: FREQUENT_GENERATED[\"ru\"] ?? [],\n },\n};\n\nconst be: LanguageProfile = {\n code: \"be\",\n iso6393: \"bel\",\n // has і ў and ы ё э; lacks и щ ъ ї є ґ\n alphabet: \"абвгдеёжзійклмнопрстуўфхцчшыьэюя\",\n // intra-word apostrophe — same uk/be keep-signal; inert between uk and be.\n marks: \"'’ʼ\",\n words: {\n function: [\n \"і\",\n \"што\",\n \"гэта\",\n \"вельмі\",\n \"дзе\",\n \"ці\",\n \"таксама\",\n \"як\",\n \"але\",\n \"бо\",\n \"каб\",\n \"ён\",\n \"яна\",\n \"яны\",\n \"быў\",\n ],\n frequent: FREQUENT_GENERATED[\"be\"] ?? BE_FREQUENT,\n },\n};\n\nconst bg: LanguageProfile = {\n code: \"bg\",\n iso6393: \"bul\",\n // 30-letter Bulgarian alphabet. Has и й щ ъ ь (ъ is a full vowel); lacks ё ы э\n // і ї є ґ ў. `ъ` is shared with ru — inert between {ru, bg}; the word rungs\n // decide, exactly the mechanism `be` relies on for its shared letters.\n alphabet: \"абвгдежзийклмнопрстуфхцчшщъьюя\",\n words: {\n // Bulgarian-distinctive grammatical markers. Shared forms are omitted.\n function: [\n \"ще\",\n \"съм\",\n \"това\",\n \"този\",\n \"тази\",\n \"който\",\n \"която\",\n \"което\",\n \"които\",\n \"защото\",\n \"също\",\n \"тя\",\n \"ние\",\n \"вие\",\n ],\n frequent: FREQUENT_GENERATED[\"bg\"] ?? BG_FREQUENT,\n },\n};\n\nconst en: LanguageProfile = {\n code: \"en\",\n iso6393: \"eng\",\n alphabet: \"abcdefghijklmnopqrstuvwxyz\",\n words: {\n function: [\n \"the\",\n \"and\",\n \"or\",\n \"but\",\n \"of\",\n \"to\",\n \"in\",\n \"on\",\n \"at\",\n \"is\",\n \"are\",\n \"was\",\n \"were\",\n \"this\",\n \"that\",\n \"for\",\n \"with\",\n \"you\",\n \"we\",\n \"they\",\n \"he\",\n \"she\",\n \"it\",\n \"his\",\n \"her\",\n \"what\",\n \"how\",\n \"when\",\n \"where\",\n \"why\",\n \"who\",\n \"which\",\n \"a\",\n \"an\",\n \"i\",\n \"my\",\n \"your\",\n ],\n frequent: FREQUENT_GENERATED[\"en\"] ?? [],\n },\n};\n\nexport { uk, ru, be, bg, en };\n\n/** Registry of shipped profiles, keyed by BCP-47 code. */\nexport const PROFILES: Readonly<Record<LanguageCode, LanguageProfile>> = { uk, ru, be, bg, en };\n\n/** BCP-47 codes for which langtell ships a ready-made {@link LanguageProfile}.\n * Handy for narrowing a caller's roster to codes that can actually classify —\n * e.g. `codes.filter(hasProfile)`. Derived from {@link PROFILES}. */\nexport const PROFILED_CODES: readonly LanguageCode[] = Object.keys(PROFILES);\n\n/** Whether langtell ships a ready-made {@link LanguageProfile} for `code`. An\n * own-property check, so inherited names (`\"toString\"`, `\"constructor\"`) read\n * as absent. */\nexport function hasProfile(code: LanguageCode): boolean {\n return Object.prototype.hasOwnProperty.call(PROFILES, code);\n}\n\n/** Resolve profiles for the given codes, skipping any without a shipped profile. */\nexport function getProfiles(codes: readonly LanguageCode[]): LanguageProfile[] {\n return codes.map((c) => PROFILES[c]).filter((p): p is LanguageProfile => p !== undefined);\n}\n"]}
|
package/dist/text.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { L as LanguageProfile, a as LanguageEvidence } from './types-BIXrkuAr.js';
|
|
2
|
+
import { Rung3Resolver } from './classify.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Producer: candidate-relative script + lexical signals from the title text.
|
|
6
|
+
*
|
|
7
|
+
* Wraps the ported snippet classifier ({@link classifyBySnippet}): noise strip →
|
|
8
|
+
* dominant-script scope → distinctive letters (rung 1) → function words (2a) →
|
|
9
|
+
* frequent words (2b). The `candidates` roster makes scoring roster-relative —
|
|
10
|
+
* `і` decides Ukrainian only when Russian is also a candidate. Sync and
|
|
11
|
+
* zero-dependency; the optional franc rung is injected via `rung3`.
|
|
12
|
+
*
|
|
13
|
+
* Emits at most one `kind: "title-script"` evidence item. The classifier's
|
|
14
|
+
* integer `margin` (the winner's lead over the runner-up) maps to a 0..1
|
|
15
|
+
* `confidence`: a verdict at all means the dominant script and the deciding rung
|
|
16
|
+
* agreed, so the floor is high; a wider lead nudges it up. With no candidates
|
|
17
|
+
* (or no usable distinctive signal) it abstains — emitting nothing rather than a
|
|
18
|
+
* coarse "unknown", since the roster decides relevance.
|
|
19
|
+
*/
|
|
20
|
+
declare function evidenceFromText(text: string | undefined, candidates?: readonly LanguageProfile[], rung3?: Rung3Resolver): LanguageEvidence[];
|
|
21
|
+
|
|
22
|
+
export { evidenceFromText };
|
package/dist/text.js
ADDED
package/dist/text.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"text.js"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/** A BCP-47 language code (e.g. `"uk"`, `"en"`, `"pt-BR"`). `"unknown"` is a
|
|
2
|
+
* sentinel value used in results, not a code. */
|
|
3
|
+
type LanguageCode = string;
|
|
4
|
+
type EvidenceKind = "title-script" | "html-lang" | "meta-content-language" | "meta-og-locale" | "http-content-language" | "source-prior" | "franc" | "chrome-ai" | "explicit-locale";
|
|
5
|
+
/** One signal contributing to a classification, kept for the audit trail. */
|
|
6
|
+
interface LanguageEvidence {
|
|
7
|
+
kind: EvidenceKind;
|
|
8
|
+
/** A language code, or the sentinel `"unknown"`. */
|
|
9
|
+
language: LanguageCode;
|
|
10
|
+
/** 0..1. */
|
|
11
|
+
confidence: number;
|
|
12
|
+
/** Producer/engine id (e.g. `"title-script"`, `"franc"`). Weights may key on this. */
|
|
13
|
+
source: string;
|
|
14
|
+
/** The raw signal value, for debugging the verdict. */
|
|
15
|
+
value: string;
|
|
16
|
+
/** Set to `false` on a script read whose winning script is owned by ≤1 roster
|
|
17
|
+
* candidate — the script alone selected the language (a lone-candidate
|
|
18
|
+
* default), not the distinctive-letter/word machinery, so the read carries no
|
|
19
|
+
* evidence that the text is *distinctively* that language. Omitted (treated as
|
|
20
|
+
* discriminating) when ≥2 same-script candidates were in play. Consumed by
|
|
21
|
+
* {@link fuse}'s `nonDiscriminatingScript` option; otherwise informational. */
|
|
22
|
+
discriminating?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** The verdict: the winning language, a confidence, and the evidence behind it. */
|
|
25
|
+
interface Classification {
|
|
26
|
+
/** A language code, or the sentinel `"unknown"`. */
|
|
27
|
+
language: LanguageCode;
|
|
28
|
+
confidence: number;
|
|
29
|
+
evidence: LanguageEvidence[];
|
|
30
|
+
}
|
|
31
|
+
/** A candidate language, used by the text engines for roster-relative scoring.
|
|
32
|
+
*
|
|
33
|
+
* Distinctiveness is computed at runtime relative to the active candidate set —
|
|
34
|
+
* the fields below are raw inputs, never pre-differenced. A minimal profile
|
|
35
|
+
* (`{ code, alphabet }`) works; the word lists and `iso6393` sharpen accuracy. */
|
|
36
|
+
interface LanguageProfile {
|
|
37
|
+
code: LanguageCode;
|
|
38
|
+
/** Lowercased alphabet. Rung 1 of the classifier. Raw — never pre-differenced. */
|
|
39
|
+
alphabet: string;
|
|
40
|
+
/** Orthographic marks that count as rung-1 evidence but are not alphabet
|
|
41
|
+
* letters — e.g. the intra-word apostrophe Ukrainian/Belarusian use where
|
|
42
|
+
* Russian uses a hard sign or nothing. Merged into the rung-1 character set;
|
|
43
|
+
* distinctiveness stays candidate-relative, so a mark shared by ≥2 candidates
|
|
44
|
+
* cancels out. Optional. */
|
|
45
|
+
marks?: string;
|
|
46
|
+
/** Curated lexical markers, split into two tiers (rungs 2a/2b). Optional — a
|
|
47
|
+
* profile with only an `alphabet` still classifies on distinctive letters. */
|
|
48
|
+
words?: {
|
|
49
|
+
/** Grammatical markers (conjunctions, prepositions, pronouns, particles),
|
|
50
|
+
* hand-auditable. Highest-precision word tier. */
|
|
51
|
+
function: readonly string[];
|
|
52
|
+
/** Corpus-frequent content words. Lower-precision backstop. */
|
|
53
|
+
frequent: readonly string[];
|
|
54
|
+
};
|
|
55
|
+
/** ISO 639-3 code, used to scope the optional franc engine's `only`
|
|
56
|
+
* restriction. Omit to skip franc for this profile. */
|
|
57
|
+
iso6393?: string;
|
|
58
|
+
}
|
|
59
|
+
type HeaderBag = Headers | Record<string, string | string[] | undefined | null>;
|
|
60
|
+
interface DetectInput {
|
|
61
|
+
text?: string;
|
|
62
|
+
html?: string;
|
|
63
|
+
headers?: HeaderBag;
|
|
64
|
+
}
|
|
65
|
+
interface DetectContext {
|
|
66
|
+
signal?: AbortSignal;
|
|
67
|
+
maxChars?: number;
|
|
68
|
+
}
|
|
69
|
+
type SourceInput = "text" | "html" | "headers";
|
|
70
|
+
/** A synchronous, dependency-free evidence source (script, HTML tags, headers). */
|
|
71
|
+
interface SyncSource {
|
|
72
|
+
readonly id: string;
|
|
73
|
+
readonly sync: true;
|
|
74
|
+
readonly inputs: readonly SourceInput[];
|
|
75
|
+
detect(input: DetectInput): LanguageEvidence[];
|
|
76
|
+
}
|
|
77
|
+
/** A possibly-expensive, asynchronous engine (franc bridge, on-device model). */
|
|
78
|
+
interface AsyncSource {
|
|
79
|
+
readonly id: string;
|
|
80
|
+
readonly sync: false;
|
|
81
|
+
readonly inputs: readonly SourceInput[];
|
|
82
|
+
isAvailable?(): boolean | Promise<boolean>;
|
|
83
|
+
detect(input: DetectInput, ctx: DetectContext): Promise<LanguageEvidence[]>;
|
|
84
|
+
}
|
|
85
|
+
type EvidenceSource = SyncSource | AsyncSource;
|
|
86
|
+
/** `true` iff the engine tuple contains any async source. Drives {@link DetectFn}. */
|
|
87
|
+
type HasAsync<E extends readonly EvidenceSource[]> = Extract<E[number], AsyncSource> extends never ? false : true;
|
|
88
|
+
/** Weights keyed by evidence `source` id or `kind`; missing keys use defaults. */
|
|
89
|
+
type Weights = Partial<Record<string, number>>;
|
|
90
|
+
/** How {@link fuse} resolves a *non-discriminating* script read — one whose
|
|
91
|
+
* winning script is owned by ≤1 roster candidate, so the script alone (not the
|
|
92
|
+
* distinctive-signal machinery) picked the language:
|
|
93
|
+
*
|
|
94
|
+
* - `"candidate"` (default) keeps the lone candidate, preserving today's
|
|
95
|
+
* behavior: a closed roster where the script is taken to imply the language.
|
|
96
|
+
* - `"unknown"` drops such a read from the verdict *unless* non-script evidence
|
|
97
|
+
* (a page tag, a `Content-Language` header) corroborates the same language —
|
|
98
|
+
* the conservative "name a language only on real evidence" policy. In a
|
|
99
|
+
* `[uk, en]` roster a Latin-only title then resolves to `unknown`, while a
|
|
100
|
+
* Latin title plus an explicit `en` `Content-Language` stays `en`. */
|
|
101
|
+
type NonDiscriminatingScript = "candidate" | "unknown";
|
|
102
|
+
interface EarlyExit {
|
|
103
|
+
/** Stop running further (cheaper-first) sources once confidence clears this. */
|
|
104
|
+
minConfidence: number;
|
|
105
|
+
}
|
|
106
|
+
interface DetectorConfig<E extends readonly EvidenceSource[] = []> {
|
|
107
|
+
candidates?: readonly LanguageProfile[];
|
|
108
|
+
engines?: E;
|
|
109
|
+
weights?: Weights;
|
|
110
|
+
earlyExit?: EarlyExit;
|
|
111
|
+
/** Forwarded to {@link fuse}. See {@link NonDiscriminatingScript}. Defaults to
|
|
112
|
+
* `"candidate"` (current behavior); opt into `"unknown"` for a roster-closed,
|
|
113
|
+
* evidence-only policy. */
|
|
114
|
+
nonDiscriminatingScript?: NonDiscriminatingScript;
|
|
115
|
+
}
|
|
116
|
+
/** The compiled detector. Synchronous when every source is sync; `Promise`-typed
|
|
117
|
+
* the moment an async engine is registered — so callers never guess `await`. */
|
|
118
|
+
type DetectFn<E extends readonly EvidenceSource[]> = HasAsync<E> extends true ? (input: DetectInput, ctx?: DetectContext) => Promise<Classification> : (input: DetectInput) => Classification;
|
|
119
|
+
|
|
120
|
+
export type { AsyncSource as A, Classification as C, DetectorConfig as D, EvidenceSource as E, HeaderBag as H, LanguageProfile as L, NonDiscriminatingScript as N, SyncSource as S, Weights as W, LanguageEvidence as a, LanguageCode as b, DetectFn as c, DetectContext as d, DetectInput as e, EarlyExit as f, EvidenceKind as g, HasAsync as h, SourceInput as i };
|
package/package.json
CHANGED
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "langtell",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Tell me the language — evidence-fusion language detection for short strings, with an auditable confidence trail.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
|
+
"author": "Oleksandr Zhuravlov",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/rejifald/langtell.git"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/rejifald/langtell#readme",
|
|
13
|
+
"bugs": "https://github.com/rejifald/langtell/issues",
|
|
7
14
|
"sideEffects": false,
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public",
|
|
17
|
+
"provenance": true
|
|
18
|
+
},
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=20"
|
|
21
|
+
},
|
|
8
22
|
"keywords": [
|
|
9
23
|
"language",
|
|
10
24
|
"language-detection",
|
|
@@ -14,7 +28,94 @@
|
|
|
14
28
|
"bcp47",
|
|
15
29
|
"script-detection"
|
|
16
30
|
],
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"import": "./dist/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./text": {
|
|
37
|
+
"types": "./dist/text.d.ts",
|
|
38
|
+
"import": "./dist/text.js"
|
|
39
|
+
},
|
|
40
|
+
"./html": {
|
|
41
|
+
"types": "./dist/html.d.ts",
|
|
42
|
+
"import": "./dist/html.js"
|
|
43
|
+
},
|
|
44
|
+
"./headers": {
|
|
45
|
+
"types": "./dist/headers.d.ts",
|
|
46
|
+
"import": "./dist/headers.js"
|
|
47
|
+
},
|
|
48
|
+
"./profiles": {
|
|
49
|
+
"types": "./dist/profiles.d.ts",
|
|
50
|
+
"import": "./dist/profiles.js"
|
|
51
|
+
},
|
|
52
|
+
"./fuse": {
|
|
53
|
+
"types": "./dist/fuse.d.ts",
|
|
54
|
+
"import": "./dist/fuse.js"
|
|
55
|
+
},
|
|
56
|
+
"./classify": {
|
|
57
|
+
"types": "./dist/classify.d.ts",
|
|
58
|
+
"import": "./dist/classify.js"
|
|
59
|
+
},
|
|
60
|
+
"./franc": {
|
|
61
|
+
"types": "./dist/franc.d.ts",
|
|
62
|
+
"import": "./dist/franc.js"
|
|
63
|
+
},
|
|
64
|
+
"./chrome-ai": {
|
|
65
|
+
"types": "./dist/chrome-ai.d.ts",
|
|
66
|
+
"import": "./dist/chrome-ai.js"
|
|
67
|
+
},
|
|
68
|
+
"./package.json": "./package.json"
|
|
69
|
+
},
|
|
17
70
|
"files": [
|
|
18
71
|
"dist"
|
|
19
|
-
]
|
|
20
|
-
|
|
72
|
+
],
|
|
73
|
+
"peerDependencies": {
|
|
74
|
+
"franc": "^6.2.0"
|
|
75
|
+
},
|
|
76
|
+
"peerDependenciesMeta": {
|
|
77
|
+
"franc": {
|
|
78
|
+
"optional": true
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"devDependencies": {
|
|
82
|
+
"@arethetypeswrong/cli": "^0.18.2",
|
|
83
|
+
"@changesets/cli": "^2.29.7",
|
|
84
|
+
"@eslint/js": "^9.39.4",
|
|
85
|
+
"@size-limit/preset-small-lib": "^11.2.0",
|
|
86
|
+
"@types/node": "^22.10.0",
|
|
87
|
+
"@vitest/coverage-v8": "^4.1.7",
|
|
88
|
+
"eslint": "^9.39.4",
|
|
89
|
+
"fallow": "^2.79.0",
|
|
90
|
+
"lefthook": "^1.13.6",
|
|
91
|
+
"prettier": "^3.8.3",
|
|
92
|
+
"publint": "^0.3.16",
|
|
93
|
+
"size-limit": "^11.2.0",
|
|
94
|
+
"tsup": "^8.5.0",
|
|
95
|
+
"typescript": "^5.9.3",
|
|
96
|
+
"typescript-eslint": "^8.46.0",
|
|
97
|
+
"vitest": "^4.1.7"
|
|
98
|
+
},
|
|
99
|
+
"scripts": {
|
|
100
|
+
"build": "tsup",
|
|
101
|
+
"dev": "tsup --watch",
|
|
102
|
+
"typecheck": "tsc --noEmit",
|
|
103
|
+
"test": "vitest run",
|
|
104
|
+
"test:watch": "vitest",
|
|
105
|
+
"test:coverage": "vitest run --coverage",
|
|
106
|
+
"lint": "eslint .",
|
|
107
|
+
"lint:fix": "eslint . --fix",
|
|
108
|
+
"format": "prettier --write .",
|
|
109
|
+
"format:check": "prettier --check .",
|
|
110
|
+
"quality": "fallow audit --base main",
|
|
111
|
+
"publint": "publint",
|
|
112
|
+
"attw": "attw --pack . --profile esm-only",
|
|
113
|
+
"size": "size-limit",
|
|
114
|
+
"package:check": "pnpm run publint && pnpm run attw",
|
|
115
|
+
"changeset": "changeset",
|
|
116
|
+
"version-packages": "changeset version",
|
|
117
|
+
"release": "pnpm run build && changeset publish",
|
|
118
|
+
"check": "pnpm run typecheck && pnpm run lint && pnpm run format:check && pnpm run test && pnpm run build",
|
|
119
|
+
"verify": "pnpm run check && pnpm run package:check && pnpm run size"
|
|
120
|
+
}
|
|
121
|
+
}
|