Nocturnally Psychologizing Millipede

    string-convert-indexes
    TypeScript icon, indicating that this package has built-in type declarations

    5.0.2 • Public • Published

    string-convert-indexes

    Convert between native JS string character indexes and grapheme-count-based indexes

    Install

    This package is ESM only: Node 12+ is needed to use it and it must be imported instead of required:

    npm i string-convert-indexes

    If you need a legacy version which works with require, use version 4.1.0

    Quick Take

    import { strict as assert } from "assert";
    import { nativeToUnicode, unicodeToNative } from "string-convert-indexes";
    
    // CONVERTING NATIVE JS INDEXES TO UNICODE-CHAR-COUNT-BASED
    // 𝌆 - \uD834\uDF06
    
    // at index 1, we have low surrogate, that's still grapheme index zero
    assert.equal(nativeToUnicode("\uD834\uDF06aa", "1"), "0");
    // notice it's retained as string. The same type as input is retained!
    
    // at index 2, we have first letter a - that's second index, counting graphemes
    assert.equal(nativeToUnicode("\uD834\uDF06aa", 3), 2);
    
    // convert many indexes at once - any nested data structure is fine:
    assert.deepEqual(nativeToUnicode("\uD834\uDF06aa", [1, 0, 2, 3]), [0, 0, 1, 2]);
    
    // numbers from an AST-like complex structure are still picked out and converted:
    assert.deepEqual(nativeToUnicode("\uD834\uDF06aa", [1, "0", [[[2]]], 3]), [
      0, // notice matching type is retained
      "0", // notice matching type is retained
      [[[1]]],
      2,
    ]);
    
    // CONVERTING UNICODE-CHAR-COUNT-BASED TO NATIVE JS INDEXES
    // 𝌆 - \uD834\uDF06
    
    assert.deepEqual(unicodeToNative("\uD834\uDF06aa", [0, 1, 2]), [0, 2, 3]);
    
    assert.deepEqual(unicodeToNative("\uD834\uDF06aa", [1, 0, 2]), [2, 0, 3]);
    
    assert.throws(() => unicodeToNative("\uD834\uDF06aa", [1, 0, 2, 3]));
    // throws an error!
    // that's because there's no character (counting Unicode characters) with index 3
    // we have only three Unicode characters, so indexes go only up until 2

    Documentation

    Please visit codsen.com for a full description of the API and examples.

    Contributing

    To report bugs or request features or assistance, raise an issue on GitHub.

    Licence

    MIT License

    Copyright (c) 2010-2021 Roy Revelt and other contributors

    ok codsen star

    Install

    npm i string-convert-indexes

    DownloadsWeekly Downloads

    143

    Version

    5.0.2

    License

    MIT

    Unpacked Size

    57.2 kB

    Total Files

    9

    Last publish

    Collaborators

    • royston