interscript 2.4.5 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +90 -41
  3. package/dist/cli.d.ts +25 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +327 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/detector.d.ts +22 -0
  8. package/dist/detector.d.ts.map +1 -0
  9. package/dist/detector.js +73 -0
  10. package/dist/detector.js.map +1 -0
  11. package/dist/errors.d.ts +26 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +34 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/http-loader.d.ts +42 -0
  16. package/dist/http-loader.d.ts.map +1 -0
  17. package/dist/http-loader.js +95 -0
  18. package/dist/http-loader.js.map +1 -0
  19. package/dist/index.d.ts +49 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +182 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/isc/converter.d.ts +11 -0
  24. package/dist/isc/converter.d.ts.map +1 -0
  25. package/dist/isc/converter.js +177 -0
  26. package/dist/isc/converter.js.map +1 -0
  27. package/dist/isc/index.d.ts +16 -0
  28. package/dist/isc/index.d.ts.map +1 -0
  29. package/dist/isc/index.js +15 -0
  30. package/dist/isc/index.js.map +1 -0
  31. package/dist/isc/loader.d.ts +22 -0
  32. package/dist/isc/loader.d.ts.map +1 -0
  33. package/dist/isc/loader.js +47 -0
  34. package/dist/isc/loader.js.map +1 -0
  35. package/dist/isc/parser.d.ts +14 -0
  36. package/dist/isc/parser.d.ts.map +1 -0
  37. package/dist/isc/parser.js +734 -0
  38. package/dist/isc/parser.js.map +1 -0
  39. package/dist/isc/types.d.ts +110 -0
  40. package/dist/isc/types.d.ts.map +1 -0
  41. package/dist/isc/types.js +19 -0
  42. package/dist/isc/types.js.map +1 -0
  43. package/dist/loader.d.ts +49 -0
  44. package/dist/loader.d.ts.map +1 -0
  45. package/dist/loader.js +93 -0
  46. package/dist/loader.js.map +1 -0
  47. package/dist/loaders.d.ts +23 -0
  48. package/dist/loaders.d.ts.map +1 -0
  49. package/dist/loaders.js +40 -0
  50. package/dist/loaders.js.map +1 -0
  51. package/dist/loaders.node.d.ts +25 -0
  52. package/dist/loaders.node.d.ts.map +1 -0
  53. package/dist/loaders.node.js +42 -0
  54. package/dist/loaders.node.js.map +1 -0
  55. package/dist/ml/imf/index.d.ts +6 -0
  56. package/dist/ml/imf/index.d.ts.map +1 -0
  57. package/dist/ml/imf/index.js +6 -0
  58. package/dist/ml/imf/index.js.map +1 -0
  59. package/dist/ml/imf/loader.d.ts +19 -0
  60. package/dist/ml/imf/loader.d.ts.map +1 -0
  61. package/dist/ml/imf/loader.js +59 -0
  62. package/dist/ml/imf/loader.js.map +1 -0
  63. package/dist/ml/imf/model.d.ts +28 -0
  64. package/dist/ml/imf/model.d.ts.map +1 -0
  65. package/dist/ml/imf/model.js +181 -0
  66. package/dist/ml/imf/model.js.map +1 -0
  67. package/dist/ml/imf/registry.d.ts +30 -0
  68. package/dist/ml/imf/registry.d.ts.map +1 -0
  69. package/dist/ml/imf/registry.js +140 -0
  70. package/dist/ml/imf/registry.js.map +1 -0
  71. package/dist/ml/imf/tokens.d.ts +13 -0
  72. package/dist/ml/imf/tokens.d.ts.map +1 -0
  73. package/dist/ml/imf/tokens.js +32 -0
  74. package/dist/ml/imf/tokens.js.map +1 -0
  75. package/dist/ml/index.d.ts +24 -0
  76. package/dist/ml/index.d.ts.map +1 -0
  77. package/dist/ml/index.js +25 -0
  78. package/dist/ml/index.js.map +1 -0
  79. package/dist/ml/models/rababa/cleaner.d.ts +11 -0
  80. package/dist/ml/models/rababa/cleaner.d.ts.map +1 -0
  81. package/dist/ml/models/rababa/cleaner.js +21 -0
  82. package/dist/ml/models/rababa/cleaner.js.map +1 -0
  83. package/dist/ml/models/rababa/diacritizer.d.ts +37 -0
  84. package/dist/ml/models/rababa/diacritizer.d.ts.map +1 -0
  85. package/dist/ml/models/rababa/diacritizer.js +172 -0
  86. package/dist/ml/models/rababa/diacritizer.js.map +1 -0
  87. package/dist/ml/models/rababa/encoder.d.ts +40 -0
  88. package/dist/ml/models/rababa/encoder.d.ts.map +1 -0
  89. package/dist/ml/models/rababa/encoder.js +57 -0
  90. package/dist/ml/models/rababa/encoder.js.map +1 -0
  91. package/dist/ml/models/rababa/haraqat.d.ts +49 -0
  92. package/dist/ml/models/rababa/haraqat.d.ts.map +1 -0
  93. package/dist/ml/models/rababa/haraqat.js +89 -0
  94. package/dist/ml/models/rababa/haraqat.js.map +1 -0
  95. package/dist/ml/models/rababa/index.d.ts +12 -0
  96. package/dist/ml/models/rababa/index.d.ts.map +1 -0
  97. package/dist/ml/models/rababa/index.js +14 -0
  98. package/dist/ml/models/rababa/index.js.map +1 -0
  99. package/dist/ml/models/rababa/reconciler.d.ts +29 -0
  100. package/dist/ml/models/rababa/reconciler.d.ts.map +1 -0
  101. package/dist/ml/models/rababa/reconciler.js +81 -0
  102. package/dist/ml/models/rababa/reconciler.js.map +1 -0
  103. package/dist/ml/models/secryst/index.d.ts +10 -0
  104. package/dist/ml/models/secryst/index.d.ts.map +1 -0
  105. package/dist/ml/models/secryst/index.js +12 -0
  106. package/dist/ml/models/secryst/index.js.map +1 -0
  107. package/dist/ml/models/secryst/masks.d.ts +33 -0
  108. package/dist/ml/models/secryst/masks.d.ts.map +1 -0
  109. package/dist/ml/models/secryst/masks.js +73 -0
  110. package/dist/ml/models/secryst/masks.js.map +1 -0
  111. package/dist/ml/models/secryst/translator.d.ts +31 -0
  112. package/dist/ml/models/secryst/translator.d.ts.map +1 -0
  113. package/dist/ml/models/secryst/translator.js +112 -0
  114. package/dist/ml/models/secryst/translator.js.map +1 -0
  115. package/dist/ml/models/secryst/vocab.d.ts +39 -0
  116. package/dist/ml/models/secryst/vocab.d.ts.map +1 -0
  117. package/dist/ml/models/secryst/vocab.js +85 -0
  118. package/dist/ml/models/secryst/vocab.js.map +1 -0
  119. package/dist/ml/provision/base.d.ts +14 -0
  120. package/dist/ml/provision/base.d.ts.map +1 -0
  121. package/dist/ml/provision/base.js +19 -0
  122. package/dist/ml/provision/base.js.map +1 -0
  123. package/dist/ml/provision/index.d.ts +62 -0
  124. package/dist/ml/provision/index.d.ts.map +1 -0
  125. package/dist/ml/provision/index.js +107 -0
  126. package/dist/ml/provision/index.js.map +1 -0
  127. package/dist/ml/provision/manifest.d.ts +79 -0
  128. package/dist/ml/provision/manifest.d.ts.map +1 -0
  129. package/dist/ml/provision/manifest.js +122 -0
  130. package/dist/ml/provision/manifest.js.map +1 -0
  131. package/dist/ml/registry.d.ts +35 -0
  132. package/dist/ml/registry.d.ts.map +1 -0
  133. package/dist/ml/registry.js +76 -0
  134. package/dist/ml/registry.js.map +1 -0
  135. package/dist/ml/session/index.d.ts +55 -0
  136. package/dist/ml/session/index.d.ts.map +1 -0
  137. package/dist/ml/session/index.js +57 -0
  138. package/dist/ml/session/index.js.map +1 -0
  139. package/dist/ml/session/litert-web.d.ts +50 -0
  140. package/dist/ml/session/litert-web.d.ts.map +1 -0
  141. package/dist/ml/session/litert-web.js +146 -0
  142. package/dist/ml/session/litert-web.js.map +1 -0
  143. package/dist/ml/session/onnx-node.d.ts +10 -0
  144. package/dist/ml/session/onnx-node.d.ts.map +1 -0
  145. package/dist/ml/session/onnx-node.js +62 -0
  146. package/dist/ml/session/onnx-node.js.map +1 -0
  147. package/dist/ml/session/onnx-web.d.ts +23 -0
  148. package/dist/ml/session/onnx-web.d.ts.map +1 -0
  149. package/dist/ml/session/onnx-web.js +74 -0
  150. package/dist/ml/session/onnx-web.js.map +1 -0
  151. package/dist/ml/types.d.ts +113 -0
  152. package/dist/ml/types.d.ts.map +1 -0
  153. package/dist/ml/types.js +7 -0
  154. package/dist/ml/types.js.map +1 -0
  155. package/dist/runtime/compile-item.d.ts +53 -0
  156. package/dist/runtime/compile-item.d.ts.map +1 -0
  157. package/dist/runtime/compile-item.js +278 -0
  158. package/dist/runtime/compile-item.js.map +1 -0
  159. package/dist/runtime/context.d.ts +33 -0
  160. package/dist/runtime/context.d.ts.map +1 -0
  161. package/dist/runtime/context.js +67 -0
  162. package/dist/runtime/context.js.map +1 -0
  163. package/dist/runtime/executor.d.ts +18 -0
  164. package/dist/runtime/executor.d.ts.map +1 -0
  165. package/dist/runtime/executor.js +228 -0
  166. package/dist/runtime/executor.js.map +1 -0
  167. package/dist/runtime/interpreter.d.ts +30 -0
  168. package/dist/runtime/interpreter.d.ts.map +1 -0
  169. package/dist/runtime/interpreter.js +130 -0
  170. package/dist/runtime/interpreter.js.map +1 -0
  171. package/dist/stdlib/ml.d.ts +55 -0
  172. package/dist/stdlib/ml.d.ts.map +1 -0
  173. package/dist/stdlib/ml.js +114 -0
  174. package/dist/stdlib/ml.js.map +1 -0
  175. package/dist/stdlib.d.ts +96 -0
  176. package/dist/stdlib.d.ts.map +1 -0
  177. package/dist/stdlib.js +160 -0
  178. package/dist/stdlib.js.map +1 -0
  179. package/dist/types.d.ts +167 -0
  180. package/dist/types.d.ts.map +1 -0
  181. package/dist/types.js +13 -0
  182. package/dist/types.js.map +1 -0
  183. package/package.json +78 -18
  184. package/LICENSE.md +0 -31
  185. package/README.adoc +0 -78
  186. package/src/maps/acadsin-zho-Hani-Latn-2002.js +0 -9
  187. package/src/maps/alalc-amh-Ethi-Latn-1997.js +0 -8
  188. package/src/maps/alalc-amh-Ethi-Latn-2011.js +0 -7
  189. package/src/maps/alalc-ara-Arab-Latn-1997.js +0 -8
  190. package/src/maps/alalc-asm-Deva-Latn-1997.js +0 -50
  191. package/src/maps/alalc-asm-Deva-Latn-2012.js +0 -7
  192. package/src/maps/alalc-aze-Arab-Latn-1997.js +0 -11
  193. package/src/maps/alalc-aze-Cyrl-Latn-1997.js +0 -9
  194. package/src/maps/alalc-bel-Cyrl-Latn-1997.js +0 -8
  195. package/src/maps/alalc-ben-Beng-Latn-1997.js +0 -52
  196. package/src/maps/alalc-ben-Beng-Latn-2017.js +0 -9
  197. package/src/maps/alalc-bul-Cyrl-Latn-1997.js +0 -10
  198. package/src/maps/alalc-div-Thaa-Latn-1997.js +0 -38
  199. package/src/maps/alalc-div-Thaa-Latn-2012.js +0 -7
  200. package/src/maps/alalc-ell-Grek-Latn-1997.js +0 -25
  201. package/src/maps/alalc-ell-Grek-Latn-2010.js +0 -27
  202. package/src/maps/alalc-fas-Arab-Latn-1997.js +0 -11
  203. package/src/maps/alalc-guj-Gujr-Latn-1997.js +0 -50
  204. package/src/maps/alalc-guj-Gujr-Latn-2011.js +0 -7
  205. package/src/maps/alalc-hin-Deva-Latn-1997.js +0 -60
  206. package/src/maps/alalc-hin-Deva-Latn-2011.js +0 -7
  207. package/src/maps/alalc-kan-Kana-Latn-1997.js +0 -51
  208. package/src/maps/alalc-kan-Kana-Latn-2011.js +0 -7
  209. package/src/maps/alalc-kat-Geok-Latn-1997.js +0 -8
  210. package/src/maps/alalc-kat-Geok-Latn-2011.js +0 -7
  211. package/src/maps/alalc-kat-Geor-Latn-1997.js +0 -8
  212. package/src/maps/alalc-kat-Geor-Latn-2011.js +0 -7
  213. package/src/maps/alalc-kor-Hang-Latn-1997.js +0 -9
  214. package/src/maps/alalc-mal-Mlym-Latn-1997.js +0 -52
  215. package/src/maps/alalc-mal-Mlym-Latn-2012.js +0 -7
  216. package/src/maps/alalc-mar-Deva-Latn-1997.js +0 -13
  217. package/src/maps/alalc-mar-Deva-Latn-2011.js +0 -7
  218. package/src/maps/alalc-mkd-Cyrl-Latn-1997.js +0 -17
  219. package/src/maps/alalc-mkd-Cyrl-Latn-2013.js +0 -17
  220. package/src/maps/alalc-mon-Cyrl-Latn-1997.js +0 -8
  221. package/src/maps/alalc-ori-Orya-Latn-1997.js +0 -55
  222. package/src/maps/alalc-ori-Orya-Latn-2011.js +0 -7
  223. package/src/maps/alalc-pan-Guru-Latn-1997.js +0 -17
  224. package/src/maps/alalc-pan-Guru-Latn-2011.js +0 -7
  225. package/src/maps/alalc-pli-Deva-Latn-2012.js +0 -13
  226. package/src/maps/alalc-pra-Deva-Latn-2012.js +0 -7
  227. package/src/maps/alalc-rus-Cyrl-Latn-1997.js +0 -9
  228. package/src/maps/alalc-rus-Cyrl-Latn-2012.js +0 -9
  229. package/src/maps/alalc-san-Deva-Latn-2012.js +0 -49
  230. package/src/maps/alalc-sin-Sinh-Latn-1997.js +0 -54
  231. package/src/maps/alalc-sin-Sinh-Latn-2011.js +0 -7
  232. package/src/maps/alalc-srp-Cyrl-Latn-1997.js +0 -17
  233. package/src/maps/alalc-srp-Cyrl-Latn-2013.js +0 -15
  234. package/src/maps/alalc-tam-Taml-Latn-1997.js +0 -9
  235. package/src/maps/alalc-tam-Taml-Latn-2011.js +0 -7
  236. package/src/maps/alalc-tel-Telu-Latn-1997.js +0 -54
  237. package/src/maps/alalc-tel-Telu-Latn-2011.js +0 -7
  238. package/src/maps/alalc-tir-Ethi-Latn-1997.js +0 -8
  239. package/src/maps/alalc-tir-Ethi-Latn-2011.js +0 -7
  240. package/src/maps/alalc-ukr-Cyrl-Latn-1997.js +0 -9
  241. package/src/maps/alalc-ukr-Cyrl-Latn-2011.js +0 -7
  242. package/src/maps/apcbg-bul-Cyrl-Latn-1995.js +0 -8
  243. package/src/maps/az-aze-Cyrl-Latn-1939.js +0 -8
  244. package/src/maps/az-aze-Cyrl-Latn-1958.js +0 -11
  245. package/src/maps/bas-rus-Cyrl-Latn-2017-bss.js +0 -10
  246. package/src/maps/bas-rus-Cyrl-Latn-2017-oss.js +0 -10
  247. package/src/maps/bgn-jpn-Hrkt-Latn-1962.js +0 -10
  248. package/src/maps/bgn-kor-Hang-Latn-1943.js +0 -9
  249. package/src/maps/bgn-kor-Kore-Latn-1943.js +0 -10
  250. package/src/maps/bgna-bul-Cyrl-Latn-2006.js +0 -7
  251. package/src/maps/bgna-bul-Cyrl-Latn-2009.js +0 -7
  252. package/src/maps/bgnpcgn-amh-Ethi-Latn-1967.js +0 -8
  253. package/src/maps/bgnpcgn-ara-Arab-Latn-1956.js +0 -25
  254. package/src/maps/bgnpcgn-arm-Armn-Latn-1981.js +0 -8
  255. package/src/maps/bgnpcgn-aze-Cyrl-Latn-1993.js +0 -8
  256. package/src/maps/bgnpcgn-bak-Cyrl-Latn-2007.js +0 -16
  257. package/src/maps/bgnpcgn-bal-Arab-Latn-2008.js +0 -9
  258. package/src/maps/bgnpcgn-bel-Cyrl-Latn-1979.js +0 -12
  259. package/src/maps/bgnpcgn-bul-Cyrl-Latn-1952.js +0 -12
  260. package/src/maps/bgnpcgn-bul-Cyrl-Latn-2013.js +0 -10
  261. package/src/maps/bgnpcgn-che-Cyrl-Latn-2008.js +0 -15
  262. package/src/maps/bgnpcgn-deu-Latn-Latn-2000.js +0 -12
  263. package/src/maps/bgnpcgn-div-Thaa-Latn-1972.js +0 -13
  264. package/src/maps/bgnpcgn-div-Thaa-Latn-1988.js +0 -9
  265. package/src/maps/bgnpcgn-ell-Grek-Latn-1962.js +0 -52
  266. package/src/maps/bgnpcgn-ell-Grek-Latn-1996.js +0 -7
  267. package/src/maps/bgnpcgn-fao-Latn-Latn-1964.js +0 -11
  268. package/src/maps/bgnpcgn-fao-Latn-Latn-1968.js +0 -7
  269. package/src/maps/bgnpcgn-fas-Arab-Latn-1956.js +0 -8
  270. package/src/maps/bgnpcgn-isl-Latn-Latn-1964.js +0 -10
  271. package/src/maps/bgnpcgn-isl-Latn-Latn-1968.js +0 -7
  272. package/src/maps/bgnpcgn-jpn-Hrkt-Latn-1976.js +0 -10
  273. package/src/maps/bgnpcgn-kat-Geor-Latn-1981.js +0 -8
  274. package/src/maps/bgnpcgn-kat-Geor-Latn-2009.js +0 -7
  275. package/src/maps/bgnpcgn-kaz-Cyrl-Latn-1979.js +0 -8
  276. package/src/maps/bgnpcgn-kir-Cyrl-Latn-1979.js +0 -8
  277. package/src/maps/bgnpcgn-kor-Hang-Latn-kn-1945.js +0 -52
  278. package/src/maps/bgnpcgn-kor-Hang-Latn-rok-2011.js +0 -8
  279. package/src/maps/bgnpcgn-kor-Kore-Latn-rok-2011.js +0 -8
  280. package/src/maps/bgnpcgn-kur-Arab-Latn-2007.js +0 -9
  281. package/src/maps/bgnpcgn-mkd-Cyrl-Latn-1981.js +0 -15
  282. package/src/maps/bgnpcgn-mkd-Cyrl-Latn-2013.js +0 -17
  283. package/src/maps/bgnpcgn-mon-Cyrl-Latn-1964.js +0 -12
  284. package/src/maps/bgnpcgn-nep-Deva-Latn-2011.js +0 -13
  285. package/src/maps/bgnpcgn-per-Arab-Latn-1958.js +0 -10
  286. package/src/maps/bgnpcgn-prs-Arab-Latn-2007.js +0 -25
  287. package/src/maps/bgnpcgn-prs-Arab-Latn-yaghoubi.js +0 -8
  288. package/src/maps/bgnpcgn-pus-Arab-Latn-1968.js +0 -26
  289. package/src/maps/bgnpcgn-ron-Cyrl-Latn-2002.js +0 -23
  290. package/src/maps/bgnpcgn-rue-Cyrl-Latn-2016.js +0 -8
  291. package/src/maps/bgnpcgn-rus-Cyrl-Latn-1947.js +0 -52
  292. package/src/maps/bgnpcgn-sme-Latn-Latn-1984.js +0 -8
  293. package/src/maps/bgnpcgn-srp-Cyrl-Latn-1962.js +0 -7
  294. package/src/maps/bgnpcgn-srp-Cyrl-Latn-2005.js +0 -15
  295. package/src/maps/bgnpcgn-tat-Cyrl-Latn-2007.js +0 -27
  296. package/src/maps/bgnpcgn-tgk-Cyrl-Latn-1994.js +0 -12
  297. package/src/maps/bgnpcgn-tir-Ethi-Latn-2007.js +0 -8
  298. package/src/maps/bgnpcgn-ukr-Cyrl-Latn-1965.js +0 -9
  299. package/src/maps/bgnpcgn-ukr-Cyrl-Latn-2019.js +0 -9
  300. package/src/maps/bgnpcgn-urd-Arab-Latn-2007.js +0 -25
  301. package/src/maps/bgnpcgn-uzb-Cyrl-Latn-1979.js +0 -12
  302. package/src/maps/bgnpcgn-uzb-Cyrl-Latn-2000.js +0 -11
  303. package/src/maps/bgnpcgn-zho-Hans-Latn-1979.js +0 -8
  304. package/src/maps/bis-asm-Beng-Latn-13194-1991.js +0 -14
  305. package/src/maps/bis-ben-Beng-Latn-13194-1991.js +0 -14
  306. package/src/maps/bis-dev-Deva-Latn-13194-1991.js +0 -14
  307. package/src/maps/bis-guj-Gujr-Latn-13194-1991.js +0 -14
  308. package/src/maps/bis-kan-Kana-Latn-13194-1991.js +0 -14
  309. package/src/maps/bis-mlm-Mlym-Latn-13194-1991.js +0 -14
  310. package/src/maps/bis-ori-Orya-Latn-13194-1991.js +0 -14
  311. package/src/maps/bis-pnj-Guru-Latn-13194-1991.js +0 -14
  312. package/src/maps/bis-tel-Telu-Latn-13194-1991.js +0 -14
  313. package/src/maps/bis-tml-Taml-Latn-13194-1991.js +0 -14
  314. package/src/maps/by-bel-Cyrl-Latn-1998.js +0 -19
  315. package/src/maps/by-bel-Cyrl-Latn-2007.js +0 -7
  316. package/src/maps/din-grc-Grek-Latn-31634-2011-t1.js +0 -23
  317. package/src/maps/din-hin-Deva-Latn-33904-2018.js +0 -9
  318. package/src/maps/din-kat-Geor-Latn-32707-2010.js +0 -8
  319. package/src/maps/din-mar-Deva-Latn-33904-2018.js +0 -9
  320. package/src/maps/din-nep-Deva-Latn-33904-2018.js +0 -9
  321. package/src/maps/din-pli-Deva-Latn-33904-2018.js +0 -7
  322. package/src/maps/din-pra-Deva-Latn-33904-2018.js +0 -7
  323. package/src/maps/din-san-Deva-Latn-33904-2018.js +0 -51
  324. package/src/maps/din-tam-Taml-Latn-33903-2016.js +0 -34
  325. package/src/maps/dos-nep-Deva-Latn-1997.js +0 -9
  326. package/src/maps/elot-ell-Grek-Latn-743-1982-tl.js +0 -53
  327. package/src/maps/elot-ell-Grek-Latn-743-1982-ts.js +0 -53
  328. package/src/maps/elot-ell-Grek-Latn-743-2001-tl.js +0 -7
  329. package/src/maps/elot-ell-Grek-Latn-743-2001-ts.js +0 -7
  330. package/src/maps/ggg-kat-Geor-Latn-2002.js +0 -8
  331. package/src/maps/gki-bel-Cyrl-Latn-1992.js +0 -9
  332. package/src/maps/gki-bel-Cyrl-Latn-2000.js +0 -18
  333. package/src/maps/gost-rus-Cyrl-Latn-16876-71-1983.js +0 -10
  334. package/src/maps/gost-rus-Cyrl-Latn-7.79-2000-2002.js +0 -9
  335. package/src/maps/hk-yue-Hani-Latn-1888.js +0 -10
  336. package/src/maps/icao-bel-Cyrl-Latn-9303.js +0 -8
  337. package/src/maps/icao-bul-Cyrl-Latn-9303.js +0 -8
  338. package/src/maps/icao-fas-Arab-Latn-9303.js +0 -8
  339. package/src/maps/icao-heb-Hebr-Latn-9303.js +0 -8
  340. package/src/maps/icao-mkd-Cyrl-Latn-9303.js +0 -8
  341. package/src/maps/icao-rus-Cyrl-Latn-9303.js +0 -8
  342. package/src/maps/icao-srp-Cyrl-Latn-9303.js +0 -8
  343. package/src/maps/icao-ukr-Cyrl-Latn-9303.js +0 -8
  344. package/src/maps/index.json +0 -1
  345. package/src/maps/iso-ara-Arab-Latn-233-1984.js +0 -24
  346. package/src/maps/iso-ara-Arab-Latn-233-2-1993.js +0 -12
  347. package/src/maps/iso-asm-Beng-Latn-15919-2001.js +0 -9
  348. package/src/maps/iso-ben-Beng-Latn-15919-2001.js +0 -9
  349. package/src/maps/iso-ell-Grek-Latn-843-1997-t1.js +0 -15
  350. package/src/maps/iso-ell-Grek-Latn-843-1997-t2.js +0 -9
  351. package/src/maps/iso-guj-Gujr-Latn-15919-2001.js +0 -9
  352. package/src/maps/iso-hin-Deva-Latn-15919-2001.js +0 -7
  353. package/src/maps/iso-inc-Deva-Latn-15919-2001.js +0 -7
  354. package/src/maps/iso-jpn-Hrkt-Latn-3602-1989.js +0 -10
  355. package/src/maps/iso-kan-Kana-Latn-15919-2001.js +0 -9
  356. package/src/maps/iso-kat-Geor-Latn-9984-1996.js +0 -8
  357. package/src/maps/iso-kor-Hang-Latn-1996-method1.js +0 -14
  358. package/src/maps/iso-kor-Hang-Latn-1996-method2.js +0 -13
  359. package/src/maps/iso-mal-Mlym-Latn-15919-2001.js +0 -12
  360. package/src/maps/iso-mar-Deva-Latn-15919-2001.js +0 -7
  361. package/src/maps/iso-nep-Deva-Latn-15919-2001.js +0 -7
  362. package/src/maps/iso-ori-Orya-Latn-15919-2001.js +0 -9
  363. package/src/maps/iso-pan-Guru-Latn-15919-2001.js +0 -9
  364. package/src/maps/iso-pli-Beng-Latn-15919-2001.js +0 -7
  365. package/src/maps/iso-pli-Deva-Latn-15919-2001.js +0 -7
  366. package/src/maps/iso-pli-Sinh-Latn-15919-2001.js +0 -9
  367. package/src/maps/iso-pli-Thai-Latn-15919-2001.js +0 -7
  368. package/src/maps/iso-pra-Deva-Latn-15919-2001.js +0 -7
  369. package/src/maps/iso-prs-Arab-Latn-233-3-1999.js +0 -8
  370. package/src/maps/iso-rus-Cyrl-Latn-9-1995.js +0 -8
  371. package/src/maps/iso-san-Deva-Latn-15919-2001.js +0 -9
  372. package/src/maps/iso-tam-Taml-Latn-15919-2001.js +0 -9
  373. package/src/maps/iso-tel-Telu-Latn-15919-2001.js +0 -9
  374. package/src/maps/iso-tha-Thai-Latn-11940-1998.js +0 -9
  375. package/src/maps/kp-kor-Hang-Latn-2002.js +0 -78
  376. package/src/maps/lshk-yue-Hani-Latn-jyutping-1993.js +0 -8
  377. package/src/maps/masm-mon-Cyrl-Latn-5217-2012.js +0 -8
  378. package/src/maps/masm-mon-Latn-Cyrl-5217-2012.js +0 -18
  379. package/src/maps/mext-jpn-Hrkt-Latn-1954.js +0 -16
  380. package/src/maps/moct-kor-Hang-Latn-2000.js +0 -112
  381. package/src/maps/mofa-jpn-Hrkt-Latn-1989.js +0 -14
  382. package/src/maps/mv-div-Thaa-Latn-1987.js +0 -58
  383. package/src/maps/mvd-bel-Cyrl-Latn-2008.js +0 -36
  384. package/src/maps/mvd-bel-Cyrl-Latn-2010.js +0 -11
  385. package/src/maps/mvd-rus-Cyrl-Latn-2008.js +0 -19
  386. package/src/maps/mvd-rus-Cyrl-Latn-2010.js +0 -9
  387. package/src/maps/odni-ara-Arab-Latn-2004.js +0 -7
  388. package/src/maps/odni-ara-Arab-Latn-2015.js +0 -10
  389. package/src/maps/odni-aze-Cyrl-Latn-2015.js +0 -18
  390. package/src/maps/odni-bel-Cyrl-Latn-2015.js +0 -8
  391. package/src/maps/odni-bul-Cyrl-Latn-2005.js +0 -8
  392. package/src/maps/odni-bul-Cyrl-Latn-2015.js +0 -13
  393. package/src/maps/odni-che-Cyrl-Latn-2015.js +0 -13
  394. package/src/maps/odni-fas-Arab-Latn-2004.js +0 -8
  395. package/src/maps/odni-fas-Arab-Latn-2015.js +0 -8
  396. package/src/maps/odni-hin-Deva-Latn-2004.js +0 -8
  397. package/src/maps/odni-hin-Deva-Latn-2015.js +0 -8
  398. package/src/maps/odni-kat-Geor-Latn-2015.js +0 -8
  399. package/src/maps/odni-kaz-Cyrl-Latn-2015.js +0 -20
  400. package/src/maps/odni-kir-Cyrl-Latn-2015.js +0 -18
  401. package/src/maps/odni-kor-Hang-Latn-2015.js +0 -92
  402. package/src/maps/odni-mkd-Cyrl-Latn-2005.js +0 -7
  403. package/src/maps/odni-mkd-Cyrl-Latn-2015.js +0 -8
  404. package/src/maps/odni-prs-Arab-Latn-2004.js +0 -9
  405. package/src/maps/odni-prs-Arab-Latn-2015.js +0 -9
  406. package/src/maps/odni-pus-Arab-Latn-2011.js +0 -10
  407. package/src/maps/odni-rus-Cyrl-Latn-2015.js +0 -8
  408. package/src/maps/odni-srp-Cyrl-Latn-2005.js +0 -7
  409. package/src/maps/odni-srp-Cyrl-Latn-2015.js +0 -8
  410. package/src/maps/odni-tat-Cyrl-Latn-2015.js +0 -19
  411. package/src/maps/odni-tgk-Cyrl-Latn-2015.js +0 -21
  412. package/src/maps/odni-tuk-Cyrl-Latn-2015.js +0 -13
  413. package/src/maps/odni-uig-Cyrl-Latn-2015.js +0 -17
  414. package/src/maps/odni-ukr-Cyrl-Latn-2015.js +0 -9
  415. package/src/maps/odni-urd-Arab-Latn-2015.js +0 -8
  416. package/src/maps/odni-uzb-Cyrl-Latn-2015.js +0 -13
  417. package/src/maps/posix.js +0 -5
  418. package/src/maps/sac-zho-Hans-Latn-1979.js +0 -8
  419. package/src/maps/sasm-mon-Mong-Latn-general-1978.js +0 -8
  420. package/src/maps/sasm-mon-Mong-Latn-phonetic-1978.js +0 -9
  421. package/src/maps/ses-ara-Arab-Latn-1930.js +0 -10
  422. package/src/maps/stategeocadastre-ukr-Cyrl-Latn-1993.js +0 -19
  423. package/src/maps/ua-ukr-Cyrl-Latn-1996.js +0 -21
  424. package/src/maps/ua-ukr-Cyrl-Latn-2007.js +0 -16
  425. package/src/maps/ua-ukr-Cyrl-Latn-2010.js +0 -11
  426. package/src/maps/un-amh-Ethi-Latn-2016.js +0 -9
  427. package/src/maps/un-ara-Arab-Latn-1971.js +0 -13
  428. package/src/maps/un-ara-Arab-Latn-1972.js +0 -13
  429. package/src/maps/un-ara-Arab-Latn-2017.js +0 -24
  430. package/src/maps/un-asm-Beng-Latn-1972.js +0 -50
  431. package/src/maps/un-bel-Cyrl-Latn-2007.js +0 -7
  432. package/src/maps/un-ben-Beng-Latn-2016.js +0 -8
  433. package/src/maps/un-bul-Cyrl-Latn-1977.js +0 -14
  434. package/src/maps/un-ell-Grek-Latn-1987-phonetic.js +0 -83
  435. package/src/maps/un-ell-Grek-Latn-1987-tl.js +0 -7
  436. package/src/maps/un-ell-Grek-Latn-1987-ts.js +0 -7
  437. package/src/maps/un-guj-Gujr-Latn-1972.js +0 -45
  438. package/src/maps/un-hin-Deva-Latn-2016.js +0 -91
  439. package/src/maps/un-kan-Kana-Latn-2016.js +0 -45
  440. package/src/maps/un-mal-Mlym-Latn-1972.js +0 -48
  441. package/src/maps/un-mar-Deva-Latn-2016.js +0 -11
  442. package/src/maps/un-mkd-Cyrl-Latn-1977.js +0 -21
  443. package/src/maps/un-mon-Mong-Latn-general-2013.js +0 -7
  444. package/src/maps/un-mon-Mong-Latn-phonetic-2013.js +0 -7
  445. package/src/maps/un-nep-Deva-Latn-1972.js +0 -91
  446. package/src/maps/un-nep-Deva-Latn-2013.js +0 -7
  447. package/src/maps/un-ori-Orya-Latn-1972.js +0 -48
  448. package/src/maps/un-pan-Guru-Latn-1972.js +0 -87
  449. package/src/maps/un-prs-Arab-Latn-1967.js +0 -11
  450. package/src/maps/un-rus-Cyrl-Latn-1987.js +0 -9
  451. package/src/maps/un-sin-Sinh-Latn-1972.js +0 -46
  452. package/src/maps/un-srp-Cyrl-Latn-1997.js +0 -7
  453. package/src/maps/un-tam-Taml-Latn-1972.js +0 -34
  454. package/src/maps/un-tel-Telu-Latn-1972.js +0 -46
  455. package/src/maps/un-ukr-Cyrl-Latn-1998.js +0 -10
  456. package/src/maps/un-ukr-Cyrl-Latn-2012.js +0 -7
  457. package/src/maps/un-urd-Arab-Latn-1972.js +0 -25
  458. package/src/maps/unicode.js +0 -7
  459. package/src/maps/var-Cyrl.js +0 -7
  460. package/src/maps/var-amh-Ethi-Latn-eae-2003.js +0 -8
  461. package/src/maps/var-gez-Ethi-Latn-eae-2003.js +0 -7
  462. package/src/maps/var-hin-Deva-Latn-hunterian-1872.js +0 -12
  463. package/src/maps/var-jpn-Hrkt-Latn-hepburn-1886.js +0 -18
  464. package/src/maps/var-jpn-Hrkt-Latn-hepburn-1954.js +0 -17
  465. package/src/maps/var-kor-Hang-Hang-jamo.js +0 -8
  466. package/src/maps/var-kor-Hang-Latn-mr-1939.js +0 -355
  467. package/src/maps/var-kor-Kore-Hang-2013.js +0 -8
  468. package/src/maps/var-kor-Kore-Latn-mr-1939.js +0 -10
  469. package/src/maps/var-kor.js +0 -19
  470. package/src/maps/var-mar-Deva-Latn-hunterian-1872.js +0 -7
  471. package/src/maps/var-mon-Mong-Latn-1930.js +0 -8
  472. package/src/maps/var-mon-Mong-Latn-lessing.js +0 -14
  473. package/src/maps/var-mon-Mong-Latn-vpmc.js +0 -10
  474. package/src/maps/var-pra-Deva-Latn-iast-1912.js +0 -7
  475. package/src/maps/var-san-Deva-Latn-iast-1912.js +0 -9
  476. package/src/maps/var-zho-Hani-Latn-wd-1979.js +0 -13
  477. package/src/stdlib.js +0 -294
  478. package/test/test.js +0 -26
