From e1f95c87aa1828c736204ce72640f2119ae17175 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 26 Oct 2023 11:51:07 -0400 Subject: [PATCH] Use tshy for proper commson/esm module exporting --- .gitignore | 2 + dist/{ => commonjs}/atomic.d.ts | 0 dist/{ => commonjs}/atomic.js | 0 dist/{ => commonjs}/index.d.ts | 11 +- dist/{ => commonjs}/index.js | 16 +- .../matchingStrategies/cosineSimilarity.d.ts | 2 +- .../matchingStrategies/cosineSimilarity.js | 0 .../matchingStrategies/diceSimilarity.d.ts | 2 +- .../matchingStrategies/diceSimilarity.js | 0 dist/commonjs/matchingStrategies/index.d.ts | 5 + dist/commonjs/matchingStrategies/index.js | 9 + .../matchingStrategies/levenSimilarity.d.ts | 2 +- .../matchingStrategies/levenSimilarity.js | 0 dist/commonjs/package.json | 3 + dist/esm/atomic.d.ts | 43 ++ dist/esm/atomic.js | 1 + dist/esm/index.d.ts | 11 + dist/esm/index.js | 67 ++++ .../matchingStrategies/cosineSimilarity.d.ts | 3 + .../matchingStrategies/cosineSimilarity.js} | 15 +- .../matchingStrategies/diceSimilarity.d.ts | 3 + dist/esm/matchingStrategies/diceSimilarity.js | 12 + dist/esm/matchingStrategies/index.d.ts | 5 + dist/esm/matchingStrategies/index.js | 4 + .../matchingStrategies/levenSimilarity.d.ts | 3 + .../esm/matchingStrategies/levenSimilarity.js | 28 ++ dist/esm/package.json | 3 + dist/matchingStrategies/CosineSimilarity.d.ts | 2 - dist/matchingStrategies/index.d.ts | 5 - dist/matchingStrategies/index.js | 9 - package.json | 35 +- src/index.ts | 11 +- src/matchingStrategies/cosineSimilarity.d.ts | 6 +- src/matchingStrategies/cosineSimilarity.ts | 2 +- src/matchingStrategies/diceSimilarity.ts | 2 +- src/matchingStrategies/index.ts | 8 +- src/matchingStrategies/levenSimilarity.d.ts | 6 +- src/matchingStrategies/levenSimilarity.ts | 2 +- tsconfig.json | 10 +- yarn.lock | 379 ++++++++++++++++++ 40 files changed, 668 insertions(+), 59 deletions(-) rename dist/{ => commonjs}/atomic.d.ts (100%) rename dist/{ => commonjs}/atomic.js (100%) rename dist/{ => commonjs}/index.d.ts (54%) rename dist/{ => commonjs}/index.js (83%) rename dist/{ => commonjs}/matchingStrategies/cosineSimilarity.d.ts (73%) rename dist/{ => commonjs}/matchingStrategies/cosineSimilarity.js (100%) rename dist/{ => commonjs}/matchingStrategies/diceSimilarity.d.ts (73%) rename dist/{ => commonjs}/matchingStrategies/diceSimilarity.js (100%) create mode 100644 dist/commonjs/matchingStrategies/index.d.ts create mode 100644 dist/commonjs/matchingStrategies/index.js rename dist/{ => commonjs}/matchingStrategies/levenSimilarity.d.ts (73%) rename dist/{ => commonjs}/matchingStrategies/levenSimilarity.js (100%) create mode 100644 dist/commonjs/package.json create mode 100644 dist/esm/atomic.d.ts create mode 100644 dist/esm/atomic.js create mode 100644 dist/esm/index.d.ts create mode 100644 dist/esm/index.js create mode 100644 dist/esm/matchingStrategies/cosineSimilarity.d.ts rename dist/{matchingStrategies/CosineSimilarity.js => esm/matchingStrategies/cosineSimilarity.js} (83%) create mode 100644 dist/esm/matchingStrategies/diceSimilarity.d.ts create mode 100644 dist/esm/matchingStrategies/diceSimilarity.js create mode 100644 dist/esm/matchingStrategies/index.d.ts create mode 100644 dist/esm/matchingStrategies/index.js create mode 100644 dist/esm/matchingStrategies/levenSimilarity.d.ts create mode 100644 dist/esm/matchingStrategies/levenSimilarity.js create mode 100644 dist/esm/package.json delete mode 100644 dist/matchingStrategies/CosineSimilarity.d.ts delete mode 100644 dist/matchingStrategies/index.d.ts delete mode 100644 dist/matchingStrategies/index.js diff --git a/.gitignore b/.gitignore index e760a07..a0f6792 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ **/src/**/*.map **/src/**/*.js +**/src/**/*.d.ts node_modules/ /.idea /docs +.tshy diff --git a/dist/atomic.d.ts b/dist/commonjs/atomic.d.ts similarity index 100% rename from dist/atomic.d.ts rename to dist/commonjs/atomic.d.ts diff --git a/dist/atomic.js b/dist/commonjs/atomic.js similarity index 100% rename from dist/atomic.js rename to dist/commonjs/atomic.js diff --git a/dist/index.d.ts b/dist/commonjs/index.d.ts similarity index 54% rename from dist/index.d.ts rename to dist/commonjs/index.d.ts index 4c21447..8c1309f 100644 --- a/dist/index.d.ts +++ b/dist/commonjs/index.d.ts @@ -1,6 +1,11 @@ -import { StringComparisonOptions, StringSamenessResult } from "./atomic"; +import { StringComparisonOptions, StringSamenessResult } from "./atomic.js"; declare const defaultStrCompareTransformFuncs: ((str: string) => string)[]; -declare const defaultStrategies: import("./atomic").ComparisonStrategy[]; +declare const defaultStrategies: import("./atomic.js").ComparisonStrategy[]; declare const stringSameness: (valA: string, valB: string, options?: StringComparisonOptions) => StringSamenessResult; declare const createStringSameness: (defaults: StringComparisonOptions) => (valA: string, valB: string, options?: StringComparisonOptions) => StringSamenessResult; -export { StringSamenessResult, StringComparisonOptions, stringSameness, createStringSameness, defaultStrategies, defaultStrCompareTransformFuncs }; +declare const strategies: { + diceStrategy: import("./atomic.js").ComparisonStrategy; + levenStrategy: import("./atomic.js").ComparisonStrategy; + cosineStrategy: import("./atomic.js").ComparisonStrategy; +}; +export { StringSamenessResult, StringComparisonOptions, stringSameness, createStringSameness, defaultStrategies, strategies, defaultStrCompareTransformFuncs }; diff --git a/dist/index.js b/dist/commonjs/index.js similarity index 83% rename from dist/index.js rename to dist/commonjs/index.js index b26e0a3..60c7b17 100644 --- a/dist/index.js +++ b/dist/commonjs/index.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.defaultStrCompareTransformFuncs = exports.defaultStrategies = exports.createStringSameness = exports.stringSameness = void 0; -const matchingStrategies_1 = require("./matchingStrategies"); +exports.defaultStrCompareTransformFuncs = exports.strategies = exports.defaultStrategies = exports.createStringSameness = exports.stringSameness = void 0; +const index_js_1 = require("./matchingStrategies/index.js"); const sentenceLengthWeight = (length) => { // thanks jordan :') // constants are black magic @@ -19,9 +19,9 @@ const defaultStrCompareTransformFuncs = [ ]; exports.defaultStrCompareTransformFuncs = defaultStrCompareTransformFuncs; const defaultStrategies = [ - matchingStrategies_1.diceStrategy, - matchingStrategies_1.levenStrategy, - matchingStrategies_1.cosineStrategy + index_js_1.diceStrategy, + index_js_1.levenStrategy, + index_js_1.cosineStrategy ]; exports.defaultStrategies = defaultStrategies; const stringSameness = (valA, valB, options) => { @@ -66,3 +66,9 @@ const createStringSameness = (defaults) => { return (valA, valB, options = {}) => stringSameness(valA, valB, { ...defaults, ...options }); }; exports.createStringSameness = createStringSameness; +const strategies = { + diceStrategy: index_js_1.diceStrategy, + levenStrategy: index_js_1.levenStrategy, + cosineStrategy: index_js_1.cosineStrategy +}; +exports.strategies = strategies; diff --git a/dist/matchingStrategies/cosineSimilarity.d.ts b/dist/commonjs/matchingStrategies/cosineSimilarity.d.ts similarity index 73% rename from dist/matchingStrategies/cosineSimilarity.d.ts rename to dist/commonjs/matchingStrategies/cosineSimilarity.d.ts index 80ee4b3..faeb8d6 100644 --- a/dist/matchingStrategies/cosineSimilarity.d.ts +++ b/dist/commonjs/matchingStrategies/cosineSimilarity.d.ts @@ -1,3 +1,3 @@ -import { ComparisonStrategy } from "../atomic"; +import { ComparisonStrategy } from "../atomic.js"; export declare const calculateCosineSimilarity: (strA: string, strB: string) => number; export declare const cosineStrategy: ComparisonStrategy; diff --git a/dist/matchingStrategies/cosineSimilarity.js b/dist/commonjs/matchingStrategies/cosineSimilarity.js similarity index 100% rename from dist/matchingStrategies/cosineSimilarity.js rename to dist/commonjs/matchingStrategies/cosineSimilarity.js diff --git a/dist/matchingStrategies/diceSimilarity.d.ts b/dist/commonjs/matchingStrategies/diceSimilarity.d.ts similarity index 73% rename from dist/matchingStrategies/diceSimilarity.d.ts rename to dist/commonjs/matchingStrategies/diceSimilarity.d.ts index e2df4e9..6cb2a48 100644 --- a/dist/matchingStrategies/diceSimilarity.d.ts +++ b/dist/commonjs/matchingStrategies/diceSimilarity.d.ts @@ -1,3 +1,3 @@ -import { ComparisonStrategy } from "../atomic"; +import { ComparisonStrategy } from "../atomic.js"; export declare const calculateDiceSimilarity: (valA: string, valB: string) => number; export declare const diceStrategy: ComparisonStrategy; diff --git a/dist/matchingStrategies/diceSimilarity.js b/dist/commonjs/matchingStrategies/diceSimilarity.js similarity index 100% rename from dist/matchingStrategies/diceSimilarity.js rename to dist/commonjs/matchingStrategies/diceSimilarity.js diff --git a/dist/commonjs/matchingStrategies/index.d.ts b/dist/commonjs/matchingStrategies/index.d.ts new file mode 100644 index 0000000..a3d62ec --- /dev/null +++ b/dist/commonjs/matchingStrategies/index.d.ts @@ -0,0 +1,5 @@ +import { levenStrategy } from "./levenSimilarity.js"; +import { cosineStrategy } from "./cosineSimilarity.js"; +import { diceStrategy } from "./diceSimilarity.js"; +import { ComparisonStrategy, ComparisonStrategyResultValue, ComparisonStrategyResultObject, StrategyFunc } from '../atomic.js'; +export { levenStrategy, cosineStrategy, diceStrategy, ComparisonStrategy, ComparisonStrategyResultObject, ComparisonStrategyResultValue, StrategyFunc }; diff --git a/dist/commonjs/matchingStrategies/index.js b/dist/commonjs/matchingStrategies/index.js new file mode 100644 index 0000000..7fdf920 --- /dev/null +++ b/dist/commonjs/matchingStrategies/index.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.diceStrategy = exports.cosineStrategy = exports.levenStrategy = void 0; +const levenSimilarity_js_1 = require("./levenSimilarity.js"); +Object.defineProperty(exports, "levenStrategy", { enumerable: true, get: function () { return levenSimilarity_js_1.levenStrategy; } }); +const cosineSimilarity_js_1 = require("./cosineSimilarity.js"); +Object.defineProperty(exports, "cosineStrategy", { enumerable: true, get: function () { return cosineSimilarity_js_1.cosineStrategy; } }); +const diceSimilarity_js_1 = require("./diceSimilarity.js"); +Object.defineProperty(exports, "diceStrategy", { enumerable: true, get: function () { return diceSimilarity_js_1.diceStrategy; } }); diff --git a/dist/matchingStrategies/levenSimilarity.d.ts b/dist/commonjs/matchingStrategies/levenSimilarity.d.ts similarity index 73% rename from dist/matchingStrategies/levenSimilarity.d.ts rename to dist/commonjs/matchingStrategies/levenSimilarity.d.ts index a2fffe4..113d82d 100644 --- a/dist/matchingStrategies/levenSimilarity.d.ts +++ b/dist/commonjs/matchingStrategies/levenSimilarity.d.ts @@ -1,3 +1,3 @@ -import { ComparisonStrategy } from "../atomic"; +import { ComparisonStrategy } from "../atomic.js"; export declare const calculateLevenSimilarity: (valA: string, valB: string) => number[]; export declare const levenStrategy: ComparisonStrategy; diff --git a/dist/matchingStrategies/levenSimilarity.js b/dist/commonjs/matchingStrategies/levenSimilarity.js similarity index 100% rename from dist/matchingStrategies/levenSimilarity.js rename to dist/commonjs/matchingStrategies/levenSimilarity.js diff --git a/dist/commonjs/package.json b/dist/commonjs/package.json new file mode 100644 index 0000000..5bbefff --- /dev/null +++ b/dist/commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/dist/esm/atomic.d.ts b/dist/esm/atomic.d.ts new file mode 100644 index 0000000..6807242 --- /dev/null +++ b/dist/esm/atomic.d.ts @@ -0,0 +1,43 @@ +export interface StringComparisonOptions { + transforms?: ((str: string) => string)[]; + strategies?: ComparisonStrategy[]; +} +export interface StringSamenessResult { + strategies: { + [key: string]: ComparisonStrategyResult; + }; + highScore: number; + highScoreWeighted: number; +} +export interface ComparisonStrategyResultObject { + /** + * The normalized (0 to 100) score of this comparison + * */ + score: number; + /** + * The raw value returned by the comparison (not normalized) + * */ + rawScore?: number; + [key: string]: any; +} +export interface ComparisonStrategyResult extends ComparisonStrategyResultObject { +} +export interface NamedComparisonStrategyObjectResult extends ComparisonStrategyResultObject { + name: string; +} +export type ComparisonStrategyResultValue = number | ComparisonStrategyResultObject; +export type StrategyFunc = (strA: string, strB: string) => ComparisonStrategyResultValue; +export interface ComparisonStrategy { + /** + * The name of this strategy + * */ + name: string; + /** + * A function that accepts two string arguments and returns a number + * */ + strategy: StrategyFunc; + /** + * An optional function that accepts two string arguments and returns whether this strategy should be used + * */ + isValid?: (strA: string, strB: string) => boolean; +} diff --git a/dist/esm/atomic.js b/dist/esm/atomic.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/esm/atomic.js @@ -0,0 +1 @@ +export {}; diff --git a/dist/esm/index.d.ts b/dist/esm/index.d.ts new file mode 100644 index 0000000..8c1309f --- /dev/null +++ b/dist/esm/index.d.ts @@ -0,0 +1,11 @@ +import { StringComparisonOptions, StringSamenessResult } from "./atomic.js"; +declare const defaultStrCompareTransformFuncs: ((str: string) => string)[]; +declare const defaultStrategies: import("./atomic.js").ComparisonStrategy[]; +declare const stringSameness: (valA: string, valB: string, options?: StringComparisonOptions) => StringSamenessResult; +declare const createStringSameness: (defaults: StringComparisonOptions) => (valA: string, valB: string, options?: StringComparisonOptions) => StringSamenessResult; +declare const strategies: { + diceStrategy: import("./atomic.js").ComparisonStrategy; + levenStrategy: import("./atomic.js").ComparisonStrategy; + cosineStrategy: import("./atomic.js").ComparisonStrategy; +}; +export { StringSamenessResult, StringComparisonOptions, stringSameness, createStringSameness, defaultStrategies, strategies, defaultStrCompareTransformFuncs }; diff --git a/dist/esm/index.js b/dist/esm/index.js new file mode 100644 index 0000000..9cb183b --- /dev/null +++ b/dist/esm/index.js @@ -0,0 +1,67 @@ +import { cosineStrategy, levenStrategy, diceStrategy } from "./matchingStrategies/index.js"; +const sentenceLengthWeight = (length) => { + // thanks jordan :') + // constants are black magic + return (Math.log(length) / 0.20) - 5; +}; +const defaultStrCompareTransformFuncs = [ + // lower case to remove case sensitivity + (str) => str.toLocaleLowerCase(), + // remove excess whitespace + (str) => str.trim(), + // remove non-alphanumeric characters so that differences in punctuation don't subtract from comparison score + (str) => str.replace(/[^A-Za-z0-9 ]/g, ""), + // replace all instances of 2 or more whitespace with one whitespace + (str) => str.replace(/\s{2,}|\n/g, " ") +]; +const defaultStrategies = [ + diceStrategy, + levenStrategy, + cosineStrategy +]; +const stringSameness = (valA, valB, options) => { + const { transforms = defaultStrCompareTransformFuncs, strategies = defaultStrategies, } = options || {}; + const cleanA = transforms.reduce((acc, curr) => curr(acc), valA); + const cleanB = transforms.reduce((acc, curr) => curr(acc), valB); + const shortest = cleanA.length > cleanB.length ? cleanB : cleanA; + const stratResults = []; + for (const strat of strategies) { + if (strat.isValid !== undefined && !strat.isValid(cleanA, cleanB)) { + continue; + } + const res = strat.strategy(cleanA, cleanB); + const resObj = typeof res === 'number' ? { score: res } : res; + stratResults.push({ + ...resObj, + name: strat.name + }); + } + // use shortest sentence for weight + const weightScore = sentenceLengthWeight(shortest.length); + // take average score + const highScore = stratResults.reduce((acc, curr) => acc + curr.score, 0) / stratResults.length; + // weight score can be a max of 15 + const highScoreWeighted = highScore + Math.min(weightScore, 15); + const stratObj = stratResults.reduce((acc, curr) => { + const { name, score, ...rest } = curr; + acc[curr.name] = { + ...rest, + score, + }; + return acc; + }, {}); + return { + strategies: stratObj, + highScore, + highScoreWeighted, + }; +}; +const createStringSameness = (defaults) => { + return (valA, valB, options = {}) => stringSameness(valA, valB, { ...defaults, ...options }); +}; +const strategies = { + diceStrategy, + levenStrategy, + cosineStrategy +}; +export { stringSameness, createStringSameness, defaultStrategies, strategies, defaultStrCompareTransformFuncs }; diff --git a/dist/esm/matchingStrategies/cosineSimilarity.d.ts b/dist/esm/matchingStrategies/cosineSimilarity.d.ts new file mode 100644 index 0000000..faeb8d6 --- /dev/null +++ b/dist/esm/matchingStrategies/cosineSimilarity.d.ts @@ -0,0 +1,3 @@ +import { ComparisonStrategy } from "../atomic.js"; +export declare const calculateCosineSimilarity: (strA: string, strB: string) => number; +export declare const cosineStrategy: ComparisonStrategy; diff --git a/dist/matchingStrategies/CosineSimilarity.js b/dist/esm/matchingStrategies/cosineSimilarity.js similarity index 83% rename from dist/matchingStrategies/CosineSimilarity.js rename to dist/esm/matchingStrategies/cosineSimilarity.js index 69d704d..318a709 100644 --- a/dist/matchingStrategies/CosineSimilarity.js +++ b/dist/esm/matchingStrategies/cosineSimilarity.js @@ -1,7 +1,5 @@ -"use strict"; // reproduced from https://github.com/sumn2u/string-comparison/blob/master/jscosine.js // https://sumn2u.medium.com/string-similarity-comparision-in-js-with-examples-4bae35f13968 -Object.defineProperty(exports, "__esModule", { value: true }); function termFreqMap(str) { var words = str.split(' '); var termFreq = {}; @@ -39,7 +37,7 @@ function vecMagnitude(vec) { function cosineSimilarity(vecA, vecB) { return vecDotProduct(vecA, vecB) / (vecMagnitude(vecA) * vecMagnitude(vecB)); } -const calculateCosineSimilarity = function textCosineSimilarity(strA, strB) { +export const calculateCosineSimilarity = (strA, strB) => { var termFreqA = termFreqMap(strA); var termFreqB = termFreqMap(strB); var dict = {}; @@ -49,4 +47,13 @@ const calculateCosineSimilarity = function textCosineSimilarity(strA, strB) { var termFreqVecB = termFreqMapToVector(termFreqB, dict); return cosineSimilarity(termFreqVecA, termFreqVecB); }; -exports.default = calculateCosineSimilarity; +export const cosineStrategy = { + name: 'cosine', + strategy: (valA, valB) => { + const res = calculateCosineSimilarity(valA, valB); + return { + score: res * 100, + rawScore: res + }; + } +}; diff --git a/dist/esm/matchingStrategies/diceSimilarity.d.ts b/dist/esm/matchingStrategies/diceSimilarity.d.ts new file mode 100644 index 0000000..6cb2a48 --- /dev/null +++ b/dist/esm/matchingStrategies/diceSimilarity.d.ts @@ -0,0 +1,3 @@ +import { ComparisonStrategy } from "../atomic.js"; +export declare const calculateDiceSimilarity: (valA: string, valB: string) => number; +export declare const diceStrategy: ComparisonStrategy; diff --git a/dist/esm/matchingStrategies/diceSimilarity.js b/dist/esm/matchingStrategies/diceSimilarity.js new file mode 100644 index 0000000..595377a --- /dev/null +++ b/dist/esm/matchingStrategies/diceSimilarity.js @@ -0,0 +1,12 @@ +import stringSimilarity from 'string-similarity'; +export const calculateDiceSimilarity = (valA, valB) => stringSimilarity.compareTwoStrings(valA, valB); +export const diceStrategy = { + name: 'dice', + strategy: (valA, valB) => { + const res = calculateDiceSimilarity(valA, valB); + return { + score: res * 100, + rawScore: res + }; + } +}; diff --git a/dist/esm/matchingStrategies/index.d.ts b/dist/esm/matchingStrategies/index.d.ts new file mode 100644 index 0000000..a3d62ec --- /dev/null +++ b/dist/esm/matchingStrategies/index.d.ts @@ -0,0 +1,5 @@ +import { levenStrategy } from "./levenSimilarity.js"; +import { cosineStrategy } from "./cosineSimilarity.js"; +import { diceStrategy } from "./diceSimilarity.js"; +import { ComparisonStrategy, ComparisonStrategyResultValue, ComparisonStrategyResultObject, StrategyFunc } from '../atomic.js'; +export { levenStrategy, cosineStrategy, diceStrategy, ComparisonStrategy, ComparisonStrategyResultObject, ComparisonStrategyResultValue, StrategyFunc }; diff --git a/dist/esm/matchingStrategies/index.js b/dist/esm/matchingStrategies/index.js new file mode 100644 index 0000000..f55d695 --- /dev/null +++ b/dist/esm/matchingStrategies/index.js @@ -0,0 +1,4 @@ +import { levenStrategy } from "./levenSimilarity.js"; +import { cosineStrategy } from "./cosineSimilarity.js"; +import { diceStrategy } from "./diceSimilarity.js"; +export { levenStrategy, cosineStrategy, diceStrategy }; diff --git a/dist/esm/matchingStrategies/levenSimilarity.d.ts b/dist/esm/matchingStrategies/levenSimilarity.d.ts new file mode 100644 index 0000000..113d82d --- /dev/null +++ b/dist/esm/matchingStrategies/levenSimilarity.d.ts @@ -0,0 +1,3 @@ +import { ComparisonStrategy } from "../atomic.js"; +export declare const calculateLevenSimilarity: (valA: string, valB: string) => number[]; +export declare const levenStrategy: ComparisonStrategy; diff --git a/dist/esm/matchingStrategies/levenSimilarity.js b/dist/esm/matchingStrategies/levenSimilarity.js new file mode 100644 index 0000000..0e4f765 --- /dev/null +++ b/dist/esm/matchingStrategies/levenSimilarity.js @@ -0,0 +1,28 @@ +import leven from "leven"; +export const calculateLevenSimilarity = (valA, valB) => { + let longer; + let shorter; + if (valA.length > valB.length) { + longer = valA; + shorter = valB; + } + else { + longer = valB; + shorter = valA; + } + const distance = leven(longer, shorter); + const diff = (distance / longer.length) * 100; + return [distance, 100 - diff]; +}; +const stratFunc = (valA, valB) => { + const res = calculateLevenSimilarity(valA, valB); + return { + rawScore: res[0], + distance: res[0], + score: res[1] + }; +}; +export const levenStrategy = { + name: 'leven', + strategy: stratFunc +}; diff --git a/dist/esm/package.json b/dist/esm/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/dist/matchingStrategies/CosineSimilarity.d.ts b/dist/matchingStrategies/CosineSimilarity.d.ts deleted file mode 100644 index 2867ae2..0000000 --- a/dist/matchingStrategies/CosineSimilarity.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const calculateCosineSimilarity: (strA: string, strB: string) => number; -export default calculateCosineSimilarity; diff --git a/dist/matchingStrategies/index.d.ts b/dist/matchingStrategies/index.d.ts deleted file mode 100644 index 077f43d..0000000 --- a/dist/matchingStrategies/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { levenStrategy } from "./levenSimilarity"; -import { cosineStrategy } from "./cosineSimilarity"; -import { diceStrategy } from "./diceSimilarity"; -import { ComparisonStrategy, ComparisonStrategyResultValue, ComparisonStrategyResultObject, StrategyFunc } from '../atomic'; -export { levenStrategy, cosineStrategy, diceStrategy, ComparisonStrategy, ComparisonStrategyResultObject, ComparisonStrategyResultValue, StrategyFunc }; diff --git a/dist/matchingStrategies/index.js b/dist/matchingStrategies/index.js deleted file mode 100644 index 94cc202..0000000 --- a/dist/matchingStrategies/index.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.diceStrategy = exports.cosineStrategy = exports.levenStrategy = void 0; -const levenSimilarity_1 = require("./levenSimilarity"); -Object.defineProperty(exports, "levenStrategy", { enumerable: true, get: function () { return levenSimilarity_1.levenStrategy; } }); -const cosineSimilarity_1 = require("./cosineSimilarity"); -Object.defineProperty(exports, "cosineStrategy", { enumerable: true, get: function () { return cosineSimilarity_1.cosineStrategy; } }); -const diceSimilarity_1 = require("./diceSimilarity"); -Object.defineProperty(exports, "diceStrategy", { enumerable: true, get: function () { return diceSimilarity_1.diceStrategy; } }); diff --git a/package.json b/package.json index 7c30b7a..aca01be 100644 --- a/package.json +++ b/package.json @@ -10,30 +10,45 @@ "node": ">=18.0.0", "npm": ">=9.3.0" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", "files": [ - "/dist" + "dist" ], "scripts": { "typedoc": "typedoc", - "build": "tsc" + "build": "tsc", + "prepare": "tshy" }, "exports": { - ".": "./dist/index.js", - "./strategies": "./dist/matchingStrategies/index.js", - "./strategies/cosine": "./dist/matchingStrategies/cosineSimilarity.js", - "./strategies/leven": "./dist/matchingStrategies/levenSimilarity.js", - "./strategies/deice": "./dist/matchingStrategies/diceSimilarity.js" + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } }, "devDependencies": { "@tsconfig/node16": "^1.0.3", "@types/string-similarity": "^4.0.0", + "tshy": "^1.7.0", "typedoc": "^0.23.28", "typescript": "^4.9.5" }, "dependencies": { "leven": "^3.0.0", "string-similarity": "^4.0.4" - } + }, + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.js" + } + }, + "type": "module" } diff --git a/src/index.ts b/src/index.ts index 8e4e5bc..7c0918a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,10 @@ -import {cosineStrategy, levenStrategy, diceStrategy} from "./matchingStrategies"; +import {cosineStrategy, levenStrategy, diceStrategy} from "./matchingStrategies/index.js"; import { ComparisonStrategyResult, NamedComparisonStrategyObjectResult, StringComparisonOptions, StringSamenessResult -} from "./atomic"; +} from "./atomic.js"; const sentenceLengthWeight = (length: number) => { // thanks jordan :') @@ -81,11 +81,18 @@ const createStringSameness = (defaults: StringComparisonOptions) => { return (valA: string, valB: string, options: StringComparisonOptions = {}) => stringSameness(valA, valB, {...defaults, ...options}); } +const strategies = { + diceStrategy, + levenStrategy, + cosineStrategy +}; + export { StringSamenessResult, StringComparisonOptions, stringSameness, createStringSameness, defaultStrategies, + strategies, defaultStrCompareTransformFuncs } diff --git a/src/matchingStrategies/cosineSimilarity.d.ts b/src/matchingStrategies/cosineSimilarity.d.ts index 5a320fe..faeb8d6 100644 --- a/src/matchingStrategies/cosineSimilarity.d.ts +++ b/src/matchingStrategies/cosineSimilarity.d.ts @@ -1,3 +1,3 @@ -declare const calculateCosineSimilarity: (strA: string, strB: string) => number; -export default calculateCosineSimilarity; -//# sourceMappingURL=CosineSimilarity.d.ts.map \ No newline at end of file +import { ComparisonStrategy } from "../atomic.js"; +export declare const calculateCosineSimilarity: (strA: string, strB: string) => number; +export declare const cosineStrategy: ComparisonStrategy; diff --git a/src/matchingStrategies/cosineSimilarity.ts b/src/matchingStrategies/cosineSimilarity.ts index fcb3dde..da6f80b 100644 --- a/src/matchingStrategies/cosineSimilarity.ts +++ b/src/matchingStrategies/cosineSimilarity.ts @@ -1,7 +1,7 @@ // reproduced from https://github.com/sumn2u/string-comparison/blob/master/jscosine.js // https://sumn2u.medium.com/string-similarity-comparision-in-js-with-examples-4bae35f13968 -import {ComparisonStrategy} from "../atomic"; +import {ComparisonStrategy} from "../atomic.js"; interface StrMap { [key: string]: number diff --git a/src/matchingStrategies/diceSimilarity.ts b/src/matchingStrategies/diceSimilarity.ts index c9ef391..ada405f 100644 --- a/src/matchingStrategies/diceSimilarity.ts +++ b/src/matchingStrategies/diceSimilarity.ts @@ -1,5 +1,5 @@ import stringSimilarity from 'string-similarity'; -import {ComparisonStrategy} from "../atomic"; +import {ComparisonStrategy} from "../atomic.js"; export const calculateDiceSimilarity = (valA: string, valB: string) => stringSimilarity.compareTwoStrings(valA, valB); export const diceStrategy: ComparisonStrategy = { diff --git a/src/matchingStrategies/index.ts b/src/matchingStrategies/index.ts index 3156f55..99d868e 100644 --- a/src/matchingStrategies/index.ts +++ b/src/matchingStrategies/index.ts @@ -1,7 +1,7 @@ -import {levenStrategy} from "./levenSimilarity"; -import {cosineStrategy} from "./cosineSimilarity"; -import {diceStrategy} from "./diceSimilarity"; -import {ComparisonStrategy, ComparisonStrategyResultValue, ComparisonStrategyResultObject, StrategyFunc} from '../atomic'; +import {levenStrategy} from "./levenSimilarity.js"; +import {cosineStrategy} from "./cosineSimilarity.js"; +import {diceStrategy} from "./diceSimilarity.js"; +import {ComparisonStrategy, ComparisonStrategyResultValue, ComparisonStrategyResultObject, StrategyFunc} from '../atomic.js'; export { levenStrategy, diff --git a/src/matchingStrategies/levenSimilarity.d.ts b/src/matchingStrategies/levenSimilarity.d.ts index 934e081..113d82d 100644 --- a/src/matchingStrategies/levenSimilarity.d.ts +++ b/src/matchingStrategies/levenSimilarity.d.ts @@ -1,3 +1,3 @@ -declare const levenSimilarity: (valA: string, valB: string) => number[]; -export default levenSimilarity; -//# sourceMappingURL=levenSimilarity.d.ts.map \ No newline at end of file +import { ComparisonStrategy } from "../atomic.js"; +export declare const calculateLevenSimilarity: (valA: string, valB: string) => number[]; +export declare const levenStrategy: ComparisonStrategy; diff --git a/src/matchingStrategies/levenSimilarity.ts b/src/matchingStrategies/levenSimilarity.ts index fe17954..fe428bb 100644 --- a/src/matchingStrategies/levenSimilarity.ts +++ b/src/matchingStrategies/levenSimilarity.ts @@ -1,5 +1,5 @@ import leven from "leven"; -import {ComparisonStrategy} from "../atomic"; +import {ComparisonStrategy} from "../atomic.js"; export const calculateLevenSimilarity = (valA: string, valB: string) => { let longer: string; diff --git a/tsconfig.json b/tsconfig.json index 8c467af..380d024 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,13 @@ { - "extends": "@tsconfig/node16/tsconfig.json", "compilerOptions": { - "module": "commonjs", + "module": "nodenext", + "moduleResolution": "nodenext", + "target": "es2022", "declaration": true, - "outDir": "./dist" + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true }, "typeRoots": [ "./src/types.d.ts" diff --git a/yarn.lock b/yarn.lock index 913efe6..1720d47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,23 @@ # yarn lockfile v1 +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@tsconfig/node16@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" @@ -12,16 +29,51 @@ resolved "https://registry.yarnpkg.com/@types/string-similarity/-/string-similarity-4.0.0.tgz#8cc03d5d1baad2b74530fe6c7d849d5768d391ad" integrity sha512-dMS4S07fbtY1AILG/RhuwmptmzK1Ql8scmAebOTJ/8iBtK/KI17NwGwKzu1uipjj8Kk+3mfPxum56kKZE93mzQ== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-sequence-parser@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz#4d790f31236ac20366b23b3916b789e1bde39aed" integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ== +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + brace-expansion@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" @@ -29,6 +81,150 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +foreground-child@^3.1.0, foreground-child@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^10.2.6, glob@^10.3.3, glob@^10.3.7: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jsonc-parser@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" @@ -39,6 +235,11 @@ leven@^3.0.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +"lru-cache@^9.1.1 || ^10.0.0": + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + lunr@^2.3.9: version "2.3.9" resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" @@ -56,6 +257,80 @@ minimatch@^7.1.3: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^1.10.1, path-scurry@^1.9.2: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve-import@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/resolve-import/-/resolve-import-1.4.4.tgz#f7c91c02792cd6abe8ef0801112df935a1f665a6" + integrity sha512-+IccDyUypl5rHv25216cXu2m30flEoetrG8p4qDH3RsP53cytedI58Pz+pjCU4PAbxPOQgFkgmxTJLKI9tgf/g== + dependencies: + glob "^10.3.3" + walk-up-path "^3.0.1" + +rimraf@^5.0.1: + version "5.0.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" + integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + dependencies: + glob "^10.3.7" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shiki@^0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.1.tgz#9fbe082d0a8aa2ad63df4fbf2ee11ec924aa7ee1" @@ -66,11 +341,80 @@ shiki@^0.14.1: vscode-oniguruma "^1.7.0" vscode-textmate "^8.0.0" +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + string-similarity@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b" integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +sync-content@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/sync-content/-/sync-content-1.0.2.tgz#c76bca03e7d4c5a1ec3e5024f85144a7b592640d" + integrity sha512-znd3rYiiSxU3WteWyS9a6FXkTA/Wjk8WQsOyzHbineeL837dLn3DA4MRhsIX3qGcxDMH6+uuFV4axztssk7wEQ== + dependencies: + glob "^10.2.6" + mkdirp "^3.0.1" + path-scurry "^1.9.2" + rimraf "^5.0.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tshy@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/tshy/-/tshy-1.7.0.tgz#c463b2ea87ff65b28d33312e65722ae74ec58306" + integrity sha512-ioFoMasVNtcOGkJACDpmo+C6xZfRqamimeK0hL2uyS0l7DliiCwAKJj8/x0LVlvdGvCoqkhOHfKpEPjHeI9U8Q== + dependencies: + chalk "^5.3.0" + chokidar "^3.5.3" + foreground-child "^3.1.1" + mkdirp "^3.0.1" + resolve-import "^1.4.4" + rimraf "^5.0.1" + sync-content "^1.0.2" + typescript "5.2" + walk-up-path "^3.0.1" + typedoc@^0.23.28: version "0.23.28" resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.28.tgz#3ce9c36ef1c273fa849d2dea18651855100d3ccd" @@ -81,6 +425,11 @@ typedoc@^0.23.28: minimatch "^7.1.3" shiki "^0.14.1" +typescript@5.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" @@ -95,3 +444,33 @@ vscode-textmate@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + +walk-up-path@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" -- 2.51.2