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.
- package/LICENSE +25 -0
- package/README.md +90 -41
- package/dist/cli.d.ts +25 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +327 -0
- package/dist/cli.js.map +1 -0
- package/dist/detector.d.ts +22 -0
- package/dist/detector.d.ts.map +1 -0
- package/dist/detector.js +73 -0
- package/dist/detector.js.map +1 -0
- package/dist/errors.d.ts +26 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +34 -0
- package/dist/errors.js.map +1 -0
- package/dist/http-loader.d.ts +42 -0
- package/dist/http-loader.d.ts.map +1 -0
- package/dist/http-loader.js +95 -0
- package/dist/http-loader.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/isc/converter.d.ts +11 -0
- package/dist/isc/converter.d.ts.map +1 -0
- package/dist/isc/converter.js +177 -0
- package/dist/isc/converter.js.map +1 -0
- package/dist/isc/index.d.ts +16 -0
- package/dist/isc/index.d.ts.map +1 -0
- package/dist/isc/index.js +15 -0
- package/dist/isc/index.js.map +1 -0
- package/dist/isc/loader.d.ts +22 -0
- package/dist/isc/loader.d.ts.map +1 -0
- package/dist/isc/loader.js +47 -0
- package/dist/isc/loader.js.map +1 -0
- package/dist/isc/parser.d.ts +14 -0
- package/dist/isc/parser.d.ts.map +1 -0
- package/dist/isc/parser.js +734 -0
- package/dist/isc/parser.js.map +1 -0
- package/dist/isc/types.d.ts +110 -0
- package/dist/isc/types.d.ts.map +1 -0
- package/dist/isc/types.js +19 -0
- package/dist/isc/types.js.map +1 -0
- package/dist/loader.d.ts +49 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +93 -0
- package/dist/loader.js.map +1 -0
- package/dist/loaders.d.ts +23 -0
- package/dist/loaders.d.ts.map +1 -0
- package/dist/loaders.js +40 -0
- package/dist/loaders.js.map +1 -0
- package/dist/loaders.node.d.ts +25 -0
- package/dist/loaders.node.d.ts.map +1 -0
- package/dist/loaders.node.js +42 -0
- package/dist/loaders.node.js.map +1 -0
- package/dist/ml/imf/index.d.ts +6 -0
- package/dist/ml/imf/index.d.ts.map +1 -0
- package/dist/ml/imf/index.js +6 -0
- package/dist/ml/imf/index.js.map +1 -0
- package/dist/ml/imf/loader.d.ts +19 -0
- package/dist/ml/imf/loader.d.ts.map +1 -0
- package/dist/ml/imf/loader.js +59 -0
- package/dist/ml/imf/loader.js.map +1 -0
- package/dist/ml/imf/model.d.ts +28 -0
- package/dist/ml/imf/model.d.ts.map +1 -0
- package/dist/ml/imf/model.js +181 -0
- package/dist/ml/imf/model.js.map +1 -0
- package/dist/ml/imf/registry.d.ts +30 -0
- package/dist/ml/imf/registry.d.ts.map +1 -0
- package/dist/ml/imf/registry.js +140 -0
- package/dist/ml/imf/registry.js.map +1 -0
- package/dist/ml/imf/tokens.d.ts +13 -0
- package/dist/ml/imf/tokens.d.ts.map +1 -0
- package/dist/ml/imf/tokens.js +32 -0
- package/dist/ml/imf/tokens.js.map +1 -0
- package/dist/ml/index.d.ts +24 -0
- package/dist/ml/index.d.ts.map +1 -0
- package/dist/ml/index.js +25 -0
- package/dist/ml/index.js.map +1 -0
- package/dist/ml/models/rababa/cleaner.d.ts +11 -0
- package/dist/ml/models/rababa/cleaner.d.ts.map +1 -0
- package/dist/ml/models/rababa/cleaner.js +21 -0
- package/dist/ml/models/rababa/cleaner.js.map +1 -0
- package/dist/ml/models/rababa/diacritizer.d.ts +37 -0
- package/dist/ml/models/rababa/diacritizer.d.ts.map +1 -0
- package/dist/ml/models/rababa/diacritizer.js +172 -0
- package/dist/ml/models/rababa/diacritizer.js.map +1 -0
- package/dist/ml/models/rababa/encoder.d.ts +40 -0
- package/dist/ml/models/rababa/encoder.d.ts.map +1 -0
- package/dist/ml/models/rababa/encoder.js +57 -0
- package/dist/ml/models/rababa/encoder.js.map +1 -0
- package/dist/ml/models/rababa/haraqat.d.ts +49 -0
- package/dist/ml/models/rababa/haraqat.d.ts.map +1 -0
- package/dist/ml/models/rababa/haraqat.js +89 -0
- package/dist/ml/models/rababa/haraqat.js.map +1 -0
- package/dist/ml/models/rababa/index.d.ts +12 -0
- package/dist/ml/models/rababa/index.d.ts.map +1 -0
- package/dist/ml/models/rababa/index.js +14 -0
- package/dist/ml/models/rababa/index.js.map +1 -0
- package/dist/ml/models/rababa/reconciler.d.ts +29 -0
- package/dist/ml/models/rababa/reconciler.d.ts.map +1 -0
- package/dist/ml/models/rababa/reconciler.js +81 -0
- package/dist/ml/models/rababa/reconciler.js.map +1 -0
- package/dist/ml/models/secryst/index.d.ts +10 -0
- package/dist/ml/models/secryst/index.d.ts.map +1 -0
- package/dist/ml/models/secryst/index.js +12 -0
- package/dist/ml/models/secryst/index.js.map +1 -0
- package/dist/ml/models/secryst/masks.d.ts +33 -0
- package/dist/ml/models/secryst/masks.d.ts.map +1 -0
- package/dist/ml/models/secryst/masks.js +73 -0
- package/dist/ml/models/secryst/masks.js.map +1 -0
- package/dist/ml/models/secryst/translator.d.ts +31 -0
- package/dist/ml/models/secryst/translator.d.ts.map +1 -0
- package/dist/ml/models/secryst/translator.js +112 -0
- package/dist/ml/models/secryst/translator.js.map +1 -0
- package/dist/ml/models/secryst/vocab.d.ts +39 -0
- package/dist/ml/models/secryst/vocab.d.ts.map +1 -0
- package/dist/ml/models/secryst/vocab.js +85 -0
- package/dist/ml/models/secryst/vocab.js.map +1 -0
- package/dist/ml/provision/base.d.ts +14 -0
- package/dist/ml/provision/base.d.ts.map +1 -0
- package/dist/ml/provision/base.js +19 -0
- package/dist/ml/provision/base.js.map +1 -0
- package/dist/ml/provision/index.d.ts +62 -0
- package/dist/ml/provision/index.d.ts.map +1 -0
- package/dist/ml/provision/index.js +107 -0
- package/dist/ml/provision/index.js.map +1 -0
- package/dist/ml/provision/manifest.d.ts +79 -0
- package/dist/ml/provision/manifest.d.ts.map +1 -0
- package/dist/ml/provision/manifest.js +122 -0
- package/dist/ml/provision/manifest.js.map +1 -0
- package/dist/ml/registry.d.ts +35 -0
- package/dist/ml/registry.d.ts.map +1 -0
- package/dist/ml/registry.js +76 -0
- package/dist/ml/registry.js.map +1 -0
- package/dist/ml/session/index.d.ts +55 -0
- package/dist/ml/session/index.d.ts.map +1 -0
- package/dist/ml/session/index.js +57 -0
- package/dist/ml/session/index.js.map +1 -0
- package/dist/ml/session/litert-web.d.ts +50 -0
- package/dist/ml/session/litert-web.d.ts.map +1 -0
- package/dist/ml/session/litert-web.js +146 -0
- package/dist/ml/session/litert-web.js.map +1 -0
- package/dist/ml/session/onnx-node.d.ts +10 -0
- package/dist/ml/session/onnx-node.d.ts.map +1 -0
- package/dist/ml/session/onnx-node.js +62 -0
- package/dist/ml/session/onnx-node.js.map +1 -0
- package/dist/ml/session/onnx-web.d.ts +23 -0
- package/dist/ml/session/onnx-web.d.ts.map +1 -0
- package/dist/ml/session/onnx-web.js +74 -0
- package/dist/ml/session/onnx-web.js.map +1 -0
- package/dist/ml/types.d.ts +113 -0
- package/dist/ml/types.d.ts.map +1 -0
- package/dist/ml/types.js +7 -0
- package/dist/ml/types.js.map +1 -0
- package/dist/runtime/compile-item.d.ts +53 -0
- package/dist/runtime/compile-item.d.ts.map +1 -0
- package/dist/runtime/compile-item.js +278 -0
- package/dist/runtime/compile-item.js.map +1 -0
- package/dist/runtime/context.d.ts +33 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +67 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/executor.d.ts +18 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +228 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/interpreter.d.ts +30 -0
- package/dist/runtime/interpreter.d.ts.map +1 -0
- package/dist/runtime/interpreter.js +130 -0
- package/dist/runtime/interpreter.js.map +1 -0
- package/dist/stdlib/ml.d.ts +55 -0
- package/dist/stdlib/ml.d.ts.map +1 -0
- package/dist/stdlib/ml.js +114 -0
- package/dist/stdlib/ml.js.map +1 -0
- package/dist/stdlib.d.ts +96 -0
- package/dist/stdlib.d.ts.map +1 -0
- package/dist/stdlib.js +160 -0
- package/dist/stdlib.js.map +1 -0
- package/dist/types.d.ts +167 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/package.json +78 -18
- package/LICENSE.md +0 -31
- package/README.adoc +0 -78
- package/src/maps/acadsin-zho-Hani-Latn-2002.js +0 -9
- package/src/maps/alalc-amh-Ethi-Latn-1997.js +0 -8
- package/src/maps/alalc-amh-Ethi-Latn-2011.js +0 -7
- package/src/maps/alalc-ara-Arab-Latn-1997.js +0 -8
- package/src/maps/alalc-asm-Deva-Latn-1997.js +0 -50
- package/src/maps/alalc-asm-Deva-Latn-2012.js +0 -7
- package/src/maps/alalc-aze-Arab-Latn-1997.js +0 -11
- package/src/maps/alalc-aze-Cyrl-Latn-1997.js +0 -9
- package/src/maps/alalc-bel-Cyrl-Latn-1997.js +0 -8
- package/src/maps/alalc-ben-Beng-Latn-1997.js +0 -52
- package/src/maps/alalc-ben-Beng-Latn-2017.js +0 -9
- package/src/maps/alalc-bul-Cyrl-Latn-1997.js +0 -10
- package/src/maps/alalc-div-Thaa-Latn-1997.js +0 -38
- package/src/maps/alalc-div-Thaa-Latn-2012.js +0 -7
- package/src/maps/alalc-ell-Grek-Latn-1997.js +0 -25
- package/src/maps/alalc-ell-Grek-Latn-2010.js +0 -27
- package/src/maps/alalc-fas-Arab-Latn-1997.js +0 -11
- package/src/maps/alalc-guj-Gujr-Latn-1997.js +0 -50
- package/src/maps/alalc-guj-Gujr-Latn-2011.js +0 -7
- package/src/maps/alalc-hin-Deva-Latn-1997.js +0 -60
- package/src/maps/alalc-hin-Deva-Latn-2011.js +0 -7
- package/src/maps/alalc-kan-Kana-Latn-1997.js +0 -51
- package/src/maps/alalc-kan-Kana-Latn-2011.js +0 -7
- package/src/maps/alalc-kat-Geok-Latn-1997.js +0 -8
- package/src/maps/alalc-kat-Geok-Latn-2011.js +0 -7
- package/src/maps/alalc-kat-Geor-Latn-1997.js +0 -8
- package/src/maps/alalc-kat-Geor-Latn-2011.js +0 -7
- package/src/maps/alalc-kor-Hang-Latn-1997.js +0 -9
- package/src/maps/alalc-mal-Mlym-Latn-1997.js +0 -52
- package/src/maps/alalc-mal-Mlym-Latn-2012.js +0 -7
- package/src/maps/alalc-mar-Deva-Latn-1997.js +0 -13
- package/src/maps/alalc-mar-Deva-Latn-2011.js +0 -7
- package/src/maps/alalc-mkd-Cyrl-Latn-1997.js +0 -17
- package/src/maps/alalc-mkd-Cyrl-Latn-2013.js +0 -17
- package/src/maps/alalc-mon-Cyrl-Latn-1997.js +0 -8
- package/src/maps/alalc-ori-Orya-Latn-1997.js +0 -55
- package/src/maps/alalc-ori-Orya-Latn-2011.js +0 -7
- package/src/maps/alalc-pan-Guru-Latn-1997.js +0 -17
- package/src/maps/alalc-pan-Guru-Latn-2011.js +0 -7
- package/src/maps/alalc-pli-Deva-Latn-2012.js +0 -13
- package/src/maps/alalc-pra-Deva-Latn-2012.js +0 -7
- package/src/maps/alalc-rus-Cyrl-Latn-1997.js +0 -9
- package/src/maps/alalc-rus-Cyrl-Latn-2012.js +0 -9
- package/src/maps/alalc-san-Deva-Latn-2012.js +0 -49
- package/src/maps/alalc-sin-Sinh-Latn-1997.js +0 -54
- package/src/maps/alalc-sin-Sinh-Latn-2011.js +0 -7
- package/src/maps/alalc-srp-Cyrl-Latn-1997.js +0 -17
- package/src/maps/alalc-srp-Cyrl-Latn-2013.js +0 -15
- package/src/maps/alalc-tam-Taml-Latn-1997.js +0 -9
- package/src/maps/alalc-tam-Taml-Latn-2011.js +0 -7
- package/src/maps/alalc-tel-Telu-Latn-1997.js +0 -54
- package/src/maps/alalc-tel-Telu-Latn-2011.js +0 -7
- package/src/maps/alalc-tir-Ethi-Latn-1997.js +0 -8
- package/src/maps/alalc-tir-Ethi-Latn-2011.js +0 -7
- package/src/maps/alalc-ukr-Cyrl-Latn-1997.js +0 -9
- package/src/maps/alalc-ukr-Cyrl-Latn-2011.js +0 -7
- package/src/maps/apcbg-bul-Cyrl-Latn-1995.js +0 -8
- package/src/maps/az-aze-Cyrl-Latn-1939.js +0 -8
- package/src/maps/az-aze-Cyrl-Latn-1958.js +0 -11
- package/src/maps/bas-rus-Cyrl-Latn-2017-bss.js +0 -10
- package/src/maps/bas-rus-Cyrl-Latn-2017-oss.js +0 -10
- package/src/maps/bgn-jpn-Hrkt-Latn-1962.js +0 -10
- package/src/maps/bgn-kor-Hang-Latn-1943.js +0 -9
- package/src/maps/bgn-kor-Kore-Latn-1943.js +0 -10
- package/src/maps/bgna-bul-Cyrl-Latn-2006.js +0 -7
- package/src/maps/bgna-bul-Cyrl-Latn-2009.js +0 -7
- package/src/maps/bgnpcgn-amh-Ethi-Latn-1967.js +0 -8
- package/src/maps/bgnpcgn-ara-Arab-Latn-1956.js +0 -25
- package/src/maps/bgnpcgn-arm-Armn-Latn-1981.js +0 -8
- package/src/maps/bgnpcgn-aze-Cyrl-Latn-1993.js +0 -8
- package/src/maps/bgnpcgn-bak-Cyrl-Latn-2007.js +0 -16
- package/src/maps/bgnpcgn-bal-Arab-Latn-2008.js +0 -9
- package/src/maps/bgnpcgn-bel-Cyrl-Latn-1979.js +0 -12
- package/src/maps/bgnpcgn-bul-Cyrl-Latn-1952.js +0 -12
- package/src/maps/bgnpcgn-bul-Cyrl-Latn-2013.js +0 -10
- package/src/maps/bgnpcgn-che-Cyrl-Latn-2008.js +0 -15
- package/src/maps/bgnpcgn-deu-Latn-Latn-2000.js +0 -12
- package/src/maps/bgnpcgn-div-Thaa-Latn-1972.js +0 -13
- package/src/maps/bgnpcgn-div-Thaa-Latn-1988.js +0 -9
- package/src/maps/bgnpcgn-ell-Grek-Latn-1962.js +0 -52
- package/src/maps/bgnpcgn-ell-Grek-Latn-1996.js +0 -7
- package/src/maps/bgnpcgn-fao-Latn-Latn-1964.js +0 -11
- package/src/maps/bgnpcgn-fao-Latn-Latn-1968.js +0 -7
- package/src/maps/bgnpcgn-fas-Arab-Latn-1956.js +0 -8
- package/src/maps/bgnpcgn-isl-Latn-Latn-1964.js +0 -10
- package/src/maps/bgnpcgn-isl-Latn-Latn-1968.js +0 -7
- package/src/maps/bgnpcgn-jpn-Hrkt-Latn-1976.js +0 -10
- package/src/maps/bgnpcgn-kat-Geor-Latn-1981.js +0 -8
- package/src/maps/bgnpcgn-kat-Geor-Latn-2009.js +0 -7
- package/src/maps/bgnpcgn-kaz-Cyrl-Latn-1979.js +0 -8
- package/src/maps/bgnpcgn-kir-Cyrl-Latn-1979.js +0 -8
- package/src/maps/bgnpcgn-kor-Hang-Latn-kn-1945.js +0 -52
- package/src/maps/bgnpcgn-kor-Hang-Latn-rok-2011.js +0 -8
- package/src/maps/bgnpcgn-kor-Kore-Latn-rok-2011.js +0 -8
- package/src/maps/bgnpcgn-kur-Arab-Latn-2007.js +0 -9
- package/src/maps/bgnpcgn-mkd-Cyrl-Latn-1981.js +0 -15
- package/src/maps/bgnpcgn-mkd-Cyrl-Latn-2013.js +0 -17
- package/src/maps/bgnpcgn-mon-Cyrl-Latn-1964.js +0 -12
- package/src/maps/bgnpcgn-nep-Deva-Latn-2011.js +0 -13
- package/src/maps/bgnpcgn-per-Arab-Latn-1958.js +0 -10
- package/src/maps/bgnpcgn-prs-Arab-Latn-2007.js +0 -25
- package/src/maps/bgnpcgn-prs-Arab-Latn-yaghoubi.js +0 -8
- package/src/maps/bgnpcgn-pus-Arab-Latn-1968.js +0 -26
- package/src/maps/bgnpcgn-ron-Cyrl-Latn-2002.js +0 -23
- package/src/maps/bgnpcgn-rue-Cyrl-Latn-2016.js +0 -8
- package/src/maps/bgnpcgn-rus-Cyrl-Latn-1947.js +0 -52
- package/src/maps/bgnpcgn-sme-Latn-Latn-1984.js +0 -8
- package/src/maps/bgnpcgn-srp-Cyrl-Latn-1962.js +0 -7
- package/src/maps/bgnpcgn-srp-Cyrl-Latn-2005.js +0 -15
- package/src/maps/bgnpcgn-tat-Cyrl-Latn-2007.js +0 -27
- package/src/maps/bgnpcgn-tgk-Cyrl-Latn-1994.js +0 -12
- package/src/maps/bgnpcgn-tir-Ethi-Latn-2007.js +0 -8
- package/src/maps/bgnpcgn-ukr-Cyrl-Latn-1965.js +0 -9
- package/src/maps/bgnpcgn-ukr-Cyrl-Latn-2019.js +0 -9
- package/src/maps/bgnpcgn-urd-Arab-Latn-2007.js +0 -25
- package/src/maps/bgnpcgn-uzb-Cyrl-Latn-1979.js +0 -12
- package/src/maps/bgnpcgn-uzb-Cyrl-Latn-2000.js +0 -11
- package/src/maps/bgnpcgn-zho-Hans-Latn-1979.js +0 -8
- package/src/maps/bis-asm-Beng-Latn-13194-1991.js +0 -14
- package/src/maps/bis-ben-Beng-Latn-13194-1991.js +0 -14
- package/src/maps/bis-dev-Deva-Latn-13194-1991.js +0 -14
- package/src/maps/bis-guj-Gujr-Latn-13194-1991.js +0 -14
- package/src/maps/bis-kan-Kana-Latn-13194-1991.js +0 -14
- package/src/maps/bis-mlm-Mlym-Latn-13194-1991.js +0 -14
- package/src/maps/bis-ori-Orya-Latn-13194-1991.js +0 -14
- package/src/maps/bis-pnj-Guru-Latn-13194-1991.js +0 -14
- package/src/maps/bis-tel-Telu-Latn-13194-1991.js +0 -14
- package/src/maps/bis-tml-Taml-Latn-13194-1991.js +0 -14
- package/src/maps/by-bel-Cyrl-Latn-1998.js +0 -19
- package/src/maps/by-bel-Cyrl-Latn-2007.js +0 -7
- package/src/maps/din-grc-Grek-Latn-31634-2011-t1.js +0 -23
- package/src/maps/din-hin-Deva-Latn-33904-2018.js +0 -9
- package/src/maps/din-kat-Geor-Latn-32707-2010.js +0 -8
- package/src/maps/din-mar-Deva-Latn-33904-2018.js +0 -9
- package/src/maps/din-nep-Deva-Latn-33904-2018.js +0 -9
- package/src/maps/din-pli-Deva-Latn-33904-2018.js +0 -7
- package/src/maps/din-pra-Deva-Latn-33904-2018.js +0 -7
- package/src/maps/din-san-Deva-Latn-33904-2018.js +0 -51
- package/src/maps/din-tam-Taml-Latn-33903-2016.js +0 -34
- package/src/maps/dos-nep-Deva-Latn-1997.js +0 -9
- package/src/maps/elot-ell-Grek-Latn-743-1982-tl.js +0 -53
- package/src/maps/elot-ell-Grek-Latn-743-1982-ts.js +0 -53
- package/src/maps/elot-ell-Grek-Latn-743-2001-tl.js +0 -7
- package/src/maps/elot-ell-Grek-Latn-743-2001-ts.js +0 -7
- package/src/maps/ggg-kat-Geor-Latn-2002.js +0 -8
- package/src/maps/gki-bel-Cyrl-Latn-1992.js +0 -9
- package/src/maps/gki-bel-Cyrl-Latn-2000.js +0 -18
- package/src/maps/gost-rus-Cyrl-Latn-16876-71-1983.js +0 -10
- package/src/maps/gost-rus-Cyrl-Latn-7.79-2000-2002.js +0 -9
- package/src/maps/hk-yue-Hani-Latn-1888.js +0 -10
- package/src/maps/icao-bel-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-bul-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-fas-Arab-Latn-9303.js +0 -8
- package/src/maps/icao-heb-Hebr-Latn-9303.js +0 -8
- package/src/maps/icao-mkd-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-rus-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-srp-Cyrl-Latn-9303.js +0 -8
- package/src/maps/icao-ukr-Cyrl-Latn-9303.js +0 -8
- package/src/maps/index.json +0 -1
- package/src/maps/iso-ara-Arab-Latn-233-1984.js +0 -24
- package/src/maps/iso-ara-Arab-Latn-233-2-1993.js +0 -12
- package/src/maps/iso-asm-Beng-Latn-15919-2001.js +0 -9
- package/src/maps/iso-ben-Beng-Latn-15919-2001.js +0 -9
- package/src/maps/iso-ell-Grek-Latn-843-1997-t1.js +0 -15
- package/src/maps/iso-ell-Grek-Latn-843-1997-t2.js +0 -9
- package/src/maps/iso-guj-Gujr-Latn-15919-2001.js +0 -9
- package/src/maps/iso-hin-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-inc-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-jpn-Hrkt-Latn-3602-1989.js +0 -10
- package/src/maps/iso-kan-Kana-Latn-15919-2001.js +0 -9
- package/src/maps/iso-kat-Geor-Latn-9984-1996.js +0 -8
- package/src/maps/iso-kor-Hang-Latn-1996-method1.js +0 -14
- package/src/maps/iso-kor-Hang-Latn-1996-method2.js +0 -13
- package/src/maps/iso-mal-Mlym-Latn-15919-2001.js +0 -12
- package/src/maps/iso-mar-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-nep-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-ori-Orya-Latn-15919-2001.js +0 -9
- package/src/maps/iso-pan-Guru-Latn-15919-2001.js +0 -9
- package/src/maps/iso-pli-Beng-Latn-15919-2001.js +0 -7
- package/src/maps/iso-pli-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-pli-Sinh-Latn-15919-2001.js +0 -9
- package/src/maps/iso-pli-Thai-Latn-15919-2001.js +0 -7
- package/src/maps/iso-pra-Deva-Latn-15919-2001.js +0 -7
- package/src/maps/iso-prs-Arab-Latn-233-3-1999.js +0 -8
- package/src/maps/iso-rus-Cyrl-Latn-9-1995.js +0 -8
- package/src/maps/iso-san-Deva-Latn-15919-2001.js +0 -9
- package/src/maps/iso-tam-Taml-Latn-15919-2001.js +0 -9
- package/src/maps/iso-tel-Telu-Latn-15919-2001.js +0 -9
- package/src/maps/iso-tha-Thai-Latn-11940-1998.js +0 -9
- package/src/maps/kp-kor-Hang-Latn-2002.js +0 -78
- package/src/maps/lshk-yue-Hani-Latn-jyutping-1993.js +0 -8
- package/src/maps/masm-mon-Cyrl-Latn-5217-2012.js +0 -8
- package/src/maps/masm-mon-Latn-Cyrl-5217-2012.js +0 -18
- package/src/maps/mext-jpn-Hrkt-Latn-1954.js +0 -16
- package/src/maps/moct-kor-Hang-Latn-2000.js +0 -112
- package/src/maps/mofa-jpn-Hrkt-Latn-1989.js +0 -14
- package/src/maps/mv-div-Thaa-Latn-1987.js +0 -58
- package/src/maps/mvd-bel-Cyrl-Latn-2008.js +0 -36
- package/src/maps/mvd-bel-Cyrl-Latn-2010.js +0 -11
- package/src/maps/mvd-rus-Cyrl-Latn-2008.js +0 -19
- package/src/maps/mvd-rus-Cyrl-Latn-2010.js +0 -9
- package/src/maps/odni-ara-Arab-Latn-2004.js +0 -7
- package/src/maps/odni-ara-Arab-Latn-2015.js +0 -10
- package/src/maps/odni-aze-Cyrl-Latn-2015.js +0 -18
- package/src/maps/odni-bel-Cyrl-Latn-2015.js +0 -8
- package/src/maps/odni-bul-Cyrl-Latn-2005.js +0 -8
- package/src/maps/odni-bul-Cyrl-Latn-2015.js +0 -13
- package/src/maps/odni-che-Cyrl-Latn-2015.js +0 -13
- package/src/maps/odni-fas-Arab-Latn-2004.js +0 -8
- package/src/maps/odni-fas-Arab-Latn-2015.js +0 -8
- package/src/maps/odni-hin-Deva-Latn-2004.js +0 -8
- package/src/maps/odni-hin-Deva-Latn-2015.js +0 -8
- package/src/maps/odni-kat-Geor-Latn-2015.js +0 -8
- package/src/maps/odni-kaz-Cyrl-Latn-2015.js +0 -20
- package/src/maps/odni-kir-Cyrl-Latn-2015.js +0 -18
- package/src/maps/odni-kor-Hang-Latn-2015.js +0 -92
- package/src/maps/odni-mkd-Cyrl-Latn-2005.js +0 -7
- package/src/maps/odni-mkd-Cyrl-Latn-2015.js +0 -8
- package/src/maps/odni-prs-Arab-Latn-2004.js +0 -9
- package/src/maps/odni-prs-Arab-Latn-2015.js +0 -9
- package/src/maps/odni-pus-Arab-Latn-2011.js +0 -10
- package/src/maps/odni-rus-Cyrl-Latn-2015.js +0 -8
- package/src/maps/odni-srp-Cyrl-Latn-2005.js +0 -7
- package/src/maps/odni-srp-Cyrl-Latn-2015.js +0 -8
- package/src/maps/odni-tat-Cyrl-Latn-2015.js +0 -19
- package/src/maps/odni-tgk-Cyrl-Latn-2015.js +0 -21
- package/src/maps/odni-tuk-Cyrl-Latn-2015.js +0 -13
- package/src/maps/odni-uig-Cyrl-Latn-2015.js +0 -17
- package/src/maps/odni-ukr-Cyrl-Latn-2015.js +0 -9
- package/src/maps/odni-urd-Arab-Latn-2015.js +0 -8
- package/src/maps/odni-uzb-Cyrl-Latn-2015.js +0 -13
- package/src/maps/posix.js +0 -5
- package/src/maps/sac-zho-Hans-Latn-1979.js +0 -8
- package/src/maps/sasm-mon-Mong-Latn-general-1978.js +0 -8
- package/src/maps/sasm-mon-Mong-Latn-phonetic-1978.js +0 -9
- package/src/maps/ses-ara-Arab-Latn-1930.js +0 -10
- package/src/maps/stategeocadastre-ukr-Cyrl-Latn-1993.js +0 -19
- package/src/maps/ua-ukr-Cyrl-Latn-1996.js +0 -21
- package/src/maps/ua-ukr-Cyrl-Latn-2007.js +0 -16
- package/src/maps/ua-ukr-Cyrl-Latn-2010.js +0 -11
- package/src/maps/un-amh-Ethi-Latn-2016.js +0 -9
- package/src/maps/un-ara-Arab-Latn-1971.js +0 -13
- package/src/maps/un-ara-Arab-Latn-1972.js +0 -13
- package/src/maps/un-ara-Arab-Latn-2017.js +0 -24
- package/src/maps/un-asm-Beng-Latn-1972.js +0 -50
- package/src/maps/un-bel-Cyrl-Latn-2007.js +0 -7
- package/src/maps/un-ben-Beng-Latn-2016.js +0 -8
- package/src/maps/un-bul-Cyrl-Latn-1977.js +0 -14
- package/src/maps/un-ell-Grek-Latn-1987-phonetic.js +0 -83
- package/src/maps/un-ell-Grek-Latn-1987-tl.js +0 -7
- package/src/maps/un-ell-Grek-Latn-1987-ts.js +0 -7
- package/src/maps/un-guj-Gujr-Latn-1972.js +0 -45
- package/src/maps/un-hin-Deva-Latn-2016.js +0 -91
- package/src/maps/un-kan-Kana-Latn-2016.js +0 -45
- package/src/maps/un-mal-Mlym-Latn-1972.js +0 -48
- package/src/maps/un-mar-Deva-Latn-2016.js +0 -11
- package/src/maps/un-mkd-Cyrl-Latn-1977.js +0 -21
- package/src/maps/un-mon-Mong-Latn-general-2013.js +0 -7
- package/src/maps/un-mon-Mong-Latn-phonetic-2013.js +0 -7
- package/src/maps/un-nep-Deva-Latn-1972.js +0 -91
- package/src/maps/un-nep-Deva-Latn-2013.js +0 -7
- package/src/maps/un-ori-Orya-Latn-1972.js +0 -48
- package/src/maps/un-pan-Guru-Latn-1972.js +0 -87
- package/src/maps/un-prs-Arab-Latn-1967.js +0 -11
- package/src/maps/un-rus-Cyrl-Latn-1987.js +0 -9
- package/src/maps/un-sin-Sinh-Latn-1972.js +0 -46
- package/src/maps/un-srp-Cyrl-Latn-1997.js +0 -7
- package/src/maps/un-tam-Taml-Latn-1972.js +0 -34
- package/src/maps/un-tel-Telu-Latn-1972.js +0 -46
- package/src/maps/un-ukr-Cyrl-Latn-1998.js +0 -10
- package/src/maps/un-ukr-Cyrl-Latn-2012.js +0 -7
- package/src/maps/un-urd-Arab-Latn-1972.js +0 -25
- package/src/maps/unicode.js +0 -7
- package/src/maps/var-Cyrl.js +0 -7
- package/src/maps/var-amh-Ethi-Latn-eae-2003.js +0 -8
- package/src/maps/var-gez-Ethi-Latn-eae-2003.js +0 -7
- package/src/maps/var-hin-Deva-Latn-hunterian-1872.js +0 -12
- package/src/maps/var-jpn-Hrkt-Latn-hepburn-1886.js +0 -18
- package/src/maps/var-jpn-Hrkt-Latn-hepburn-1954.js +0 -17
- package/src/maps/var-kor-Hang-Hang-jamo.js +0 -8
- package/src/maps/var-kor-Hang-Latn-mr-1939.js +0 -355
- package/src/maps/var-kor-Kore-Hang-2013.js +0 -8
- package/src/maps/var-kor-Kore-Latn-mr-1939.js +0 -10
- package/src/maps/var-kor.js +0 -19
- package/src/maps/var-mar-Deva-Latn-hunterian-1872.js +0 -7
- package/src/maps/var-mon-Mong-Latn-1930.js +0 -8
- package/src/maps/var-mon-Mong-Latn-lessing.js +0 -14
- package/src/maps/var-mon-Mong-Latn-vpmc.js +0 -10
- package/src/maps/var-pra-Deva-Latn-iast-1912.js +0 -7
- package/src/maps/var-san-Deva-Latn-iast-1912.js +0 -9
- package/src/maps/var-zho-Hani-Latn-wd-1979.js +0 -13
- package/src/stdlib.js +0 -294
- 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-
|
|
1
|
+
# Interscript-TS
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/interscript/interscript-ts/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/interscript)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
TypeScript runtime for [Interscript](https://www.interscript.org) — interoperable script conversion systems.
|
|
6
7
|
|
|
7
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
14
|
+
## Installation
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
```bash
|
|
17
|
+
npm install interscript
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick start
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
```typescript
|
|
23
|
+
import { transliterate, configure, bundledStrategy } from "interscript"
|
|
23
24
|
|
|
24
|
-
|
|
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
|
-
|
|
27
|
-
|
|
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
|
-
|
|
38
|
+
## Filesystem loader (Node)
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import { configure, transliterate, filesystemStrategy } from "interscript"
|
|
31
42
|
|
|
32
|
-
|
|
43
|
+
configure({ strategies: [filesystemStrategy("./maps")] })
|
|
44
|
+
// reads `./maps/<systemCode>.json` on demand, caches
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## CLI
|
|
33
48
|
|
|
34
|
-
```
|
|
35
|
-
|
|
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
|
-
|
|
55
|
+
## Architecture
|
|
43
56
|
|
|
44
|
-
|
|
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
|
-
|
|
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
|
-
|
|
50
|
-
supply a path to the maps, as those are not bundled by default.
|
|
73
|
+
### Generating JSON IR
|
|
51
74
|
|
|
52
|
-
|
|
75
|
+
The Ruby gem ships `Compiler::JsonIR` (PR [#757](https://github.com/interscript/interscript-ruby/pull/757)):
|
|
53
76
|
|
|
54
|
-
```
|
|
55
|
-
|
|
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
|
-
|
|
84
|
+
```ruby
|
|
85
|
+
require "interscript/compiler/json_ir"
|
|
86
|
+
Interscript::Compiler::JsonIR.call(Interscript.parse(map_name)).code
|
|
87
|
+
```
|
|
60
88
|
|
|
61
|
-
|
|
89
|
+
## Development
|
|
62
90
|
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
117
|
+
BSD-2-Clause — Ribose Inc.
|
|
71
118
|
|
|
72
|
-
|
|
119
|
+
## See also
|
|
73
120
|
|
|
74
|
-
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -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"}
|
package/dist/detector.js
ADDED
|
@@ -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
|