package/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ BSD 2-Clause License
2
+
3
+ Copyright (c) 2026 Ribose Inc. All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without modification,
6
+ are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice,
9
+ this list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25
+ THE POSSIBILITY OF SUCH DAMAGE.
package/README.md CHANGED
@@ -1,74 +1,123 @@
1
- # Interscript-JS: Interoperable Script Conversion Systems for JavaScript
1
+ # Interscript-TS
2
2
 
3
- ## Purpose
3
+ [![CI](https://github.com/interscript/interscript-ts/actions/workflows/ci.yml/badge.svg)](https://github.com/interscript/interscript-ts/actions/workflows/ci.yml)
4
+ [![npm](https://img.shields.io/npm/v/interscript)](https://www.npmjs.com/package/interscript)
4
5
 
5
- This repository contains code for the Interscript JavaScript runtime ("Interscript-JS").
6
+ TypeScript runtime for [Interscript](https://www.interscript.org) interoperable script conversion systems.
6
7
 
7
- This software allows performing script conversions by using the
8
- https://github.com/interscript/maps[default set of Interscript maps]
9
- hosted at GitHub.
8
+ A TypeScript-native port of the [Ruby runtime](https://github.com/interscript/interscript-ruby), designed for modern Node.js, bundlers, and the browser. Consumes JSON IR (intermediate representation) emitted by the Ruby gem's `Compiler::JsonIR`.
10
9
 
11
- Interscript is a project for interoperable script conversion systems
12
- and provides executable runtimes for multiple platforms.
13
- Full documentation available https://github.com/interscript/interscript/[here].
10
+ ## Status
14
11
 
12
+ 🟡 **v0.1 — preview.** 4/5 sample maps achieve byte-exact Ruby parity. See [TODO.complete/42](https://github.com/interscript/interscript/blob/main/TODO.complete/42-parallel-rule-semantics.md) for the remaining gap.
15
13
 
16
- ## Integration
14
+ ## Installation
17
15
 
18
- This section provides instructions on how to utilize Interscript-JS
19
- with your application.
16
+ ```bash
17
+ npm install interscript
18
+ ```
19
+
20
+ ## Quick start
20
21
 
21
- Interscript-JS can be used as a JS NPM library and integrated with
22
- other JS applications.
22
+ ```typescript
23
+ import { transliterate, configure, bundledStrategy } from "interscript"
23
24
 
24
- ### Configuration for NPM
25
+ // Load IR maps from a JSON dictionary (e.g. fetched, bundled, or read from disk)
26
+ configure({
27
+ strategies: [bundledStrategy({
28
+ "bgnpcgn-ukr-Cyrl-Latn-2019": { /* IR */ },
29
+ })],
30
+ })
25
31
 
26
- ```shell
27
- $ npm install interscript
32
+ transliterate("bgnpcgn-ukr-Cyrl-Latn-2019", "Антон") // → "Anton"
33
+ transliterate("bgnpcgn-deu-Latn-Latn-2000", "Tschüß!") // → "Tschueß!"
34
+ transliterate("odni-rus-Cyrl-Latn-2015", "привет") // → "privet"
35
+ transliterate("alalc-amh-Ethi-Latn-2011", "ኢትዮጵያ") // → "ʼiteyop̣eyā"
28
36
  ```
29
37
 
30
- == Usage
38
+ ## Filesystem loader (Node)
39
+
40
+ ```typescript
41
+ import { configure, transliterate, filesystemStrategy } from "interscript"
31
42
 
32
- === Usage in Node.js
43
+ configure({ strategies: [filesystemStrategy("./maps")] })
44
+ // reads `./maps/<systemCode>.json` on demand, caches
45
+ ```
46
+
47
+ ## CLI
33
48
 
34
- ```javascript
35
- var Interscript = require('interscript');
36
- Interscript.load_map('bgnpcgn-ukr-Cyrl-Latn-2019').then(function() {
37
- alert(Interscript.transliterate('bgnpcgn-ukr-Cyrl-Latn-2019', prompt()));
38
- });
49
+ ```bash
50
+ npx interscript -s bgnpcgn-ukr-Cyrl-Latn-2019 -i input.txt --maps-dir ./maps
39
51
  ```
40
52
 
53
+ Reads stdin if `-i` is omitted; writes stdout if `-o` is omitted.
41
54
 
42
- === Usage in web browsers
55
+ ## Architecture
43
56
 
44
- Please consult `js/index.html`.
57
+ | Principle | Implementation |
58
+ |-----------|----------------|
59
+ | **OCP** | Discriminated unions for AST; new node kinds add via variants + executor registry entries |
60
+ | **MECE** | One responsibility per module: `errors`, `types`, `stdlib`, `loader`, `loaders`, `detector`, `runtime/{context,compile-item,executor,interpreter}` |
61
+ | **DRY** | `compileItem` shared by all executors; `ExecutionContext` shared state |
62
+ | **Model-driven** | `types.ts` defines domain (Stage, Rule, Item); everything else references it |
63
+ | **Performance** | Trie-based parallel replace (O(n) single pass), cached maps, lazy alias resolution |
45
64
 
65
+ ### Public API
46
66
 
47
- === Usage in Webpack
67
+ | Ruby | TypeScript |
68
+ |------|------------|
69
+ | `Interscript.transliterate(systemCode, string)` | `transliterate(systemCode, input, stage?)` |
70
+ | `Interscript.load(systemCode)` | `loadMap(systemCode)` |
71
+ | `Interscript.detect(input, output)` | `detect(input, output, opts?)` |
48
72
 
49
- This library should be mostly compatible with webpack. It may be necessary to
50
- supply a path to the maps, as those are not bundled by default.
73
+ ### Generating JSON IR
51
74
 
52
- To do so, you need to do something like:
75
+ The Ruby gem ships `Compiler::JsonIR` (PR [#757](https://github.com/interscript/interscript-ruby/pull/757)):
53
76
 
54
- ```javascript
55
- Interscript.map_path = "/node_modules/interscript/src/maps/";
77
+ ```bash
78
+ cd interscript-ruby
79
+ bundle exec rake compile:json_ir[target_directory]
56
80
  ```
57
81
 
82
+ Or programmatically:
58
83
 
59
- === Getting a list of available maps
84
+ ```ruby
85
+ require "interscript/compiler/json_ir"
86
+ Interscript::Compiler::JsonIR.call(Interscript.parse(map_name)).code
87
+ ```
60
88
 
61
- The following code retrieves the full list of maps available.
89
+ ## Development
62
90
 
63
- ```javascript
64
- Interscript.load_map_list().then(function() {
65
- var list = Interscript.map_list();
66
- });
91
+ ```bash
92
+ npm ci
93
+ npm test # 118 unit + property + edge tests
94
+ npm run test:coverage # 80% thresholds enforced
95
+ npm run test:bench # benchmark suite (regression detection)
96
+ npm run test:parity # Ruby parity tests (requires fixtures)
97
+ npm run lint
98
+ npm run build
67
99
  ```
68
100
 
101
+ Generate fresh parity fixtures (requires Ruby + interscript gem):
102
+
103
+ ```bash
104
+ npm run gen:parity
105
+ ```
106
+
107
+ ## Test coverage
108
+
109
+ - **Unit:** stdlib, interpreter, executor, compile-item, loader, errors, detector
110
+ - **Property:** deterministic PRNG; round-trip, idempotence, longest-match invariants
111
+ - **Edge cases:** empty input, 10k chars, astral plane, determinism
112
+ - **Parity:** byte-exact comparison with Ruby interpreter across 5 sample maps
113
+ - **Bench:** trie reuse, parallel replace, end-to-end transliteration
114
+
115
+ ## License
69
116
 
70
- == Copyright & license
117
+ BSD-2-Clause Ribose Inc.
71
118
 
72
- This is a Ribose project. Copyright Ribose.
119
+ ## See also
73
120
 
74
- License: BSD 2-clause
121
+ - [Interscript Ruby](https://github.com/interscript/interscript-ruby) — reference runtime
122
+ - [Interscript maps](https://github.com/interscript/maps) — map corpus
123
+ - [Interscript.org](https://www.interscript.org) — main site
package/dist/cli.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * interscript-ts CLI — transliteration power tool.
4
+ *
5
+ * Subcommands:
6
+ * interscript-ts transliterate <systemCode> [options] (alias: t)
7
+ * interscript-ts batch <systemCode> <inputFile> (alias: b)
8
+ * interscript-ts list (alias: l)
9
+ * interscript-ts detect <input> <output> (alias: d)
10
+ *
11
+ * Global options:
12
+ * --maps-dir <dir> Directory containing <systemCode>.json IR files
13
+ * --http <url> Load maps from HTTP base URL (default /maps)
14
+ * --no-cache Skip persistent cache (HTTP loader)
15
+ * -h, --help Show this help
16
+ *
17
+ * Examples:
18
+ * echo "Антон" | interscript-ts t bgnpcgn-ukr-Cyrl-Latn-2019
19
+ * interscript-ts t bgnpcgn-ukr-Cyrl-Latn-2019 -i input.txt -o output.txt
20
+ * interscript-ts batch bgnpcgn-ukr-Cyrl-Latn-2019 names.txt --csv
21
+ * interscript-ts list --authority bgnpcgn --source-script Cyrl
22
+ * interscript-ts detect "Антон" "Anton" --maps-dir ./ir
23
+ */
24
+ export {};
25
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
package/dist/cli.js ADDED
@@ -0,0 +1,327 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * interscript-ts CLI — transliteration power tool.
4
+ *
5
+ * Subcommands:
6
+ * interscript-ts transliterate <systemCode> [options] (alias: t)
7
+ * interscript-ts batch <systemCode> <inputFile> (alias: b)
8
+ * interscript-ts list (alias: l)
9
+ * interscript-ts detect <input> <output> (alias: d)
10
+ *
11
+ * Global options:
12
+ * --maps-dir <dir> Directory containing <systemCode>.json IR files
13
+ * --http <url> Load maps from HTTP base URL (default /maps)
14
+ * --no-cache Skip persistent cache (HTTP loader)
15
+ * -h, --help Show this help
16
+ *
17
+ * Examples:
18
+ * echo "Антон" | interscript-ts t bgnpcgn-ukr-Cyrl-Latn-2019
19
+ * interscript-ts t bgnpcgn-ukr-Cyrl-Latn-2019 -i input.txt -o output.txt
20
+ * interscript-ts batch bgnpcgn-ukr-Cyrl-Latn-2019 names.txt --csv
21
+ * interscript-ts list --authority bgnpcgn --source-script Cyrl
22
+ * interscript-ts detect "Антон" "Anton" --maps-dir ./ir
23
+ */
24
+ import { parseArgs } from "node:util";
25
+ import { readFileSync, writeFileSync, existsSync, readdirSync } from "node:fs";
26
+ import { resolve } from "node:path";
27
+ import { configure, reset, transliterate, transliterateAsync, detect, httpStrategy, } from "./index.js";
28
+ import { filesystemStrategy } from "./loaders.node.js";
29
+ function buildStrategies(opts) {
30
+ if (opts.http) {
31
+ const httpOpts = { baseUrl: opts.http };
32
+ if (!opts.noCache)
33
+ httpOpts.cacheKeyPrefix = "isx-cli:";
34
+ return [httpStrategy(httpOpts)];
35
+ }
36
+ if (opts.mapsDir) {
37
+ return [filesystemStrategy(opts.mapsDir)];
38
+ }
39
+ // Default: try filesystem in CWD, fall back to HTTP from interscript.org.
40
+ const httpOpts = {
41
+ baseUrl: "https://interscript.org/maps",
42
+ };
43
+ if (!opts.noCache)
44
+ httpOpts.cacheKeyPrefix = "isx-cli:";
45
+ return [
46
+ filesystemStrategy(resolve(process.cwd(), "maps")),
47
+ filesystemStrategy(resolve(process.cwd(), "public/maps")),
48
+ httpStrategy(httpOpts),
49
+ ];
50
+ }
51
+ function readStdin() {
52
+ try {
53
+ return readFileSync(0, "utf8");
54
+ }
55
+ catch {
56
+ return "";
57
+ }
58
+ }
59
+ function parseGlobalOpts(args) {
60
+ const opts = { noCache: false };
61
+ const rest = [];
62
+ for (let i = 0; i < args.length; i++) {
63
+ const a = args[i];
64
+ if (a === "--maps-dir") {
65
+ opts.mapsDir = args[++i];
66
+ }
67
+ else if (a === "--http") {
68
+ opts.http = args[++i];
69
+ }
70
+ else if (a === "--no-cache") {
71
+ opts.noCache = true;
72
+ }
73
+ else {
74
+ rest.push(a);
75
+ }
76
+ }
77
+ return { opts, rest };
78
+ }
79
+ function loadCatalogue(mapsDir) {
80
+ const out = [];
81
+ for (const f of readdirSync(mapsDir)) {
82
+ if (!f.endsWith(".json"))
83
+ continue;
84
+ const code = f.replace(/\.json$/, "");
85
+ try {
86
+ const json = JSON.parse(readFileSync(resolve(mapsDir, f), "utf8"));
87
+ out.push({ code, metadata: json.metadata });
88
+ }
89
+ catch {
90
+ out.push({ code });
91
+ }
92
+ }
93
+ return out;
94
+ }
95
+ async function cmdTransliterate(args, opts) {
96
+ const { values, positionals } = parseArgs({
97
+ args,
98
+ options: {
99
+ input: { type: "string", short: "i" },
100
+ output: { type: "string", short: "o" },
101
+ },
102
+ allowPositionals: true,
103
+ strict: true,
104
+ });
105
+ const systemCode = positionals[0];
106
+ if (!systemCode) {
107
+ process.stderr.write("Error: systemCode is required as the first positional arg\n");
108
+ return 1;
109
+ }
110
+ reset();
111
+ configure({ strategies: buildStrategies(opts) });
112
+ const inputText = values.input
113
+ ? readFileSync(resolve(process.cwd(), values.input), "utf8")
114
+ : readStdin();
115
+ try {
116
+ const useAsync = !!opts.http ||
117
+ (!opts.mapsDir &&
118
+ !existsSync(resolve(process.cwd(), "maps")) &&
119
+ !existsSync(resolve(process.cwd(), "public/maps")));
120
+ const result = useAsync
121
+ ? await transliterateAsync(systemCode, inputText)
122
+ : transliterate(systemCode, inputText);
123
+ if (values.output) {
124
+ writeFileSync(resolve(process.cwd(), values.output), result + "\n");
125
+ }
126
+ else {
127
+ process.stdout.write(result + "\n");
128
+ }
129
+ return 0;
130
+ }
131
+ catch (e) {
132
+ process.stderr.write(`Error: ${e.message}\n`);
133
+ return 1;
134
+ }
135
+ }
136
+ async function cmdBatch(args, opts) {
137
+ const { values, positionals } = parseArgs({
138
+ args,
139
+ options: {
140
+ output: { type: "string", short: "o" },
141
+ csv: { type: "boolean", default: false },
142
+ },
143
+ allowPositionals: true,
144
+ strict: true,
145
+ });
146
+ const [systemCode, inputFile] = positionals;
147
+ if (!systemCode || !inputFile) {
148
+ process.stderr.write("Usage: interscript-ts batch <systemCode> <inputFile> [--csv]\n");
149
+ return 1;
150
+ }
151
+ if (!existsSync(resolve(process.cwd(), inputFile))) {
152
+ process.stderr.write(`Error: input file not found: ${inputFile}\n`);
153
+ return 2;
154
+ }
155
+ reset();
156
+ configure({ strategies: buildStrategies(opts) });
157
+ const lines = readFileSync(resolve(process.cwd(), inputFile), "utf8")
158
+ .split(/\r?\n/)
159
+ .map((l) => l.trim())
160
+ .filter(Boolean);
161
+ const rows = [];
162
+ for (const input of lines) {
163
+ try {
164
+ const output = await transliterateAsync(systemCode, input);
165
+ rows.push({ input, output });
166
+ }
167
+ catch (e) {
168
+ rows.push({ input, output: "", error: e.message });
169
+ }
170
+ }
171
+ const fmtRow = (r) => values.csv
172
+ ? `"${r.input}","${r.output}","${r.error ?? ""}"`
173
+ : `${r.input}\t${r.output}${r.error ? `\t⚠ ${r.error}` : ""}`;
174
+ const text = rows.map(fmtRow).join("\n") + "\n";
175
+ if (values.output) {
176
+ writeFileSync(resolve(process.cwd(), values.output), text);
177
+ }
178
+ else {
179
+ process.stdout.write(text);
180
+ }
181
+ process.stderr.write(`Processed ${rows.length} lines\n`);
182
+ return 0;
183
+ }
184
+ function cmdList(args, opts) {
185
+ const { values } = parseArgs({
186
+ args,
187
+ options: {
188
+ authority: { type: "string" },
189
+ "source-script": { type: "string" },
190
+ "destination-script": { type: "string" },
191
+ },
192
+ allowPositionals: true,
193
+ strict: true,
194
+ });
195
+ // List requires a local maps dir — HTTP can't enumerate.
196
+ const mapsDir = opts.mapsDir ?? resolve(process.cwd(), "maps");
197
+ if (!existsSync(mapsDir)) {
198
+ process.stderr.write(`Error: --maps-dir required (or run from a directory containing ./maps).\n`);
199
+ return 2;
200
+ }
201
+ const entries = loadCatalogue(mapsDir);
202
+ const filtered = entries.filter((e) => {
203
+ if (!e.metadata)
204
+ return true;
205
+ if (values.authority && e.metadata.authority_id !== values.authority)
206
+ return false;
207
+ if (values["source-script"] && e.metadata.source_script !== values["source-script"])
208
+ return false;
209
+ if (values["destination-script"] &&
210
+ e.metadata.destination_script !== values["destination-script"])
211
+ return false;
212
+ return true;
213
+ });
214
+ for (const e of filtered) {
215
+ const meta = e.metadata;
216
+ const auth = meta?.authority_id ?? "?";
217
+ const pair = meta ? `${meta.source_script}→${meta.destination_script}` : "";
218
+ const name = meta?.name ?? "";
219
+ process.stdout.write(`${e.code}\t${auth}\t${pair}\t${name}\n`);
220
+ }
221
+ process.stderr.write(`${filtered.length} systems\n`);
222
+ return 0;
223
+ }
224
+ async function cmdDetect(args, opts) {
225
+ const { values, positionals } = parseArgs({
226
+ args,
227
+ options: {
228
+ "max-results": { type: "string", default: "10" },
229
+ },
230
+ allowPositionals: true,
231
+ strict: true,
232
+ });
233
+ const [input, output] = positionals;
234
+ if (!input || !output) {
235
+ process.stderr.write("Usage: interscript-ts detect <input> <output>\n");
236
+ return 1;
237
+ }
238
+ reset();
239
+ configure({ strategies: buildStrategies(opts) });
240
+ const mapsDir = opts.mapsDir ?? resolve(process.cwd(), "maps");
241
+ if (!existsSync(mapsDir)) {
242
+ process.stderr.write(`Error: detect needs a local maps directory (--maps-dir).\n`);
243
+ return 2;
244
+ }
245
+ // Detect only works against pre-loaded maps; load them all.
246
+ const codes = readdirSync(mapsDir)
247
+ .filter((f) => f.endsWith(".json"))
248
+ .map((f) => f.replace(/\.json$/, ""));
249
+ process.stderr.write(`Loading ${codes.length} maps…\n`);
250
+ const results = detect(input, output, {});
251
+ const max = parseInt(values["max-results"], 10);
252
+ for (const r of results.slice(0, max)) {
253
+ process.stdout.write(`${r.distance}\t${r.mapName}\n`);
254
+ }
255
+ return 0;
256
+ }
257
+ function showHelp() {
258
+ process.stdout.write(`interscript-ts — transliteration CLI
259
+
260
+ Usage:
261
+ interscript-ts <command> [options]
262
+
263
+ Commands:
264
+ transliterate <systemCode> [-i FILE] [-o FILE] Transliterate text (alias: t)
265
+ batch <systemCode> <inputFile> [--csv] [-o FILE] Bulk process many lines (alias: b)
266
+ list [--authority X] [--source-script X] List available systems (alias: l)
267
+ detect <input> <output> Find best-matching system (alias: d)
268
+
269
+ Global options:
270
+ --maps-dir <dir> Directory of <systemCode>.json IR files
271
+ --http <url> Load maps from HTTP base URL
272
+ --no-cache Skip persistent cache (HTTP loader)
273
+ -h, --help Show this help
274
+
275
+ Map source resolution (first match wins):
276
+ 1. --maps-dir <dir>
277
+ 2. --http <url>
278
+ 3. ./maps/ in the current directory
279
+ 4. ./public/maps/ in the current directory
280
+ 5. https://interscript.org/maps/ (with cache)
281
+
282
+ Examples:
283
+ echo "Антон" | interscript-ts t bgnpcgn-ukr-Cyrl-Latn-2019
284
+ interscript-ts t bgnpcgn-ukr-Cyrl-Latn-2019 -i in.txt -o out.txt
285
+ interscript-ts b bgnpcgn-ukr-Cyrl-Latn-2019 names.txt --csv > out.csv
286
+ interscript-ts l --authority bgnpcgn --source-script Cyrl
287
+ interscript-ts d "Антон" "Anton" --maps-dir ./ir
288
+ `);
289
+ }
290
+ async function main() {
291
+ const argv = process.argv.slice(2);
292
+ if (argv.length === 0 || argv[0] === "-h" || argv[0] === "--help") {
293
+ showHelp();
294
+ process.exit(argv.length === 0 ? 1 : 0);
295
+ }
296
+ const command = argv[0];
297
+ const { opts, rest } = parseGlobalOpts(argv.slice(1));
298
+ const aliasMap = {
299
+ t: "transliterate",
300
+ b: "batch",
301
+ l: "list",
302
+ d: "detect",
303
+ };
304
+ const cmd = aliasMap[command] ?? command;
305
+ let exit;
306
+ switch (cmd) {
307
+ case "transliterate":
308
+ exit = await cmdTransliterate(rest, opts);
309
+ break;
310
+ case "batch":
311
+ exit = await cmdBatch(rest, opts);
312
+ break;
313
+ case "list":
314
+ exit = cmdList(rest, opts);
315
+ break;
316
+ case "detect":
317
+ exit = await cmdDetect(rest, opts);
318
+ break;
319
+ default:
320
+ process.stderr.write(`Unknown command: ${command}\n\n`);
321
+ showHelp();
322
+ exit = 1;
323
+ }
324
+ process.exit(exit);
325
+ }
326
+ await main();
327
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Detector — finds which transliteration system best explains how
3
+ * `input` became `output`.
4
+ *
5
+ * Mirrors `interscript-ruby/lib/interscript/detector.rb` semantics:
6
+ * iterate every known map, transliterate `input` through it, compute
7
+ * Levenshtein distance to `output`, return ranked candidates.
8
+ */
9
+ import type { DetectionResult, DetectOptions, SystemCode } from "./types.js";
10
+ import type { MapLoader } from "./loader.js";
11
+ /**
12
+ * Compute Levenshtein edit distance between two strings.
13
+ * Classic dynamic programming, O(m·n) time and O(min(m,n)) space.
14
+ */
15
+ export declare function levenshtein(a: string, b: string): number;
16
+ /**
17
+ * Run detect against every map the loader knows. Caller may pass an
18
+ * explicit `knownMaps` iterable to restrict the scan (e.g. a curated
19
+ * shortlist for performance).
20
+ */
21
+ export declare function detectInMaps(input: string, output: string, loader: MapLoader, opts?: DetectOptions, knownMaps?: Iterable<SystemCode>): DetectionResult[];
22
+ //# sourceMappingURL=detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../src/detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAI5C;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAsBxD;AAQD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,aAAkB,EACxB,SAAS,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC/B,eAAe,EAAE,CAuBnB"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Detector — finds which transliteration system best explains how
3
+ * `input` became `output`.
4
+ *
5
+ * Mirrors `interscript-ruby/lib/interscript/detector.rb` semantics:
6
+ * iterate every known map, transliterate `input` through it, compute
7
+ * Levenshtein distance to `output`, return ranked candidates.
8
+ */
9
+ import { executeStage } from "./runtime/interpreter.js";
10
+ import { InterscriptError } from "./errors.js";
11
+ /**
12
+ * Compute Levenshtein edit distance between two strings.
13
+ * Classic dynamic programming, O(m·n) time and O(min(m,n)) space.
14
+ */
15
+ export function levenshtein(a, b) {
16
+ if (a === b)
17
+ return 0;
18
+ if (a.length === 0)
19
+ return b.length;
20
+ if (b.length === 0)
21
+ return a.length;
22
+ let prev = new Array(b.length + 1);
23
+ let curr = new Array(b.length + 1);
24
+ for (let j = 0; j <= b.length; j++)
25
+ prev[j] = j;
26
+ for (let i = 1; i <= a.length; i++) {
27
+ curr[0] = i;
28
+ for (let j = 1; j <= b.length; j++) {
29
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
30
+ curr[j] = Math.min(prev[j] + 1, // deletion
31
+ curr[j - 1] + 1, // insertion
32
+ prev[j - 1] + cost);
33
+ }
34
+ ;
35
+ [prev, curr] = [curr, prev];
36
+ }
37
+ return prev[b.length];
38
+ }
39
+ /** Convert a glob (`*` wildcard) into a RegExp. */
40
+ function globToRegExp(pattern) {
41
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
42
+ return new RegExp(`^${escaped}$`);
43
+ }
44
+ /**
45
+ * Run detect against every map the loader knows. Caller may pass an
46
+ * explicit `knownMaps` iterable to restrict the scan (e.g. a curated
47
+ * shortlist for performance).
48
+ */
49
+ export function detectInMaps(input, output, loader, opts = {}, knownMaps) {
50
+ const candidates = [];
51
+ const filter = opts.mapPattern ? globToRegExp(opts.mapPattern) : null;
52
+ const systems = knownMaps ?? loader.loadedMaps();
53
+ for (const systemCode of systems) {
54
+ if (filter && !filter.test(systemCode))
55
+ continue;
56
+ let transliterated;
57
+ try {
58
+ const map = loader.load(systemCode);
59
+ transliterated = executeStage(map, "main", input, loader);
60
+ }
61
+ catch (e) {
62
+ if (e instanceof InterscriptError)
63
+ continue;
64
+ throw e;
65
+ }
66
+ candidates.push({
67
+ mapName: systemCode,
68
+ distance: levenshtein(transliterated, output),
69
+ });
70
+ }
71
+ return candidates.sort((a, b) => a.distance - b.distance);
72
+ }
73
+ //# sourceMappingURL=detector.js.map