An open API service indexing awesome lists of open source software.

https://github.com/hugoalh/string-dissect-es

An ECMAScript module to dissect the string; Safe with the emojis, URLs, and words.
https://github.com/hugoalh/string-dissect-es

dissect ecmascript ecmascript-module es es-module esm esmodule javascript js string ts typescript

Last synced: about 13 hours ago
JSON representation

An ECMAScript module to dissect the string; Safe with the emojis, URLs, and words.

Awesome Lists containing this project

README

          

# String Dissect (ES)

[**โš–๏ธ** MIT](./LICENSE.md)

[![GitHub: hugoalh/string-dissect-es](https://img.shields.io/github/v/release/hugoalh/string-dissect-es?label=hugoalh/string-dissect-es&labelColor=181717&logo=github&logoColor=ffffff&sort=semver&style=flat "GitHub: hugoalh/string-dissect-es")](https://github.com/hugoalh/string-dissect-es)
[![JSR: @hugoalh/string-dissect](https://img.shields.io/jsr/v/@hugoalh/string-dissect?label=@hugoalh/string-dissect&labelColor=F7DF1E&logo=jsr&logoColor=000000&style=flat "JSR: @hugoalh/string-dissect")](https://jsr.io/@hugoalh/string-dissect)
[![NPM: @hugoalh/string-dissect](https://img.shields.io/npm/v/@hugoalh/string-dissect?label=@hugoalh/string-dissect&labelColor=CB3837&logo=npm&logoColor=ffffff&style=flat "NPM: @hugoalh/string-dissect")](https://www.npmjs.com/package/@hugoalh/string-dissect)

An ECMAScript module to dissect the string; Safe with the emojis, URLs, and words.

## ๐ŸŽฏ Targets

| **Runtime \\ Source** | **GitHub Raw** | **JSR** | **NPM** |
|:--|:-:|:-:|:-:|
| **[Bun](https://bun.sh/)** >= v1.1.0 | โŒ | โœ”๏ธ | โœ”๏ธ |
| **[Deno](https://deno.land/)** >= v2.1.0 | โœ”๏ธ | โœ”๏ธ | โœ”๏ธ |
| **[NodeJS](https://nodejs.org/)** >= v20.9.0 | โŒ | โœ”๏ธ | โœ”๏ธ |

## ๐Ÿ›ก๏ธ Runtime Permissions

This does not request any runtime permission.

## #๏ธโƒฃ Sources

- GitHub Raw
```
https://raw.githubusercontent.com/hugoalh/string-dissect-es/{Tag}/mod.ts
```
- JSR
```
jsr:@hugoalh/string-dissect[@{Tag}]
```
- NPM
```
npm:@hugoalh/string-dissect[@{Tag}]
```

> [!NOTE]
> - It is recommended to include tag for immutability.
> - These are not part of the public APIs hence should not be used:
> - Benchmark/Test file (e.g.: `example.bench.ts`, `example.test.ts`).
> - Entrypoint name or path include any underscore prefix (e.g.: `_example.ts`, `foo/_example.ts`).
> - Identifier/Namespace/Symbol include any underscore prefix (e.g.: `_example`, `Foo._example`).

## โคต๏ธ Entrypoints

| **Name** | **Path** | **Description** |
|:--|:--|:--|
| `.` | `./mod.ts` | Default. |

## ๐Ÿงฉ APIs

- ```ts
class StringDissector {
constructor(options?: StringDissectorOptions);
dissect(item: string): Generator;
}
```
- ```ts
interface StringDissectorOptions {
locales?: Intl.LocalesArgument;
outputANSI?: boolean;
safeURLs?: boolean;
safeWords?: boolean;
}
```
- ```ts
interface StringSegmentDescriptor {
indexEnd: number;
indexStart: number;
type: StringSegmentType;
value: string;
}
```
- ```ts
type StringSegmentType =
| "ansi"
| "character"
| "emoji"
| "url"
| "word";
```

> [!NOTE]
> - For the full or prettier documentation, can visit via:
> - [Deno CLI `deno doc`](https://docs.deno.com/runtime/reference/cli/doc/)
> - [JSR](https://jsr.io/@hugoalh/string-dissect)

## โœ๏ธ Examples

- ```ts
const sample1 = "Vel ex sit est sit est tempor enim et voluptua consetetur gubergren gubergren ut.";

Array.from(new StringDissector().dissect(sample1));
//=>
// [
// { value: "Vel", type: "word" },
// { value: " ", type: "character" },
// { value: "ex", type: "word" },
// { value: " ", type: "character" },
// { value: "sit", type: "word" },
// { value: " ", type: "character" },
// { value: "est", type: "word" },
// { value: " ", type: "character" },
// ... +20
// ]

Array.from(new StringDissector({ safeWords: false }).dissect(sample1));
//=>
// [
// { value: "V", type: "character" },
// { value: "e", type: "character" },
// { value: "l", type: "character" },
// { value: " ", type: "character" },
// { value: "e", type: "character" },
// { value: "x", type: "character" },
// { value: " ", type: "character" },
// { value: "s", type: "character" },
// ... +73
// ]
```
- ```ts
Array.from(new StringDissector().dissect("GitHub homepage is https://github.com."));
//=>
// [
// { value: "GitHub", type: "word" },
// { value: " ", type: "character" },
// { value: "homepage", type: "word" },
// { value: " ", type: "character" },
// { value: "is", type: "word" },
// { value: " ", type: "character" },
// { value: "https://github.com", type: "url" },
// { value: ".", type: "character" }
// ]
```
- ```ts
Array.from(new StringDissector().dissect("๐Ÿค๐Ÿ’‘๐Ÿ’๐Ÿ‘ช๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘"), ({ value }) => {
return value;
});
//=> [ "๐Ÿค", "๐Ÿ’‘", "๐Ÿ’", "๐Ÿ‘ช", "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "๐Ÿ‘ฉโ€๐Ÿ‘ฆ", "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘" ]
```