inray 0.0.7 → 0.0.9
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.md +32 -29
- package/README.md +522 -58
- package/dist/db-migrator/src/bin.js +1 -1
- package/dist/db-migrator/src/bin.js.map +1 -1
- package/dist/db-migrator/src/index.d.ts +1 -1
- package/dist/db-migrator/src/index.d.ts.map +1 -1
- package/dist/db-migrator/src/index.js +1 -1
- package/dist/db-migrator/src/index.js.map +1 -1
- package/dist/db-migrator/src/lib/clients/index.d.ts +3 -3
- package/dist/db-migrator/src/lib/clients/index.d.ts.map +1 -1
- package/dist/db-migrator/src/lib/clients/index.js +5 -4
- package/dist/db-migrator/src/lib/clients/index.js.map +1 -1
- package/dist/db-migrator/src/lib/clients/postgres.js +1 -1
- package/dist/db-migrator/src/lib/clients/postgres.js.map +1 -1
- package/dist/db-migrator/src/lib/clients/sqlite.d.ts +3 -0
- package/dist/db-migrator/src/lib/clients/sqlite.d.ts.map +1 -0
- package/dist/db-migrator/src/lib/clients/sqlite.js +55 -0
- package/dist/db-migrator/src/lib/clients/sqlite.js.map +1 -0
- package/dist/db-migrator/src/lib/migrator.sql.d.ts +4 -0
- package/dist/db-migrator/src/lib/migrator.sql.d.ts.map +1 -1
- package/dist/db-migrator/src/lib/migrator.sql.js +12 -0
- package/dist/db-migrator/src/lib/migrator.sql.js.map +1 -1
- package/dist/db-migrator/src/lib/migrator.types.d.ts +4 -2
- package/dist/db-migrator/src/lib/migrator.types.d.ts.map +1 -1
- package/dist/db-migrator/src/migrator.d.ts.map +1 -1
- package/dist/db-migrator/src/migrator.js +1 -0
- package/dist/db-migrator/src/migrator.js.map +1 -1
- package/dist/random/_pcg32.d.ts +61 -0
- package/dist/random/_pcg32.d.ts.map +1 -0
- package/dist/random/_pcg32.js +122 -0
- package/dist/random/_pcg32.js.map +1 -0
- package/dist/random/_platform.d.ts +12 -0
- package/dist/random/_platform.d.ts.map +1 -0
- package/dist/random/_platform.js +13 -0
- package/dist/random/_platform.js.map +1 -0
- package/dist/random/_seed_bytes_from_uint64.d.ts +15 -0
- package/dist/random/_seed_bytes_from_uint64.d.ts.map +1 -0
- package/dist/random/_seed_bytes_from_uint64.js +23 -0
- package/dist/random/_seed_bytes_from_uint64.js.map +1 -0
- package/dist/random/_test_utils.d.ts +15 -0
- package/dist/random/_test_utils.d.ts.map +1 -0
- package/dist/random/_test_utils.js +92 -0
- package/dist/random/_test_utils.js.map +1 -0
- package/dist/random/_types.d.ts +50 -0
- package/dist/random/_types.d.ts.map +1 -0
- package/dist/random/_types.js +10 -0
- package/dist/random/_types.js.map +1 -0
- package/dist/random/between.d.ts +33 -0
- package/dist/random/between.d.ts.map +1 -0
- package/dist/random/between.js +44 -0
- package/dist/random/between.js.map +1 -0
- package/dist/random/get_random_values_seeded.d.ts +31 -0
- package/dist/random/get_random_values_seeded.d.ts.map +1 -0
- package/dist/random/get_random_values_seeded.js +34 -0
- package/dist/random/get_random_values_seeded.js.map +1 -0
- package/dist/random/integer_between.d.ts +33 -0
- package/dist/random/integer_between.d.ts.map +1 -0
- package/dist/random/integer_between.js +34 -0
- package/dist/random/integer_between.js.map +1 -0
- package/dist/random/internal/_testing.d.ts +15 -0
- package/dist/random/internal/_testing.d.ts.map +1 -0
- package/dist/random/internal/_testing.js +27 -0
- package/dist/random/internal/_testing.js.map +1 -0
- package/dist/random/mod.d.ts +45 -0
- package/dist/random/mod.d.ts.map +1 -0
- package/dist/random/mod.js +46 -0
- package/dist/random/mod.js.map +1 -0
- package/dist/random/next_float_64.d.ts +38 -0
- package/dist/random/next_float_64.d.ts.map +1 -0
- package/dist/random/next_float_64.js +47 -0
- package/dist/random/next_float_64.js.map +1 -0
- package/dist/random/sample.d.ts +58 -0
- package/dist/random/sample.d.ts.map +1 -0
- package/dist/random/sample.js +69 -0
- package/dist/random/sample.js.map +1 -0
- package/dist/random/seeded.d.ts +34 -0
- package/dist/random/seeded.d.ts.map +1 -0
- package/dist/random/seeded.js +37 -0
- package/dist/random/seeded.js.map +1 -0
- package/dist/random/shuffle.d.ts +35 -0
- package/dist/random/shuffle.d.ts.map +1 -0
- package/dist/random/shuffle.js +48 -0
- package/dist/random/shuffle.js.map +1 -0
- package/dist/semver/_constants.d.ts +20 -0
- package/dist/semver/_constants.d.ts.map +1 -0
- package/dist/semver/_constants.js +28 -0
- package/dist/semver/_constants.js.map +1 -0
- package/dist/semver/_shared.d.ts +52 -0
- package/dist/semver/_shared.d.ts.map +1 -0
- package/dist/semver/_shared.js +168 -0
- package/dist/semver/_shared.js.map +1 -0
- package/dist/semver/_test_comparator_set.d.ts +11 -0
- package/dist/semver/_test_comparator_set.d.ts.map +1 -0
- package/dist/semver/_test_comparator_set.js +62 -0
- package/dist/semver/_test_comparator_set.js.map +1 -0
- package/dist/semver/can_parse.d.ts +24 -0
- package/dist/semver/can_parse.d.ts.map +1 -0
- package/dist/semver/can_parse.js +34 -0
- package/dist/semver/can_parse.js.map +1 -0
- package/dist/semver/compare.d.ts +35 -0
- package/dist/semver/compare.d.ts.map +1 -0
- package/dist/semver/compare.js +43 -0
- package/dist/semver/compare.js.map +1 -0
- package/dist/semver/difference.d.ts +34 -0
- package/dist/semver/difference.d.ts.map +1 -0
- package/dist/semver/difference.js +48 -0
- package/dist/semver/difference.js.map +1 -0
- package/dist/semver/equals.d.ts +31 -0
- package/dist/semver/equals.d.ts.map +1 -0
- package/dist/semver/equals.js +34 -0
- package/dist/semver/equals.js.map +1 -0
- package/dist/semver/format.d.ts +29 -0
- package/dist/semver/format.d.ts.map +1 -0
- package/dist/semver/format.js +40 -0
- package/dist/semver/format.js.map +1 -0
- package/dist/semver/format_range.d.ts +25 -0
- package/dist/semver/format_range.d.ts.map +1 -0
- package/dist/semver/format_range.js +33 -0
- package/dist/semver/format_range.js.map +1 -0
- package/dist/semver/greater_or_equal.d.ts +32 -0
- package/dist/semver/greater_or_equal.d.ts.map +1 -0
- package/dist/semver/greater_or_equal.js +34 -0
- package/dist/semver/greater_or_equal.js.map +1 -0
- package/dist/semver/greater_than.d.ts +32 -0
- package/dist/semver/greater_than.d.ts.map +1 -0
- package/dist/semver/greater_than.js +34 -0
- package/dist/semver/greater_than.js.map +1 -0
- package/dist/semver/greater_than_range.d.ts +30 -0
- package/dist/semver/greater_than_range.d.ts.map +1 -0
- package/dist/semver/greater_than_range.js +64 -0
- package/dist/semver/greater_than_range.js.map +1 -0
- package/dist/semver/increment.d.ts +61 -0
- package/dist/semver/increment.d.ts.map +1 -0
- package/dist/semver/increment.js +186 -0
- package/dist/semver/increment.js.map +1 -0
- package/dist/semver/is_range.d.ts +30 -0
- package/dist/semver/is_range.d.ts.map +1 -0
- package/dist/semver/is_range.js +42 -0
- package/dist/semver/is_range.js.map +1 -0
- package/dist/semver/is_semver.d.ts +41 -0
- package/dist/semver/is_semver.d.ts.map +1 -0
- package/dist/semver/is_semver.js +60 -0
- package/dist/semver/is_semver.js.map +1 -0
- package/dist/semver/less_or_equal.d.ts +32 -0
- package/dist/semver/less_or_equal.d.ts.map +1 -0
- package/dist/semver/less_or_equal.js +34 -0
- package/dist/semver/less_or_equal.js.map +1 -0
- package/dist/semver/less_than.d.ts +32 -0
- package/dist/semver/less_than.d.ts.map +1 -0
- package/dist/semver/less_than.js +34 -0
- package/dist/semver/less_than.js.map +1 -0
- package/dist/semver/less_than_range.d.ts +30 -0
- package/dist/semver/less_than_range.d.ts.map +1 -0
- package/dist/semver/less_than_range.js +64 -0
- package/dist/semver/less_than_range.js.map +1 -0
- package/dist/semver/max_satisfying.d.ts +29 -0
- package/dist/semver/max_satisfying.d.ts.map +1 -0
- package/dist/semver/max_satisfying.js +38 -0
- package/dist/semver/max_satisfying.js.map +1 -0
- package/dist/semver/min_satisfying.d.ts +29 -0
- package/dist/semver/min_satisfying.d.ts.map +1 -0
- package/dist/semver/min_satisfying.js +38 -0
- package/dist/semver/min_satisfying.js.map +1 -0
- package/dist/semver/mod.d.ts +305 -0
- package/dist/semver/mod.d.ts.map +1 -0
- package/dist/semver/mod.js +306 -0
- package/dist/semver/mod.js.map +1 -0
- package/dist/semver/not_equals.d.ts +31 -0
- package/dist/semver/not_equals.d.ts.map +1 -0
- package/dist/semver/not_equals.js +33 -0
- package/dist/semver/not_equals.js.map +1 -0
- package/dist/semver/parse.d.ts +32 -0
- package/dist/semver/parse.d.ts.map +1 -0
- package/dist/semver/parse.js +50 -0
- package/dist/semver/parse.js.map +1 -0
- package/dist/semver/parse_range.d.ts +34 -0
- package/dist/semver/parse_range.d.ts.map +1 -0
- package/dist/semver/parse_range.js +352 -0
- package/dist/semver/parse_range.js.map +1 -0
- package/dist/semver/range_intersects.d.ts +32 -0
- package/dist/semver/range_intersects.d.ts.map +1 -0
- package/dist/semver/range_intersects.js +89 -0
- package/dist/semver/range_intersects.js.map +1 -0
- package/dist/semver/satisfies.d.ts +31 -0
- package/dist/semver/satisfies.d.ts.map +1 -0
- package/dist/semver/satisfies.js +33 -0
- package/dist/semver/satisfies.js.map +1 -0
- package/dist/semver/try_parse.d.ts +28 -0
- package/dist/semver/try_parse.d.ts.map +1 -0
- package/dist/semver/try_parse.js +35 -0
- package/dist/semver/try_parse.js.map +1 -0
- package/dist/semver/try_parse_range.d.ts +31 -0
- package/dist/semver/try_parse_range.d.ts.map +1 -0
- package/dist/semver/try_parse_range.js +40 -0
- package/dist/semver/try_parse_range.js.map +1 -0
- package/dist/semver/types.d.ts +66 -0
- package/dist/semver/types.d.ts.map +1 -0
- package/dist/semver/types.js +10 -0
- package/dist/semver/types.js.map +1 -0
- package/dist/text/_util.d.ts +11 -0
- package/dist/text/_util.d.ts.map +1 -0
- package/dist/text/_util.js +21 -0
- package/dist/text/_util.js.map +1 -0
- package/dist/text/closest_string.d.ts +49 -0
- package/dist/text/closest_string.d.ts.map +1 -0
- package/dist/text/closest_string.js +51 -0
- package/dist/text/closest_string.js.map +1 -0
- package/dist/text/compare_similarity.d.ts +54 -0
- package/dist/text/compare_similarity.d.ts.map +1 -0
- package/dist/text/compare_similarity.js +45 -0
- package/dist/text/compare_similarity.js.map +1 -0
- package/dist/text/levenshtein_distance.d.ts +30 -0
- package/dist/text/levenshtein_distance.d.ts.map +1 -0
- package/dist/text/levenshtein_distance.js +134 -0
- package/dist/text/levenshtein_distance.js.map +1 -0
- package/dist/text/mod.d.ts +34 -0
- package/dist/text/mod.d.ts.map +1 -0
- package/dist/text/mod.js +35 -0
- package/dist/text/mod.js.map +1 -0
- package/dist/text/to_camel_case.d.ts +23 -0
- package/dist/text/to_camel_case.d.ts.map +1 -0
- package/dist/text/to_camel_case.js +29 -0
- package/dist/text/to_camel_case.js.map +1 -0
- package/dist/text/to_kebab_case.d.ts +23 -0
- package/dist/text/to_kebab_case.d.ts.map +1 -0
- package/dist/text/to_kebab_case.js +28 -0
- package/dist/text/to_kebab_case.js.map +1 -0
- package/dist/text/to_pascal_case.d.ts +23 -0
- package/dist/text/to_pascal_case.d.ts.map +1 -0
- package/dist/text/to_pascal_case.js +28 -0
- package/dist/text/to_pascal_case.js.map +1 -0
- package/dist/text/to_snake_case.d.ts +23 -0
- package/dist/text/to_snake_case.d.ts.map +1 -0
- package/dist/text/to_snake_case.js +28 -0
- package/dist/text/to_snake_case.js.map +1 -0
- package/dist/text/truncate.d.ts +81 -0
- package/dist/text/truncate.d.ts.map +1 -0
- package/dist/text/truncate.js +116 -0
- package/dist/text/truncate.js.map +1 -0
- package/dist/text/word_similarity_sort.d.ts +46 -0
- package/dist/text/word_similarity_sort.d.ts.map +1 -0
- package/dist/text/word_similarity_sort.js +47 -0
- package/dist/text/word_similarity_sort.js.map +1 -0
- package/package.json +27 -2
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
import type { Range } from './types.ts';
|
|
10
|
+
/**
|
|
11
|
+
* Parses the given range string and returns a Range object. If the range string
|
|
12
|
+
* is invalid, `undefined` is returned.
|
|
13
|
+
*
|
|
14
|
+
* @example Usage
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { tryParseRange } from "inray/semver";
|
|
17
|
+
*
|
|
18
|
+
* tryParseRange(">=1.2.3 <1.2.4");
|
|
19
|
+
* // [
|
|
20
|
+
* // [
|
|
21
|
+
* // { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [], build: [] },
|
|
22
|
+
* // { operator: "<", major: 1, minor: 2, patch: 4, prerelease: [], build: [] }
|
|
23
|
+
* // ]
|
|
24
|
+
* // ]
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @param value The range string
|
|
28
|
+
* @returns A Range object if valid otherwise `undefined`
|
|
29
|
+
*/
|
|
30
|
+
export declare function tryParseRange(value: string): Range | undefined;
|
|
31
|
+
//# sourceMappingURL=try_parse_range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"try_parse_range.d.ts","sourceRoot":"","sources":["../../src/semver/try_parse_range.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAIL,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAQ9D"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
import { parseRange } from "./parse_range.js";
|
|
10
|
+
/**
|
|
11
|
+
* Parses the given range string and returns a Range object. If the range string
|
|
12
|
+
* is invalid, `undefined` is returned.
|
|
13
|
+
*
|
|
14
|
+
* @example Usage
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { tryParseRange } from "inray/semver";
|
|
17
|
+
*
|
|
18
|
+
* tryParseRange(">=1.2.3 <1.2.4");
|
|
19
|
+
* // [
|
|
20
|
+
* // [
|
|
21
|
+
* // { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [], build: [] },
|
|
22
|
+
* // { operator: "<", major: 1, minor: 2, patch: 4, prerelease: [], build: [] }
|
|
23
|
+
* // ]
|
|
24
|
+
* // ]
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @param value The range string
|
|
28
|
+
* @returns A Range object if valid otherwise `undefined`
|
|
29
|
+
*/
|
|
30
|
+
export function tryParseRange(value) {
|
|
31
|
+
try {
|
|
32
|
+
// Return '*' instead of '' so that truthiness works.
|
|
33
|
+
// This will throw if it's invalid anyway
|
|
34
|
+
return parseRange(value);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=try_parse_range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"try_parse_range.js","sourceRoot":"","sources":["../../src/semver/try_parse_range.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAKL,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC;QACH,qDAAqD;QACrD,yCAAyC;QACzC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
/**
|
|
10
|
+
* The possible release types are used as an operator for the
|
|
11
|
+
* increment function and as a result of the difference function.
|
|
12
|
+
*/
|
|
13
|
+
export type ReleaseType = 'pre' | 'major' | 'premajor' | 'minor' | 'preminor' | 'patch' | 'prepatch' | 'prerelease';
|
|
14
|
+
/**
|
|
15
|
+
* SemVer comparison operators.
|
|
16
|
+
*/
|
|
17
|
+
export type Operator = undefined | '=' | '!=' | '>' | '>=' | '<' | '<=';
|
|
18
|
+
/**
|
|
19
|
+
* The shape of a valid SemVer comparator.
|
|
20
|
+
*
|
|
21
|
+
* @example Usage
|
|
22
|
+
* ```ts
|
|
23
|
+
* import type { Comparator } from "inray/semver";
|
|
24
|
+
*
|
|
25
|
+
* const comparator: Comparator = {
|
|
26
|
+
* operator: ">",
|
|
27
|
+
* major: 1,
|
|
28
|
+
* minor: 2,
|
|
29
|
+
* patch: 3,
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export interface Comparator extends SemVer {
|
|
34
|
+
/** The operator */
|
|
35
|
+
operator?: Operator;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A SemVer object parsed into its constituent parts.
|
|
39
|
+
*/
|
|
40
|
+
export interface SemVer {
|
|
41
|
+
/** The major version */
|
|
42
|
+
major: number;
|
|
43
|
+
/** The minor version */
|
|
44
|
+
minor: number;
|
|
45
|
+
/** The patch version */
|
|
46
|
+
patch: number;
|
|
47
|
+
/**
|
|
48
|
+
* The prerelease version
|
|
49
|
+
*
|
|
50
|
+
* @default {[]}
|
|
51
|
+
*/
|
|
52
|
+
prerelease?: (string | number)[];
|
|
53
|
+
/**
|
|
54
|
+
* The build metadata
|
|
55
|
+
*
|
|
56
|
+
* @default {[]}
|
|
57
|
+
*/
|
|
58
|
+
build?: string[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A type representing a semantic version range. The ranges consist of
|
|
62
|
+
* a nested array, which represents a set of OR comparisons while the
|
|
63
|
+
* inner array represents AND comparisons.
|
|
64
|
+
*/
|
|
65
|
+
export type Range = Comparator[][];
|
|
66
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/semver/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAIL;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAEpH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,GAAG,GAEH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,CAAC;AAET;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,UAAW,SAAQ,MAAM;IACxC,mBAAmB;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,KAAK,GAAG,UAAU,EAAE,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/semver/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
export declare function splitToWords(input: string): [] | RegExpMatchArray;
|
|
10
|
+
export declare function capitalizeWord(word: string): string;
|
|
11
|
+
//# sourceMappingURL=_util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_util.d.ts","sourceRoot":"","sources":["../../src/text/_util.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAaL,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,yBAEzC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
const CAPITALIZED_WORD_REGEXP = /\p{Lu}\p{Ll}+/u; // e.g. Apple
|
|
10
|
+
const ACRONYM_REGEXP = /\p{Lu}+(?=(\p{Lu}\p{Ll})|\P{L}|\b)/u; // e.g. ID, URL, handles an acronym followed by a capitalized word e.g. HTMLElement
|
|
11
|
+
const LOWERCASED_WORD_REGEXP = /(\p{Ll}+)/u; // e.g. apple
|
|
12
|
+
const ANY_LETTERS_REGEXP = /\p{L}+/u; // will match any sequence of letters, including in languages without a concept of upper/lower case
|
|
13
|
+
const DIGITS_REGEXP = /\p{N}+/u; // e.g. 123
|
|
14
|
+
const WORD_OR_NUMBER_REGEXP = new RegExp(`${CAPITALIZED_WORD_REGEXP.source}|${ACRONYM_REGEXP.source}|${LOWERCASED_WORD_REGEXP.source}|${ANY_LETTERS_REGEXP.source}|${DIGITS_REGEXP.source}`, 'gu');
|
|
15
|
+
export function splitToWords(input) {
|
|
16
|
+
return input.match(WORD_OR_NUMBER_REGEXP) ?? [];
|
|
17
|
+
}
|
|
18
|
+
export function capitalizeWord(word) {
|
|
19
|
+
return word ? word[0].toUpperCase() + word.slice(1).toLowerCase() : word;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=_util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_util.js","sourceRoot":"","sources":["../../src/text/_util.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAEL,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,CAAC,aAAa;AAC/D,MAAM,cAAc,GAAG,qCAAqC,CAAC,CAAC,mFAAmF;AACjJ,MAAM,sBAAsB,GAAG,YAAY,CAAC,CAAC,aAAa;AAC1D,MAAM,kBAAkB,GAAG,SAAS,CAAC,CAAC,mGAAmG;AACzI,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,WAAW;AAE5C,MAAM,qBAAqB,GAAG,IAAI,MAAM,CACtC,GAAG,uBAAuB,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,IAAI,sBAAsB,CAAC,MAAM,IAAI,kBAAkB,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,EAAE,EAClJ,IAAI,CACL,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
/** Options for {@linkcode closestString}. */
|
|
10
|
+
export interface ClosestStringOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Whether the distance should include case.
|
|
13
|
+
*
|
|
14
|
+
* @default {false}
|
|
15
|
+
*/
|
|
16
|
+
caseSensitive?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* A custom comparison function to use for comparing strings.
|
|
19
|
+
*
|
|
20
|
+
* @param a The first string for comparison.
|
|
21
|
+
* @param b The second string for comparison.
|
|
22
|
+
* @returns The distance between the two strings.
|
|
23
|
+
* @default {levenshteinDistance}
|
|
24
|
+
*/
|
|
25
|
+
compareFn?: (a: string, b: string) => number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Finds the most similar string from an array of strings.
|
|
29
|
+
*
|
|
30
|
+
* By default, calculates the distance between words using the
|
|
31
|
+
* {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}.
|
|
32
|
+
*
|
|
33
|
+
* @example Usage
|
|
34
|
+
* ```ts
|
|
35
|
+
* import { closestString } from "inray/text";
|
|
36
|
+
*
|
|
37
|
+
* const possibleWords = ["length", "size", "blah", "help"];
|
|
38
|
+
* const suggestion = closestString("hep", possibleWords);
|
|
39
|
+
*
|
|
40
|
+
* console.log(suggestion); // "help"
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @param givenWord The string to measure distance against
|
|
44
|
+
* @param possibleWords The string-array to pick the closest string from
|
|
45
|
+
* @param options The options for the comparison.
|
|
46
|
+
* @returns The closest string
|
|
47
|
+
*/
|
|
48
|
+
export declare function closestString(givenWord: string, possibleWords: ReadonlyArray<string>, options?: ClosestStringOptions): string;
|
|
49
|
+
//# sourceMappingURL=closest_string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closest_string.d.ts","sourceRoot":"","sources":["../../src/text/closest_string.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAKL,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,EACpC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,MAAM,CAoBR"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
// This module is browser compatible.
|
|
10
|
+
import { levenshteinDistance } from "./levenshtein_distance.js";
|
|
11
|
+
/**
|
|
12
|
+
* Finds the most similar string from an array of strings.
|
|
13
|
+
*
|
|
14
|
+
* By default, calculates the distance between words using the
|
|
15
|
+
* {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}.
|
|
16
|
+
*
|
|
17
|
+
* @example Usage
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { closestString } from "inray/text";
|
|
20
|
+
*
|
|
21
|
+
* const possibleWords = ["length", "size", "blah", "help"];
|
|
22
|
+
* const suggestion = closestString("hep", possibleWords);
|
|
23
|
+
*
|
|
24
|
+
* console.log(suggestion); // "help"
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @param givenWord The string to measure distance against
|
|
28
|
+
* @param possibleWords The string-array to pick the closest string from
|
|
29
|
+
* @param options The options for the comparison.
|
|
30
|
+
* @returns The closest string
|
|
31
|
+
*/
|
|
32
|
+
export function closestString(givenWord, possibleWords, options) {
|
|
33
|
+
if (possibleWords.length === 0) {
|
|
34
|
+
throw new TypeError('When using closestString(), the possibleWords array must contain at least one word');
|
|
35
|
+
}
|
|
36
|
+
const { caseSensitive, compareFn = levenshteinDistance } = { ...options };
|
|
37
|
+
if (!caseSensitive) {
|
|
38
|
+
givenWord = givenWord.toLowerCase();
|
|
39
|
+
}
|
|
40
|
+
let nearestWord = possibleWords[0];
|
|
41
|
+
let closestStringDistance = Infinity;
|
|
42
|
+
for (const each of possibleWords) {
|
|
43
|
+
const distance = caseSensitive ? compareFn(givenWord, each) : compareFn(givenWord, each.toLowerCase());
|
|
44
|
+
if (distance < closestStringDistance) {
|
|
45
|
+
nearestWord = each;
|
|
46
|
+
closestStringDistance = distance;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return nearestWord;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=closest_string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closest_string.js","sourceRoot":"","sources":["../../src/text/closest_string.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAEL,qCAAqC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAqBhE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAiB,EACjB,aAAoC,EACpC,OAA8B;IAE9B,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CAAC,oFAAoF,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,EAAE,aAAa,EAAE,SAAS,GAAG,mBAAmB,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAE1E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,WAAW,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;IACpC,IAAI,qBAAqB,GAAG,QAAQ,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvG,IAAI,QAAQ,GAAG,qBAAqB,EAAE,CAAC;YACrC,WAAW,GAAG,IAAI,CAAC;YACnB,qBAAqB,GAAG,QAAQ,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
/** Options for {@linkcode compareSimilarity}. */
|
|
10
|
+
export interface CompareSimilarityOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Whether the distance should include case.
|
|
13
|
+
*
|
|
14
|
+
* @default {false}
|
|
15
|
+
*/
|
|
16
|
+
caseSensitive?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* A custom comparison function to use for comparing strings.
|
|
19
|
+
*
|
|
20
|
+
* @param a The first string for comparison.
|
|
21
|
+
* @param b The second string for comparison.
|
|
22
|
+
* @returns The distance between the two strings.
|
|
23
|
+
* @default {levenshteinDistance}
|
|
24
|
+
*/
|
|
25
|
+
compareFn?: (a: string, b: string) => number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Takes a string and generates a comparator function to determine which of two
|
|
29
|
+
* strings is more similar to the given one.
|
|
30
|
+
*
|
|
31
|
+
* By default, calculates the distance between words using the
|
|
32
|
+
* {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}.
|
|
33
|
+
*
|
|
34
|
+
* @param givenWord The string to measure distance against.
|
|
35
|
+
* @param options Options for the sort.
|
|
36
|
+
* @returns The difference in distance. This will be a negative number if `a`
|
|
37
|
+
* is more similar to `givenWord` than `b`, a positive number if `b` is more
|
|
38
|
+
* similar, or `0` if they are equally similar.
|
|
39
|
+
*
|
|
40
|
+
* @example Usage
|
|
41
|
+
*
|
|
42
|
+
* Most-similar words will be at the start of the array.
|
|
43
|
+
*
|
|
44
|
+
* ```ts
|
|
45
|
+
* import { compareSimilarity } from "inray/text";
|
|
46
|
+
*
|
|
47
|
+
* const words = ["hi", "hello", "help"];
|
|
48
|
+
* const sortedWords = words.toSorted(compareSimilarity("hep"));
|
|
49
|
+
*
|
|
50
|
+
* console.log(sortedWords); // ["help", "hi", "hello"]
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function compareSimilarity(givenWord: string, options?: CompareSimilarityOptions): (a: string, b: string) => number;
|
|
54
|
+
//# sourceMappingURL=compare_similarity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare_similarity.d.ts","sourceRoot":"","sources":["../../src/text/compare_similarity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAKL,iDAAiD;AACjD,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,wBAAwB,GACjC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAOlC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
// This module is browser compatible.
|
|
10
|
+
import { levenshteinDistance } from "./levenshtein_distance.js";
|
|
11
|
+
/**
|
|
12
|
+
* Takes a string and generates a comparator function to determine which of two
|
|
13
|
+
* strings is more similar to the given one.
|
|
14
|
+
*
|
|
15
|
+
* By default, calculates the distance between words using the
|
|
16
|
+
* {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}.
|
|
17
|
+
*
|
|
18
|
+
* @param givenWord The string to measure distance against.
|
|
19
|
+
* @param options Options for the sort.
|
|
20
|
+
* @returns The difference in distance. This will be a negative number if `a`
|
|
21
|
+
* is more similar to `givenWord` than `b`, a positive number if `b` is more
|
|
22
|
+
* similar, or `0` if they are equally similar.
|
|
23
|
+
*
|
|
24
|
+
* @example Usage
|
|
25
|
+
*
|
|
26
|
+
* Most-similar words will be at the start of the array.
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { compareSimilarity } from "inray/text";
|
|
30
|
+
*
|
|
31
|
+
* const words = ["hi", "hello", "help"];
|
|
32
|
+
* const sortedWords = words.toSorted(compareSimilarity("hep"));
|
|
33
|
+
*
|
|
34
|
+
* console.log(sortedWords); // ["help", "hi", "hello"]
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function compareSimilarity(givenWord, options) {
|
|
38
|
+
const { compareFn = levenshteinDistance } = { ...options };
|
|
39
|
+
if (options?.caseSensitive) {
|
|
40
|
+
return (a, b) => compareFn(givenWord, a) - compareFn(givenWord, b);
|
|
41
|
+
}
|
|
42
|
+
givenWord = givenWord.toLowerCase();
|
|
43
|
+
return (a, b) => compareFn(givenWord, a.toLowerCase()) - compareFn(givenWord, b.toLowerCase());
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=compare_similarity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare_similarity.js","sourceRoot":"","sources":["../../src/text/compare_similarity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAEL,qCAAqC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAqBhE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,OAAkC;IAElC,MAAM,EAAE,SAAS,GAAG,mBAAmB,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3D,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACjH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
/**
|
|
10
|
+
* Calculates the
|
|
11
|
+
* {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}
|
|
12
|
+
* between two strings.
|
|
13
|
+
*
|
|
14
|
+
* > [!NOTE]
|
|
15
|
+
* > The complexity of this function is O(m * n), where m and n are the lengths
|
|
16
|
+
* > of the two strings. It's recommended to limit the length and validate input
|
|
17
|
+
* > if arbitrarily accepting input.
|
|
18
|
+
*
|
|
19
|
+
* @example Usage
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { levenshteinDistance } from "inray/text";
|
|
22
|
+
*
|
|
23
|
+
* levenshteinDistance("aa", "bb"); // 2
|
|
24
|
+
* ```
|
|
25
|
+
* @param str1 The first string.
|
|
26
|
+
* @param str2 The second string.
|
|
27
|
+
* @returns The Levenshtein distance between the two strings.
|
|
28
|
+
*/
|
|
29
|
+
export declare function levenshteinDistance(str1: string, str2: string): number;
|
|
30
|
+
//# sourceMappingURL=levenshtein_distance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"levenshtein_distance.d.ts","sourceRoot":"","sources":["../../src/text/levenshtein_distance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAoGL;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAWtE"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
// This module is browser compatible.
|
|
10
|
+
const { ceil } = Math;
|
|
11
|
+
// This implements Myers' bit-vector algorithm as described here:
|
|
12
|
+
// https://dl.acm.org/doi/pdf/10.1145/316542.316550
|
|
13
|
+
const peq = new Uint32Array(0x110000);
|
|
14
|
+
function myers32(t, p) {
|
|
15
|
+
const n = t.length;
|
|
16
|
+
const m = p.length;
|
|
17
|
+
for (let i = 0; i < m; i++) {
|
|
18
|
+
peq[p[i].codePointAt(0)] |= 1 << i;
|
|
19
|
+
}
|
|
20
|
+
const last = m - 1;
|
|
21
|
+
let pv = -1;
|
|
22
|
+
let mv = 0;
|
|
23
|
+
let score = m;
|
|
24
|
+
for (let j = 0; j < n; j++) {
|
|
25
|
+
const eq = peq[t[j].codePointAt(0)];
|
|
26
|
+
const xv = eq | mv;
|
|
27
|
+
const xh = (((eq & pv) + pv) ^ pv) | eq;
|
|
28
|
+
let ph = mv | ~(xh | pv);
|
|
29
|
+
let mh = pv & xh;
|
|
30
|
+
score += ((ph >>> last) & 1) - ((mh >>> last) & 1);
|
|
31
|
+
// Set the horizontal delta in the first row to +1
|
|
32
|
+
// because we are computing the distance between two full strings.
|
|
33
|
+
ph = (ph << 1) | 1;
|
|
34
|
+
mh = mh << 1;
|
|
35
|
+
pv = mh | ~(xv | ph);
|
|
36
|
+
mv = ph & xv;
|
|
37
|
+
}
|
|
38
|
+
for (let i = 0; i < m; i++) {
|
|
39
|
+
peq[p[i].codePointAt(0)] = 0;
|
|
40
|
+
}
|
|
41
|
+
return score;
|
|
42
|
+
}
|
|
43
|
+
function myersX(t, p) {
|
|
44
|
+
const n = t.length;
|
|
45
|
+
const m = p.length;
|
|
46
|
+
// Initialize the horizontal deltas to +1.
|
|
47
|
+
const h = new Int8Array(n).fill(1);
|
|
48
|
+
const bmax = ceil(m / 32) - 1;
|
|
49
|
+
// Process the blocks row by row so that we can use the fixed-size peq array.
|
|
50
|
+
for (let b = 0; b < bmax; b++) {
|
|
51
|
+
const start = b * 32;
|
|
52
|
+
const end = (b + 1) * 32;
|
|
53
|
+
for (let i = start; i < end; i++) {
|
|
54
|
+
peq[p[i].codePointAt(0)] |= 1 << i;
|
|
55
|
+
}
|
|
56
|
+
let pv = -1;
|
|
57
|
+
let mv = 0;
|
|
58
|
+
for (let j = 0; j < n; j++) {
|
|
59
|
+
const hin = h[j];
|
|
60
|
+
let eq = peq[t[j].codePointAt(0)];
|
|
61
|
+
const xv = eq | mv;
|
|
62
|
+
eq |= hin >>> 31;
|
|
63
|
+
const xh = (((eq & pv) + pv) ^ pv) | eq;
|
|
64
|
+
let ph = mv | ~(xh | pv);
|
|
65
|
+
let mh = pv & xh;
|
|
66
|
+
h[j] = (ph >>> 31) - (mh >>> 31);
|
|
67
|
+
ph = (ph << 1) | (-hin >>> 31);
|
|
68
|
+
mh = (mh << 1) | (hin >>> 31);
|
|
69
|
+
pv = mh | ~(xv | ph);
|
|
70
|
+
mv = ph & xv;
|
|
71
|
+
}
|
|
72
|
+
for (let i = start; i < end; i++) {
|
|
73
|
+
peq[p[i].codePointAt(0)] = 0;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const start = bmax * 32;
|
|
77
|
+
for (let i = start; i < m; i++) {
|
|
78
|
+
peq[p[i].codePointAt(0)] |= 1 << i;
|
|
79
|
+
}
|
|
80
|
+
const last = m - 1;
|
|
81
|
+
let pv = -1;
|
|
82
|
+
let mv = 0;
|
|
83
|
+
let score = m;
|
|
84
|
+
for (let j = 0; j < n; j++) {
|
|
85
|
+
const hin = h[j];
|
|
86
|
+
let eq = peq[t[j].codePointAt(0)];
|
|
87
|
+
const xv = eq | mv;
|
|
88
|
+
eq |= hin >>> 31;
|
|
89
|
+
const xh = (((eq & pv) + pv) ^ pv) | eq;
|
|
90
|
+
let ph = mv | ~(xh | pv);
|
|
91
|
+
let mh = pv & xh;
|
|
92
|
+
score += ((ph >>> last) & 1) - ((mh >>> last) & 1);
|
|
93
|
+
ph = (ph << 1) | (-hin >>> 31);
|
|
94
|
+
mh = (mh << 1) | (hin >>> 31);
|
|
95
|
+
pv = mh | ~(xv | ph);
|
|
96
|
+
mv = ph & xv;
|
|
97
|
+
}
|
|
98
|
+
for (let i = start; i < m; i++) {
|
|
99
|
+
peq[p[i].codePointAt(0)] = 0;
|
|
100
|
+
}
|
|
101
|
+
return score;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Calculates the
|
|
105
|
+
* {@link https://en.wikipedia.org/wiki/Levenshtein_distance | Levenshtein distance}
|
|
106
|
+
* between two strings.
|
|
107
|
+
*
|
|
108
|
+
* > [!NOTE]
|
|
109
|
+
* > The complexity of this function is O(m * n), where m and n are the lengths
|
|
110
|
+
* > of the two strings. It's recommended to limit the length and validate input
|
|
111
|
+
* > if arbitrarily accepting input.
|
|
112
|
+
*
|
|
113
|
+
* @example Usage
|
|
114
|
+
* ```ts
|
|
115
|
+
* import { levenshteinDistance } from "inray/text";
|
|
116
|
+
*
|
|
117
|
+
* levenshteinDistance("aa", "bb"); // 2
|
|
118
|
+
* ```
|
|
119
|
+
* @param str1 The first string.
|
|
120
|
+
* @param str2 The second string.
|
|
121
|
+
* @returns The Levenshtein distance between the two strings.
|
|
122
|
+
*/
|
|
123
|
+
export function levenshteinDistance(str1, str2) {
|
|
124
|
+
let t = [...str1];
|
|
125
|
+
let p = [...str2];
|
|
126
|
+
if (t.length < p.length) {
|
|
127
|
+
[p, t] = [t, p];
|
|
128
|
+
}
|
|
129
|
+
if (p.length === 0) {
|
|
130
|
+
return t.length;
|
|
131
|
+
}
|
|
132
|
+
return p.length <= 32 ? myers32(t, p) : myersX(t, p);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=levenshtein_distance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"levenshtein_distance.js","sourceRoot":"","sources":["../../src/text/levenshtein_distance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: denoland/@std
|
|
3
|
+
* - Copyright (c) 2018-2026 the Deno authors. MIT license.
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
/**
|
|
10
|
+
* Utility functions for working with text.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { toCamelCase, compareSimilarity } from "inray/text";
|
|
14
|
+
*
|
|
15
|
+
* toCamelCase("snake_case"); // "snakeCase"
|
|
16
|
+
*
|
|
17
|
+
* const words = ["hi", "help", "hello"];
|
|
18
|
+
*
|
|
19
|
+
* // Words most similar to "hep" will be at the front
|
|
20
|
+
* words.sort(compareSimilarity("hep")); // ["help", "hi", "hello"]
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @module
|
|
24
|
+
*/
|
|
25
|
+
export * from './levenshtein_distance.ts';
|
|
26
|
+
export * from './closest_string.ts';
|
|
27
|
+
export * from './compare_similarity.ts';
|
|
28
|
+
export * from './word_similarity_sort.ts';
|
|
29
|
+
export * from './to_camel_case.ts';
|
|
30
|
+
export * from './to_kebab_case.ts';
|
|
31
|
+
export * from './to_pascal_case.ts';
|
|
32
|
+
export * from './to_snake_case.ts';
|
|
33
|
+
export * from './truncate.ts';
|
|
34
|
+
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/text/mod.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAIL;;;;;;;;;;;;;;;GAeG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
|