diff --git a/.vscode/launch.json b/.vscode/launch.json index a8661dee3..c4e5ed62d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -2,19 +2,21 @@ "version": "0.2.0", "configurations": [ { - "type": "node", - "request": "launch", - "name": "Test File(current)", - "program": "${workspaceRoot}/node_modules/jest/bin/jest.js", - "args": [ - "--verbose", - "-i", - "-u", - "--no-cache", - "${fileBasenameNoExtension}" - ], - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen" - } + "type": "node", + "request": "launch", + "name": "Debug Test(spec or source)", + "autoAttachChildProcesses": true, + "skipFiles": [ + "/**", + "**/node_modules/**" + ], + "program": "${workspaceRoot}/node_modules/vitest/vitest.mjs", + "args": [ + "run", + "${fileDirnameBasename}/${fileBasenameNoExtension}" + ], + "smartStep": true, + "console": "integratedTerminal" + } ] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fca893c9..0ea37e635 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +11.2.0 + +- Fix wrong typing for `R.equal`,`R.path`, `R.prop`, `R.propEq`, `R.prepend` - [Issue #803](https://github.com/selfrefactor/rambda/issues/803) + +- Add `R.splitEveryStrict` + +- Add `R.mergeDeep` + +- Change `R.range` when start and end are the same to return array with one element instead of empty array. + +- Fix wrong usage of non-curried methods in example snippets. + +- Migrate to `vitest` for TS testing + 11.1.0 - Add `R.filterMap` - similar to Ruby `filter_map` diff --git a/README.md b/README.md index d2af17fd0..a7be455a7 100644 --- a/README.md +++ b/README.md @@ -233,12 +233,13 @@ test('happy', () => { ```typescript import { addProp, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.addProp', () => { const result = pipe({ a: 1, b: 'foo' }, addProp('c', 3)) - result.a // $ExpectType number - result.b // $ExpectType string - result.c // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) ``` @@ -354,6 +355,7 @@ test('R.addPropToObjects', () => { ```typescript import { addPropToObjects, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.addPropToObjects', () => { let result = pipe( @@ -366,7 +368,7 @@ it('R.addPropToObjects', () => { (x) => String(x.a + x.b), ) ) - result // $ExpectType { a: number; b: number; c: string; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; b: number; c: string; }[]>() }) ``` @@ -455,17 +457,18 @@ test('when false', () => { ```typescript import * as R from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('all', () => { it('happy', () => { const result = R.pipe( [1, 2, 3], R.all(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 0 }), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -557,6 +560,7 @@ test('when returns false', () => { ```typescript import * as R from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('allPass', () => { it('happy', () => { @@ -568,7 +572,7 @@ describe('allPass', () => { (x) => x.length > 2, (x) => x.includes(3) ]))) - result // $ExpectType boolean[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -649,16 +653,17 @@ test('happy', () => { ```typescript import { any, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.any', () => { const result = pipe( [1, 2, 3], any(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 2 }), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -788,13 +793,14 @@ test('with empty predicates list', () => { ```typescript import { anyPass, filter } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('anyPass', () => { it('issue #604', () => { const plusEq = (w: number, x: number, y: number, z: number) => w + x === y + z const result = anyPass([plusEq])(3, 3, 3, 3) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('issue #642', () => { const isGreater = (num: number) => num > 5 @@ -802,9 +808,9 @@ describe('anyPass', () => { const xs = [0, 1, 2, 3] const filtered1 = filter(pred)(xs) - filtered1 // $ExpectType number[] + expectTypeOf(filtered1).toEqualTypeOf() const filtered2 = xs.filter(pred) - filtered2 // $ExpectType number[] + expectTypeOf(filtered2).toEqualTypeOf() }) it('functions as a type guard', () => { const isString = (x: unknown): x is string => typeof x === 'string' @@ -816,7 +822,7 @@ describe('anyPass', () => { const aValue: unknown = 1 if (isStringNumberOrBoolean(aValue)) { - aValue // $ExpectType string | number | boolean + expectTypeOf(aValue).toEqualTypeOf() } }) }) @@ -896,17 +902,18 @@ test('append to empty array', () => { ```typescript import { append, pipe, prepend } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const listOfNumbers = [1, 2, 3] describe('R.append/R.prepend', () => { it('happy', () => { const result = pipe(listOfNumbers, append(4), prepend(0)) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with object', () => { const result = pipe([{ a: 1 }], append({ a: 10 }), prepend({ a: 20 })) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) }) ``` @@ -1003,13 +1010,14 @@ test('descend', () => { ```typescript import { pipe, ascend, sort } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.ascend', () => { const result = pipe( [{a:1}, {a:2}], sort(ascend(x => x.a)) ) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) ``` @@ -1087,6 +1095,7 @@ test('throw', () => { ```typescript import { pipe, assertType } from 'rambda' +import { expectTypeOf, it } from 'vitest' type Book = { title: string @@ -1106,7 +1115,7 @@ it('R.assertType', () => { { title: 'Book1', year: 2020, bookmarkFlag: true }, assertType(isBookToRead), ) - result // $ExpectType BookToRead + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -1226,6 +1235,7 @@ test('when false | early exit', () => { ```typescript import { checkObjectWithSpec, equals } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.checkObjectWithSpec', () => { it('happy', () => { @@ -1240,7 +1250,7 @@ describe('R.checkObjectWithSpec', () => { b: equals('bar'), } const result = checkObjectWithSpec(conditions)(input) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -1348,6 +1358,7 @@ test('happy', () => { ```typescript import { compact, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.compact', () => { let result = pipe( @@ -1363,9 +1374,9 @@ it('R.compact', () => { }) ) - result.a // $ExpectType string[] - result.b // $ExpectType number[] - result.c // $ExpectType { a: number; b: number; c: number; f: boolean; } + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf<{ a: number; b: number; c: number; f: boolean; }>() }) ``` @@ -1447,12 +1458,13 @@ test('with multiple parameters', () => { ```typescript import { complement } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.complement', () => { it('happy', () => { const fn = complement((x: number) => x > 10) const result = fn(1) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -1506,15 +1518,16 @@ export function concat(x) { ```typescript import { concat, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list1 = [1, 2, 3] const list2 = [4, 5, 6] it('R.concat', () => { const result = pipe(list1, concat(list2)) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() const resultString = pipe('foo', concat('list2')) - resultString // $ExpectType string + expectTypeOf(resultString).toEqualTypeOf() }) ``` @@ -1560,6 +1573,7 @@ export function convertToType(x) { ```typescript import { convertToType, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -1567,11 +1581,11 @@ it('R.convertToType', () => { const result = pipe(list, convertToType, x => { - x // $ExpectType string[] + expectTypeOf(x).toEqualTypeOf() return x } ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -1654,13 +1668,14 @@ test('happy', () => { ```typescript import { count, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] const predicate = (x: number) => x > 1 it('R.count', () => { const result = pipe(list, count(predicate)) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -1749,6 +1764,7 @@ test('happy', () => { ```typescript import { countBy, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = ['a', 'A', 'b', 'B', 'c', 'C'] @@ -1757,9 +1773,9 @@ it('R.countBy', () => { list, countBy(x => x.toLowerCase()), ) - result.a // $ExpectType number - result.foo // $ExpectType number - result // $ExpectType { [index: string]: number; } + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.foo).toEqualTypeOf() + expectTypeOf(result).toEqualTypeOf<{ [index: string]: number; }>() }) ``` @@ -1927,12 +1943,13 @@ test('when inputArgument passes initial check', () => { ```typescript import { defaultTo, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.defaultTo', () => { it('happy', () => { const result = pipe('bar' as unknown, defaultTo('foo')) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -2113,6 +2130,7 @@ test('difference with objects', () => { ```typescript import { difference } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.difference', () => { it('happy', () => { @@ -2120,7 +2138,7 @@ describe('R.difference', () => { const list2 = [{ id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }] const result = difference(list1)(list2) - result // $ExpectType { id: number; }[] + expectTypeOf(result).toEqualTypeOf<{ id: number; }[]>() }) }) ``` @@ -2194,10 +2212,11 @@ test('with non-positive count', () => { ```typescript import { drop, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.drop', () => { const result = pipe([1, 2, 3, 4], drop(2)) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -2490,6 +2509,7 @@ test('always false', () => { ```typescript import { dropWhile, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -2500,18 +2520,18 @@ describe('R.dropWhile', () => { dropWhile(x => x > 1), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with index', () => { const result = pipe( list, dropWhile((x, i) => { - i // $ExpectType number + expectTypeOf(i).toEqualTypeOf() return x + i > 2 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -2529,12 +2549,12 @@ duplicateBy(fn: (x: T) => U): (list: T[]) => T[] ```javascript const list = [{a:1}, {a:2}, {a:1}] -const result = R.duplicateBy(x => x, list) +const result = R.duplicateBy(x => x)(list) // => [{a:1}] ``` -Try this R.duplicateBy example in Rambda REPL +Try this R.duplicateBy example in Rambda REPL
@@ -2737,6 +2757,7 @@ test('prop does not exist', () => { ```typescript import { eqProps, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const obj1 = { a: { b: 1 }, c: 2 } const obj2 = { a: { b: 1 }, c: 3 } @@ -2744,7 +2765,7 @@ const obj2 = { a: { b: 1 }, c: 3 } it('R.eqProps', () => { const result = pipe(obj1, eqProps('a', obj2)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -2756,7 +2777,7 @@ it('R.eqProps', () => { ```typescript -equals(x: T, y: T): boolean +equals(x: T): (y: T) => boolean ``` It deeply compares `x` and `y` and returns `true` if they are equal. @@ -2777,7 +2798,6 @@ R.equals( All TypeScript definitions ```typescript -equals(x: T, y: T): boolean; equals(x: T): (y: T) => boolean; ``` @@ -3212,22 +3232,23 @@ test('various examples', () => { ```typescript import { equals } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.equals', () => { it('happy', () => { - const result = equals(4, 1) - result // $ExpectType boolean + const result = equals(4)(1) + expectTypeOf(result).toEqualTypeOf() }) it('with object', () => { const foo = { a: 1 } const bar = { a: 2 } - const result = equals(foo, bar) - result // $ExpectType boolean + const result = equals(foo)(bar) + expectTypeOf(result).toEqualTypeOf() }) it('curried', () => { const result = equals(4)(1) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -3324,6 +3345,7 @@ test('happy', () => { ```typescript import { evolve, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.evolve', () => { const input = { @@ -3339,9 +3361,9 @@ it('R.evolve', () => { foo: x => x + 1, }) ) - result.foo // $ExpectType number - result.baz // $ExpectType number - result.nested.a // $ExpectType number + expectTypeOf(result.foo).toEqualTypeOf() + expectTypeOf(result.baz).toEqualTypeOf() + expectTypeOf(result.nested.a).toEqualTypeOf() }) ``` @@ -3425,16 +3447,17 @@ test('excludes with array', () => { ```typescript import { excludes, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.excludes', () => { it('happy', () => { const list = [{ a: { b: '1' } }, { a: { b: '2' } }, { a: { b: '3' } }] const result = pipe({ a: { b: '1' } }, excludes(list)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('with string', () => { const result = pipe('foo', excludes('bar')) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -3517,6 +3540,7 @@ test('nothing is found', () => { ```typescript import { exists, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -3524,7 +3548,7 @@ describe('R.exists', () => { it('happy', () => { const predicate = (x: number) => x > 2 const result = pipe(list, exists(predicate)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -3631,6 +3655,7 @@ test('using Boolean', () => { ```typescript import { filter, includes, pipe, reject, sort, split, uniq } from 'rambda' +import { describe, expectTypeOf, it, test } from 'vitest' const list = [1, 2, 3] @@ -3639,23 +3664,23 @@ describe('R.filter with array', () => { const result = pipe( list, filter(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with index', () => { const result = pipe( list, filter((x: number, i: number) => { - x // $ExpectType number - i // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(i).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('complex example', () => { @@ -3680,7 +3705,7 @@ describe('R.filter with array', () => { reject(includes(SENTENCE_END_CHARS)), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) it('narrowing type', () => { interface Foo { @@ -3695,7 +3720,7 @@ describe('R.filter with array', () => { return typeof (x as Bar).b === 'string' } const result = pipe(testList, filter(filterBar)) - result // $ExpectType Bar[] + expectTypeOf(result).toEqualTypeOf() }) it('narrowing type - readonly', () => { @@ -3711,13 +3736,13 @@ describe('R.filter with array', () => { return typeof (x as Bar).b === 'string' } const result = pipe(testList, filter(filterBar)) - result // $ExpectType Bar[] + expectTypeOf(result).toEqualTypeOf() }) it('filtering NonNullable - list of objects', () => { const testList = [{ a: 1 }, { a: 2 }, false, { a: 3 }] const result = pipe(testList, filter(Boolean)) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) it('filtering NonNullable - readonly', () => { @@ -3808,6 +3833,7 @@ test('happy', async () => { ```typescript import { filterAsync, pipeAsync } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -3816,11 +3842,11 @@ describe('R.filter with array', () => { const result = await pipeAsync( list, filterAsync(async x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -3903,6 +3929,7 @@ it('happy', () => { ```typescript import { filterMap, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -3911,15 +3938,15 @@ it('R.filterMap - within pipe', () => { list, x => x, filterMap(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return Math.random() > 0.5 ? String(x) : null }), filterMap(x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return Math.random() > 0.5 ? Number(x) : '' }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -4019,17 +4046,18 @@ test('happy', () => { ```typescript import { filterObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.filterObject', () => { it('require explicit type', () => { const result = pipe( { a: 1, b: 2 }, filterObject<{ b: number }>(a => { - a // $ExpectType number + expectTypeOf(a).toEqualTypeOf() return a > 1 }), ) - result.b // $ExpectType number + expectTypeOf(result.b).toEqualTypeOf() }) }) ``` @@ -4126,6 +4154,7 @@ test('with empty list', () => { ```typescript import { find, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -4133,7 +4162,7 @@ describe('R.find', () => { it('happy', () => { const predicate = (x: number) => x > 2 const result = pipe(list, find(predicate)) - result // $ExpectType number | undefined + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -4221,6 +4250,7 @@ test('happy', () => { ```typescript import { findIndex, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -4229,7 +4259,7 @@ it('R.findIndex', () => { list, findIndex(x => x > 2), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -4367,6 +4397,7 @@ test('happy', () => { ```typescript import { findLastIndex, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -4374,7 +4405,7 @@ describe('R.findLastIndex', () => { it('happy', () => { const predicate = (x: number) => x > 2 const result = pipe(list, findLastIndex(predicate)) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -4555,6 +4586,7 @@ test('can compose', () => { ```typescript import { flatMap, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.flatMap', () => { it('happy', () => { @@ -4566,11 +4598,11 @@ describe('R.flatMap', () => { listOfLists, x => x, flatMap(x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return Number(x) + 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -4668,11 +4700,12 @@ test('readme example', () => { ```typescript import { flatten, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('flatten', () => { it('happy', () => { const result = pipe([1, 2, [3, [4]]], flatten) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -4890,11 +4923,12 @@ test('flattenObjectHelper', () => { ```typescript import { flattenObject, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.flattenObject', () => { const result = pipe({ a: { b: 1, c: 2 } }, flattenObject) - result['a.b'] // $ExpectType number - result['a.c'] // $ExpectType number + expectTypeOf(result['a.b']).toEqualTypeOf() + expectTypeOf(result['a.c']).toEqualTypeOf() // @ts-expect-error result['a.foo'] }) @@ -4917,11 +4951,11 @@ It splits `list` according to a provided `groupFn` function and returns an objec const list = [ 'a', 'b', 'aa', 'bb' ] const groupFn = x => x.length -const result = R.groupBy(groupFn, list) +const result = R.groupBy(groupFn)(list) // => { '1': ['a', 'b'], '2': ['aa', 'bb'] } ``` -Try this R.groupBy example in Rambda REPL +Try this R.groupBy example in Rambda REPL
@@ -4998,6 +5032,7 @@ test('with list', () => { ```typescript import { groupBy, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.groupBy', () => { it('happy', () => { @@ -5005,7 +5040,7 @@ describe('R.groupBy', () => { const list = ['foo', 'bar'] const result = pipe(list, groupBy(groupByFn)) - result // $ExpectType Partial> + expectTypeOf(result).toEqualTypeOf>>() }) }) ``` @@ -5095,6 +5130,7 @@ test('head', () => { TypeScript test ```typescript +import { describe, expectTypeOf, it } from 'vitest' import { head, last } from 'rambda' export const mixedList = [1, 'foo', 3, 'bar'] @@ -5107,33 +5143,36 @@ export const string = 'foo' describe('R.head', () => { it('string', () => { - head(string) // $ExpectType string - last(string) // $ExpectType string + expectTypeOf(head(string)).toEqualTypeOf() + expectTypeOf(last(string)).toEqualTypeOf() }) + it('empty string', () => { - head(emptyString) // $ExpectType string - last(emptyString) // $ExpectType string + expectTypeOf(head(emptyString)).toEqualTypeOf() + expectTypeOf(last(emptyString)).toEqualTypeOf() }) + it('array', () => { - head(numberList) // $ExpectType number - head(numberListConst) // $ExpectType 1 + expectTypeOf(head(numberList)).toEqualTypeOf() + expectTypeOf(head(numberListConst)).toEqualTypeOf<1>() - last(numberList) // $ExpectType number - last(numberListConst) // $ExpectType 3 + expectTypeOf(last(numberList)).toEqualTypeOf() + expectTypeOf(last(numberListConst)).toEqualTypeOf<3>() }) + it('empty array', () => { const list = [] as const - head(emptyList) // $ExpectType never - head(list) // $ExpectType undefined - last(emptyList) // $ExpectType never - last(list) // $ExpectType undefined + expectTypeOf(head(emptyList)).toEqualTypeOf() + expectTypeOf(head(list)).toEqualTypeOf() + expectTypeOf(last(emptyList)).toEqualTypeOf() + expectTypeOf(last(list)).toEqualTypeOf() }) it('mixed', () => { - head(mixedList) // $ExpectType string | number - head(mixedListConst) // $ExpectType 1 - last(mixedList) // $ExpectType string | number - last(mixedListConst) // $ExpectType "bar" + expectTypeOf(head(mixedList)).toEqualTypeOf() + expectTypeOf(head(mixedListConst)).toEqualTypeOf<1>() + expectTypeOf(last(mixedList)).toEqualTypeOf() + expectTypeOf(last(mixedListConst)).toEqualTypeOf<'bar'>() }) }) ``` @@ -5247,20 +5286,21 @@ test('with wrong input that does not throw', () => { ```typescript import { pipe , includes} from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.includes', () => { it('happy', () => { const list = [{ a: { b: '1' } }, { a: { b: '2' } }, { a: { b: '3' } }] const result = pipe({ a: { b: '1' } }, includes(list)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('with string', () => { const result = pipe('oo', includes('foo')) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('with array of strings', () => { const result = pipe('1', includes(['1','2','3'])) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -5353,6 +5393,7 @@ test('happy', () => { ```typescript import { pipe, indexBy } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.indexBy', () => { const list = [{id: 'xyz', title: 'A'}, {id: 'abc', title: 'B'}] @@ -5360,8 +5401,8 @@ it('R.indexBy', () => { list, indexBy('id') ) - result.abc // $ExpectType { id: string; title: string; } - result.foo // $ExpectType { id: string; title: string; } + expectTypeOf(result.abc).toEqualTypeOf<{ id: string; title: string; }>() + expectTypeOf(result.foo).toEqualTypeOf<{ id: string; title: string; }>() }) ``` @@ -5455,12 +5496,13 @@ test('list of arrays use R.equals', () => { ```typescript import { indexOf } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.indexOf', () => { it('happy', () => { const list = [{ a: 1 }, { a: 2 }] const result = indexOf({ a: 1 })(list) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -5551,12 +5593,13 @@ test('with string', () => { ```typescript import { map, pipe, init } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.init', () => { it('with string', () => { const result = init('foo') - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with list - using const on short array', () => { const result = pipe( @@ -5564,7 +5607,7 @@ describe('R.init', () => { map(x => x * 2), init, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const on empty array', () => { const result = pipe( @@ -5572,7 +5615,7 @@ describe('R.init', () => { map(x => x * 2), init, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const', () => { const result = pipe( @@ -5580,12 +5623,12 @@ describe('R.init', () => { map(x => x * 2), init, ) - result // $ExpectType [number, number] + expectTypeOf(result).toEqualTypeOf<[number, number]>() }) it('with list - mixed types', () => { const result = init(['foo', 'bar', 1, 2, 3]) - result // $ExpectType (string | number)[] + expectTypeOf(result).toEqualTypeOf<(string | number)[]>() }) }) ``` @@ -5607,12 +5650,12 @@ It generates a new string from `inputWithTags` by replacing all `{{x}}` occurren const inputWithTags = 'foo is {{bar}} even {{a}} more' const templateArguments = {"bar":"BAR", a: 1} -const result = R.interpolate(inputWithTags, templateArguments) +const result = R.interpolate(inputWithTags)(templateArguments) const expected = 'foo is BAR even 1 more' // => `result` is equal to `expected` ``` -Try this R.interpolate example in Rambda REPL +Try this R.interpolate example in Rambda REPL
@@ -5687,6 +5730,7 @@ test('happy', () => { ```typescript import { interpolate } from 'rambda' +import { expectTypeOf, it } from 'vitest' const templateInput = 'foo {{x}} baz' const templateArguments = { x: 'led zeppelin' } @@ -5694,7 +5738,7 @@ const templateArguments = { x: 'led zeppelin' } it('R.interpolate', () => { const result = interpolate(templateInput)(templateArguments) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -5782,6 +5826,7 @@ test('order is the same as in Ramda', () => { ```typescript import { intersection } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list1 = [1, 2, 3] const list2 = [1, 3, 5] @@ -5789,7 +5834,7 @@ const list2 = [1, 3, 5] describe('R.intersection', () => { it('happy', () => { const result = intersection(list1)(list2) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -5926,6 +5971,7 @@ test('readme example', () => { ```typescript import { intersectionWith, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list1 = [1, 2, 3] const list2 = [1, 3, 5] @@ -5936,7 +5982,7 @@ describe('R.intersectionWith', () => { list1, intersectionWith((x, y) => x === y, list2), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -6030,11 +6076,12 @@ test('intersperse', () => { ```typescript import { intersperse } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.intersperse', () => { it('curried', () => { const result = intersperse('|')(['foo', 'bar']) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -6053,10 +6100,10 @@ join(glue: string): (list: T[]) => string It returns a string of all `list` instances joined with a `glue`. ```javascript -R.join('-', [1, 2, 3]) // => '1-2-3' +R.join('-')([1, 2, 3]) // => '1-2-3' ``` -Try this R.join example in Rambda REPL +Try this R.join example in Rambda REPL
@@ -6086,10 +6133,11 @@ export function join(glue) { ```typescript import { join, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.join', () => { const result = pipe([1, 2, 3], join('|')) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -6269,10 +6317,13 @@ test('list of arrays uses R.equals', () => { ```typescript import { lastIndexOf, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.lastIndexOf', () => { - const result = pipe([{ a: 1 }, { a: 2 }, { a: 3 }], lastIndexOf({ a: 2 })) - result // $ExpectType number + it('happy', () => { + const result = pipe([{ a: 1 }, { a: 2 }, { a: 3 }], lastIndexOf({ a: 2 })) + expectTypeOf(result).toEqualTypeOf() + }) }) ``` @@ -6363,6 +6414,7 @@ it('happy', () => { TypeScript test ```typescript +import { expectTypeOf, it } from 'vitest' import { map, pipe } from 'rambda' const list = [1, 2, 3] @@ -6372,11 +6424,11 @@ it('R.map', () => { list, x => x, map(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) it('R.map - index in functor', () => { @@ -6384,26 +6436,26 @@ it('R.map - index in functor', () => { list, x => x, map((x, i) => { - x // $ExpectType number - i // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(i).toEqualTypeOf() return String(x) }), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) it('R.map - without pipe', () => { map(x => { - x // $ExpectType unknown + expectTypeOf(x).toEqualTypeOf() })([1, 2, 3]) }) it('R.map - without pipe but explicitly typed', () => { const result = map(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) })([1, 2, 3]) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -6532,6 +6584,7 @@ test('error', async () => { ```typescript import { mapAsync, pipeAsync, map } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = ['a', 'bc', 'def'] const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) @@ -6541,7 +6594,7 @@ it('R.mapAsync', async () => { list, mapAsync(async x => { await delay(100) - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x.length % 2 ? x.length + 1 : x.length + 10 }), x => x, @@ -6551,7 +6604,7 @@ it('R.mapAsync', async () => { return x + 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -6653,6 +6706,7 @@ it('happy', () => { ```typescript import { mapChain, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -6661,16 +6715,16 @@ it('R.mapChain', () => { list, mapChain( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }, x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, ), ) - result // $ExpectType boolean[] + expectTypeOf(result).toEqualTypeOf() }) it('R.mapChain - with index', () => { @@ -6678,17 +6732,17 @@ it('R.mapChain - with index', () => { list, mapChain( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }, (x, i) => { - i // $ExpectType number - x // $ExpectType string + expectTypeOf(i).toEqualTypeOf() + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, ), ) - result // $ExpectType boolean[] + expectTypeOf(result).toEqualTypeOf() }) it('R.mapChain - 3 functions', () => { @@ -6697,20 +6751,20 @@ it('R.mapChain - 3 functions', () => { x => x, mapChain( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }, x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, x => { - x // $ExpectType boolean + expectTypeOf(x).toEqualTypeOf() return x ? 'foo' : 'bar' }, ), ) - result // $ExpectType ("foo" | "bar")[] + expectTypeOf(result).toEqualTypeOf<("foo" | "bar")[]>() }) ``` @@ -6791,6 +6845,7 @@ test('happy', () => { ```typescript import { mapKeys, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.mapKeys', () => { const result = pipe( @@ -6798,7 +6853,7 @@ it('R.mapKeys', () => { mapKeys((prop, x) => `${prop}-${x}`), mapKeys(prop => `${prop}-${prop}`), ) - result // $ExpectType Record + expectTypeOf(result).toEqualTypeOf>() }) ``` @@ -6894,54 +6949,55 @@ it('happy', () => { ```typescript import { mapObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.mapObject', () => { it('iterable with one arguments', () => { const result = pipe( { a: 1 }, mapObject(a => { - a // $ExpectType number + expectTypeOf(a).toEqualTypeOf() return `${a}` }), ) - result // $ExpectType { a: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; }>() }) it('iterable with one arguments', () => { const result = pipe( { a: [1,2,3], b: 'foo' }, mapObject(a => { - a // $ExpectType string | number[] + expectTypeOf(a).toEqualTypeOf() return typeof a as string }), ) - result // $ExpectType { a: string; b: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; b: string; }>() }) it('iterable with two arguments', () => { const result = pipe( { a: 1, b: 'foo' }, mapObject((a, b) => { - a // $ExpectType string | number - b // $ExpectType "a" | "b" + expectTypeOf(a).toEqualTypeOf() + expectTypeOf(b).toEqualTypeOf<"a" | "b">() return `${a}` }), ) - result // $ExpectType { a: string; b: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; b: string; }>() }) it('iterable with three arguments', () => { const result = pipe( { a: 1, b: 'foo' }, mapObject((a, b, c) => { - a // $ExpectType string | number - b // $ExpectType "a" | "b" - c // $ExpectType { a: number; b: string; } + expectTypeOf(a).toEqualTypeOf() + expectTypeOf(b).toEqualTypeOf<"a" | "b">() + expectTypeOf(c).toEqualTypeOf<{ a: number; b: string; }>() return `${a}` }), ) - result // $ExpectType { a: string; b: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; b: string; }>() }) }) ``` @@ -7034,13 +7090,14 @@ test('happy', async () => { ```typescript import { mapObjectAsync, pipeAsync } from 'rambda' import { delay } from 'rambdax' +import { expectTypeOf, it } from 'vitest' it('R.mapObjectAsync', async () => { const result = await pipeAsync( { a: 'foo', b: 'bar' }, mapObjectAsync(async x => { await delay(100) - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x.length % 2 ? x.length + 1 : x.length + 10 }), x => x, @@ -7049,8 +7106,8 @@ it('R.mapObjectAsync', async () => { return x + 1 }), ) - result.a // $ExpectType number - result.b // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) ``` @@ -7263,13 +7320,14 @@ it('happy', () => { ```typescript import { map, mapPropObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.mapPropObject', () => { it('iterable with one arguments', () => { const result = pipe( { a: [1,2,3], b: 'foo' }, mapPropObject('a', x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return { a: x, flag: x > 2, @@ -7277,21 +7335,21 @@ describe('R.mapPropObject', () => { }), ) - result.a // $ExpectType { a: number; flag: boolean; }[] - result.b // $ExpectType string + expectTypeOf(result.a).toEqualTypeOf<{ a: number; flag: boolean; }[]>() + expectTypeOf(result.b).toEqualTypeOf() }) it('iterable with two arguments', () => { const result = pipe( { a: [1,2,3], b: 'foo' }, mapPropObject('a', (x, list) => { - x // $ExpectType number - list // $ExpectType number[] + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(list).toEqualTypeOf() return list.length }), ) - result.a // $ExpectType number[] - result.b // $ExpectType string + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) it('more complex example', () => { @@ -7299,14 +7357,14 @@ describe('R.mapPropObject', () => { [{a:[true, false, true], b: 'foo'}], map( mapPropObject( 'a',(a) => { - a // $ExpectType boolean + expectTypeOf(a).toEqualTypeOf() return {a, b: 2} }) ) ) - result[0].a[0].a // $ExpectType boolean - result[0].a[0].b // $ExpectType number + expectTypeOf(result[0].a[0].a).toEqualTypeOf() + expectTypeOf(result[0].a[0].b).toEqualTypeOf() }) }) ``` @@ -7326,13 +7384,13 @@ Curried version of `String.prototype.match` which returns empty array, when ther ```javascript const result = [ - R.match('a', 'foo'), - R.match(/([a-z]a)/g, 'bananas') + R.match('a')('foo'), + R.match(/([a-z]a)/g)('bananas') ] // => [[], ['ba', 'na', 'na']] ``` -Try this R.match example in Rambda REPL +Try this R.match example in Rambda REPL
@@ -7388,13 +7446,14 @@ test('with string', () => { ```typescript import { match } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const str = 'foo bar' describe('R.match', () => { it('happy', () => { const result = match(/foo/)(str) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -7415,10 +7474,10 @@ It returns the greater value between `x` and `y` according to `compareFn` functi ```javascript const compareFn = Math.abs -R.maxBy(compareFn, 5, -7) // => -7 +R.maxBy(compareFn, 5)(-7) // => -7 ``` -Try this R.maxBy example in Rambda REPL +Try this R.maxBy example in Rambda REPL
@@ -7463,6 +7522,7 @@ test('happy', () => { ```typescript import { maxBy, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const first = 1 const second = 2 @@ -7472,7 +7532,7 @@ it('R.maxBy', () => { second, maxBy(x => (x % 2 === 0 ? 1 : -1), first), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -7484,17 +7544,17 @@ it('R.maxBy', () => { ```typescript -merge(source: Source): (data: T) => Merge +merge(source: Source): (newProps: T) => Merge ``` -It creates a copy of `target` object with overwritten `newProps` properties. +It creates a copy of `source` object with overwritten `newProps` properties.
All TypeScript definitions ```typescript -merge(source: Source): (data: T) => Merge; +merge(source: Source): (newProps: T) => Merge; ```
@@ -7540,11 +7600,12 @@ test('happy', () => { ```typescript import { merge, mergeTypes, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.merge', () => { const result = pipe({ foo: 1 }, merge({ bar: 2 }), mergeTypes) - result.foo // $ExpectType number - result.bar // $ExpectType number + expectTypeOf(result.foo).toEqualTypeOf() + expectTypeOf(result.bar).toEqualTypeOf() }) ``` @@ -7552,6 +7613,96 @@ it('R.merge', () => { [![---------------](https://raw.githubusercontent.com/selfrefactor/rambda/master/files/separator.png)](#merge) +### mergeDeep + +```typescript + +mergeDeep(source: Source): (newProps: T) => Merge +``` + +
+ +All TypeScript definitions + +```typescript +mergeDeep(source: Source): (newProps: T) => Merge; +``` + +
+ +
+ +R.mergeDeep source + +```javascript +import { type } from './type.js' + +const isObject = (x) => type(x) === 'Object' + +function mergeDeepFn(source, objectWithNewProps) { + return [source, objectWithNewProps].reduce((prev, obj) => { + Object.keys(obj).forEach((key) => { + const pVal = prev[key] + const oVal = obj[key] + + if (isObject(pVal) && isObject(oVal)) { + prev[key] = mergeDeepFn(pVal, oVal) + } else { + prev[key] = oVal + } + }) + + return prev + }, {}) +} + +export function mergeDeep(source) { + return (objectWithNewProps) => mergeDeepFn(source, objectWithNewProps) +} +``` + +
+ +
+ +Tests + +```javascript +import { mergeDeep } from './mergeDeep.js' + +test('happy', () => { + const source = { + a: 1, + b: [1, 2], + c: { + d: 1, + f: 2, + e: [1, 2], + h: [1, 2], + }, + } + const objectWithNewProps = { + b: [3], + c: { + f: 3, + s: 3, + e: [3], + }, + q: 3, + } + expect(mergeDeep(source)(objectWithNewProps)).toEqual({ + a: 1, + b: [3], + c: { d: 1, f: 3, e: [3], h: [1, 2], s: 3 }, + q: 3, + }) +}) +``` + +
+ +[![---------------](https://raw.githubusercontent.com/selfrefactor/rambda/master/files/separator.png)](#mergeDeep) + ### mergeTypes ```typescript @@ -7662,12 +7813,13 @@ test('middle', () => { ```typescript import { map, middle, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.middle', () => { it('with string', () => { const result = middle('foo') - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with list - using const on short array', () => { const result = pipe( @@ -7675,7 +7827,7 @@ describe('R.middle', () => { map(x => x * 2), middle, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const on empty array', () => { const result = pipe( @@ -7683,7 +7835,7 @@ describe('R.middle', () => { map(x => x * 2), middle, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const', () => { const result = pipe( @@ -7691,12 +7843,12 @@ describe('R.middle', () => { map(x => x * 2), middle, ) - result // $ExpectType [number, number] + expectTypeOf(result).toEqualTypeOf<[number, number]>() }) it('with list - mixed types', () => { const result = middle(['foo', 'bar', 1, 2, 3]) - result // $ExpectType (string | number)[] + expectTypeOf(result).toEqualTypeOf<(string | number)[]>() }) }) ``` @@ -7717,10 +7869,10 @@ It returns the lesser value between `x` and `y` according to `compareFn` functio ```javascript const compareFn = Math.abs -R.minBy(compareFn, -5, 2) // => -5 +R.minBy(compareFn, -5)(2) // => -5 ``` -Try this R.minBy example in Rambda REPL +Try this R.minBy example in Rambda REPL
@@ -7854,11 +8006,11 @@ modifyPath(path: [], fn: (value: U) => T): (obj: U) => T It changes a property of object on the base of provided path and transformer function. ```javascript -const result = R.modifyPath('a.b.c', x=> x+1, {a:{b: {c:1}}}) +const result = R.modifyPath('a.b.c', x=> x+1)({a:{b: {c:1}}}) // => {a:{b: {c:2}}} ``` -Try this R.modifyPath example in Rambda REPL +Try this R.modifyPath example in Rambda REPL
@@ -7955,6 +8107,7 @@ test('works only on existing paths', () => { ```typescript import { modifyPath, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { a: { b: { c: 1 } } } @@ -7964,14 +8117,14 @@ describe('R.modifyPath', () => { obj, modifyPath(['a', 'b', 'c'], (x: number) => String(x)), ) - result.a.b.c // $ExpectType string + expectTypeOf(result.a.b.c).toEqualTypeOf() }) it('string path', () => { const result = pipe( obj, modifyPath('a.b.c', (x: number) => String(x)), ) - result.a.b.c // $ExpectType string + expectTypeOf(result.a.b.c).toEqualTypeOf() }) }) ``` @@ -8081,13 +8234,14 @@ test('adjust if `array` at the given key with the `transformation` function', () ```typescript import { modifyProp, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.modify', () => { const result = pipe( { a: 1, b: 2, c: { d: 3 } }, modifyProp('a', val => val + 1), ) - result // $ExpectType { a: number; b: number; c: { d: number; }; } + expectTypeOf(result).toEqualTypeOf<{ a: number; b: number; c: { d: number; }; }>() pipe( { a: 1, b: 2, c: { d: 3 } }, @@ -8182,6 +8336,7 @@ test('when false', () => { ```typescript import { none, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.none', () => { it('happy', () => { @@ -8189,7 +8344,7 @@ describe('R.none', () => { [1, 2, 3], none(x => x > 0), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -8313,15 +8468,16 @@ test('with wrong input', () => { ```typescript import { objectIncludes, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.objectIncludes', () => { it('happy', () => { const result = pipe({ a: 1, b: 2, c: { d: 3 } }, objectIncludes({ a: 2 })) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('nested', () => { const result = pipe({ a: 1, b: 2, c: { d: 3 } }, objectIncludes({ c: { d: 3 } })) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -8388,13 +8544,14 @@ test('happy', () => { ```typescript import { objOf, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const key = 'foo' const value = 42 it('R.objOf', () => { const result = pipe(value, objOf(key)) - result.foo // $ExpectType number + expectTypeOf(result.foo).toEqualTypeOf() // @ts-expect-error result.bar }) @@ -8424,13 +8581,13 @@ const propsToOmit = 'a,c,d' const propsToOmitList = ['a', 'c', 'd'] const result = [ - R.omit(propsToOmit, obj), - R.omit(propsToOmitList, obj) + R.omit(propsToOmit)(obj), + R.omit(propsToOmitList)(obj) ] // => [{b: 2}, {b: 2}] ``` -Try this R.omit example in Rambda REPL +Try this R.omit example in Rambda REPL
@@ -8532,17 +8689,18 @@ test('with array as condition', () => { ```typescript import { omit, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: 'foo', b: 2, c: 3 } describe('R.omit', () => { it('with string as input', () => { const result = pipe(input, omit('a,b')) - result.c // $ExpectType number + expectTypeOf(result.c).toEqualTypeOf() }) it('with array as input', () => { const result = pipe(input, omit(['a', 'b'])) - result.c // $ExpectType number + expectTypeOf(result.c).toEqualTypeOf() }) }) ``` @@ -8639,6 +8797,7 @@ test('happy', () => { ```typescript import { partition, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.partition', () => { it('happy', () => { @@ -8648,14 +8807,14 @@ describe('R.partition', () => { const list = [1, 2, 3, 4] const result = pipe(list, partition(predicate)) - result // $ExpectType [number[], number[]] + expectTypeOf(result).toEqualTypeOf<[number[], number[]]>() }) it('with simple object', () => { const result = pipe( [{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }], partition(x => x.a > 2), ) - result // $ExpectType [{ a: number; }[], { a: number; }[]] + expectTypeOf(result).toEqualTypeOf<[{ a: number; }[], { a: number; }[]]>() }) it('with complex object', () => { interface Foo { @@ -8667,7 +8826,7 @@ describe('R.partition', () => { const list1: (Foo | Bar)[] = [{ a: 1 }, { b: 2 }, { a: 3 }, { b: 4 }] const filterFoo = (x: Foo | Bar): x is Foo => 'a' in x const result = pipe(list1, partition(filterFoo)) - result // $ExpectType [Foo[], Bar[]] + expectTypeOf(result).toEqualTypeOf<[Foo[], Bar[]]>() }) }) ``` @@ -8782,6 +8941,7 @@ test('happy', () => { ```typescript import { partitionObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.partition', () => { it('happy', () => { @@ -8789,7 +8949,7 @@ describe('R.partition', () => { { a: 1, b: 2 }, partitionObject((x, prop) => x> 1 || prop === 'c'), ) - result // $ExpectType [Record, Record] + expectTypeOf(result).toEqualTypeOf<[Record, Record]>() }) it('with complex object', () => { interface Foo { @@ -8806,7 +8966,7 @@ describe('R.partition', () => { } const filterFoo = (x: Foo | Bar): x is Foo => 'a' in x const result = pipe(obj, partitionObject(filterFoo)) - result // $ExpectType [Record, Record] + expectTypeOf(result).toEqualTypeOf<[Record, Record]>() }) }) ``` @@ -8834,14 +8994,14 @@ const pathToSearch = 'a.b' const pathToSearchList = ['a', 'b'] const result = [ - R.path(pathToSearch, obj), - R.path(pathToSearchList, obj), - R.path('a.b.c.d', obj) + R.path(pathToSearch)(obj), + R.path(pathToSearchList)(obj), + R.path('a.b.c.d')(obj) ] // => [1, 1, undefined] ``` -Try this R.path example in Rambda REPL +Try this R.path example in Rambda REPL
@@ -8957,6 +9117,7 @@ test('null is not a valid path', () => { ```typescript import { path, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: { b: { c: true } } } @@ -8964,12 +9125,12 @@ describe('R.path with string as path', () => { it('happy', () => { const result = pipe(input, path(['a', 'b'])) const resultStringInput = pipe(input, path('a.b.c')) - result.c // $ExpectType boolean - resultStringInput // $ExpectType boolean + expectTypeOf(result.c).toEqualTypeOf() + expectTypeOf(resultStringInput).toEqualTypeOf() }) it('happy', () => { const result = pipe([1, 2, 3], path([1])) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -9071,6 +9232,7 @@ it('returns false otherwise', () => { ```typescript import { pathSatisfies, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: { b: { c: 'bar' } } } @@ -9080,7 +9242,7 @@ describe('R.pathSatisfies', () => { input, pathSatisfies( x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, ['a', 'b', 'c'], @@ -9089,12 +9251,12 @@ describe('R.pathSatisfies', () => { const resultStringInput = pipe( input, pathSatisfies(x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, 'a.b.c'), ) - result // $ExpectType boolean - resultStringInput // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() + expectTypeOf(resultStringInput).toEqualTypeOf() }) }) ``` @@ -9311,19 +9473,20 @@ test('props to pick is an array', () => { ```typescript import { pick, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: 'foo', c: 3 } describe('R.pick', () => { it('with string as input', () => { const result = pipe(input, pick('a,c')) - result.a // $ExpectType string - result.c // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) it('with array as input', () => { const result = pipe(input, pick(['a', 'c'])) - result.a // $ExpectType string - result.c // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) it('throws error if some keys do not exist', () => { // @ts-expect-error @@ -9526,6 +9689,7 @@ import { split, union, } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' type IsNotNever = [T] extends [never] ? false : true type Expect = T @@ -9622,11 +9786,11 @@ describe('real use cases - books', () => { drop(1), // without converting to `as FamousBook`, endsWith will pick up `Book` as type tapFn(union([awardedBrothersKaramazov]), (a, b) => { - a // $ExpectType Book[] - b // $ExpectType Book[] + expectTypeOf(a).toEqualTypeOf() + expectTypeOf(b).toEqualTypeOf() }), find(x => { - x // $ExpectType Book + expectTypeOf(x).toEqualTypeOf() return x.title === 'Brothers Karamazov' }), x => [x], @@ -9650,7 +9814,7 @@ describe('real use cases - books', () => { simplify, pick('year'), ) - const result = getResult(zaratustra) + const result = getResult(awardedZaratustraToRead as BaseBook) const final: Expect> = true }) it('case 3', () => { @@ -9660,7 +9824,7 @@ describe('real use cases - books', () => { 3,The Third,2018` const result = pipe(tableData, split('\n'), map(split(','))) - result // $ExpectType string[][] + expectTypeOf(result).toEqualTypeOf() }) }) @@ -9677,9 +9841,9 @@ it('R.pipe', () => { x => ({ ...x, c: x.b + 'bar' }), ) - result.a // $ExpectType number - result.b // $ExpectType string - result.c // $ExpectType string + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) ``` @@ -9783,23 +9947,24 @@ test('happy', async () => { ```typescript import { pipeAsync } from 'rambda' import { delay } from 'rambdax' +import { describe, expectTypeOf, it } from 'vitest' describe('R.pipeAsync', () => { it('happy', async () => { const result = await pipeAsync( 4, async x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() await delay(100) return x + 1 }, x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return Promise.resolve([x]) }, ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -9892,6 +10057,7 @@ test('with undefined', () => { ```typescript import { pipe, pluck } from 'rambda'; +import { expectTypeOf, it } from 'vitest' it("R.pluck", () => { const input = [ @@ -9899,7 +10065,7 @@ it("R.pluck", () => { { a: 2, b: "bar" }, ]; const result = pipe(input, pluck("b")); - result; // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }); it("R.pluck without R.pipe", () => { @@ -9912,7 +10078,7 @@ it("R.pluck without R.pipe", () => { }, ]; const sentences = pluck("text")(content); - sentences; // $ExpectType string[] + expectTypeOf(sentences).toEqualTypeOf() }); ``` @@ -9924,24 +10090,23 @@ it("R.pluck without R.pipe", () => { ```typescript -prepend(xToPrepend: T, iterable: T[]): T[] +prepend(xToPrepend: T): (iterable: T[]) => T[] ``` It adds element `x` at the beginning of `list`. ```javascript -const result = R.prepend('foo', ['bar', 'baz']) +const result = R.prepend('foo')(['bar', 'baz']) // => ['foo', 'bar', 'baz'] ``` -Try this R.prepend example in Rambda REPL +Try this R.prepend example in Rambda REPL
All TypeScript definitions ```typescript -prepend(xToPrepend: T, iterable: T[]): T[]; prepend(xToPrepend: T): (iterable: T[]) => T[]; ``` @@ -10006,7 +10171,6 @@ const result = [ ```typescript prop(prop: K): (obj: U) => U[K]; -prop(prop: K, obj: U): U[K]; ```
@@ -10029,17 +10193,18 @@ export function prop(searchProperty) { ```typescript import { map, pipe, prop } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.prop', () => { it('happy', () => { const result = pipe({ a: 1 }, prop('a')) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) it('alike R.pluck', () => { const result = pipe([{ a: 1 }, { a: 2 }], map(prop('a'))) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -10052,8 +10217,7 @@ describe('R.prop', () => { ```typescript -propEq(val: T): { - (name: K): (obj: Record) => boolean +propEq(valueToMatch: T, propToFind: K): (obj: Record) => boolean ``` It returns true if `obj` has property `propToFind` and its value is equal to `valueToMatch`. @@ -10066,26 +10230,20 @@ const propToFind = 'foo' const valueToMatch = 'bar' const result = [ - R.propEq(propToFind, valueToMatch)(obj), - R.propEq(propToFind, valueToMatch)(secondObj) + R.propEq(valueToMatch, propToFind)(obj), + R.propEq(valueToMatch, propToFind)(secondObj) ] // => [true, false] ``` -Try this R.propEq example in Rambda REPL +Try this R.propEq example in Rambda REPL
All TypeScript definitions ```typescript -propEq(val: T): { - (name: K): (obj: Record) => boolean; - (name: K, obj: Record): boolean; -}; -propEq(val: T, name: K): (obj: Record) => boolean; -... -... +propEq(valueToMatch: T, propToFind: K): (obj: Record) => boolean; ```
@@ -10135,6 +10293,26 @@ test('returns false if called with a null or undefined object', () => {
+
+ +TypeScript test + +```typescript +import { pipe, propEq } from 'rambda' +import { expectTypeOf, it } from 'vitest' + +const obj = { foo: 'bar' } +const valueToMatch = 'bar' +const propToFind = 'foo' + +it('R.propEq', () => { + const result = pipe(obj, propEq(valueToMatch, propToFind)) + expectTypeOf(result).toEqualTypeOf() +}) +``` + +
+ [![---------------](https://raw.githubusercontent.com/selfrefactor/rambda/master/files/separator.png)](#propEq) ### propOr @@ -10152,13 +10330,13 @@ const defaultValue = 'DEFAULT_VALUE' const property = 'a' const result = [ - R.propOr(defaultValue, property)(obj), - R.propOr(defaultValue, 'foo')(obj) + R.propOr(property, defaultValue)(obj), + R.propOr('foo', defaultValue)(obj) ] // => [1, 'DEFAULT_VALUE'] ``` -Try this R.propOr example in Rambda REPL +Try this R.propOr example in Rambda REPL
@@ -10213,6 +10391,7 @@ test('propOr', () => { ```typescript import { propOr } from 'rambda' +import { expectTypeOf, it } from 'vitest' const obj = { foo: 'bar' } const property = 'foo' @@ -10220,7 +10399,7 @@ const fallback = 'fallback' it('R.propOr', () => { const result = propOr(property, fallback)(obj) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -10242,11 +10421,11 @@ const obj = {a: {b:1}} const property = 'a' const predicate = x => x?.b === 1 -const result = R.propSatisfies(predicate, property, obj) +const result = R.propSatisfies(predicate, property)(obj) // => true ``` -Try this R.propSatisfies example in Rambda REPL +Try this R.propSatisfies example in Rambda REPL
@@ -10296,6 +10475,7 @@ test('when false', () => { ```typescript import { pipe, propSatisfies } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { a: 1 } @@ -10304,12 +10484,12 @@ describe('R.propSatisfies', () => { const result = pipe( obj, propSatisfies(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 0 }, 'a'), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -10403,7 +10583,8 @@ range(startInclusive: number, endInclusive: number) : number[]; export function range(a, b) { const start = b === undefined ? 0 : a const end = b === undefined ? a : b - if (end<= start) { + if (end === start) return [start] + if (end < start) { return [] } const len = end - start @@ -10422,9 +10603,12 @@ import { range } from './range.js' test('happy', () => { expect(range(5)).toEqual([0, 1, 2, 3, 4, 5]) - expect(range(3,5)).toEqual([3, 4, 5]) - expect(range(5,3)).toEqual([]) - expect(range(0)).toEqual([]) + expect(range(3, 5)).toEqual([3, 4, 5]) + expect(range(5, 3)).toEqual([]) + expect(range(5, 5)).toEqual([5]) + expect(range(0)).toEqual([0]) + expect(range(1)).toEqual([0, 1]) + expect(range(2)).toEqual([0, 1, 2]) }) ``` @@ -10436,12 +10620,13 @@ test('happy', () => { ```typescript import { range } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.range', () => { it('curried', () => { const result = [range(1, 4), range(1)] - result // $ExpectType number[][] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -10477,7 +10662,8 @@ rangeDescending(endInclusive: number) : number[]; ```javascript export function rangeDescending(start, b) { const end = b === undefined ? 0 : b - if (start <= end) { + if (start === end) return [start] + if (start < end) { return [] } const len = start - end @@ -10496,9 +10682,12 @@ import { rangeDescending } from './rangeDescending.js' test('happy', () => { expect(rangeDescending(5)).toEqual([5, 4, 3, 2, 1, 0]) - expect(rangeDescending(7,3)).toEqual([7, 6, 5, 4,3]) - expect(rangeDescending(5, 7)).toEqual([]) - expect(rangeDescending(5, 5)).toEqual([]) + expect(rangeDescending(7, 3)).toEqual([7, 6, 5, 4, 3]) + expect(rangeDescending(0)).toEqual([0]) + expect(rangeDescending(1)).toEqual([1, 0]) + expect(rangeDescending(2)).toEqual([2, 1, 0]) + expect(rangeDescending(5, 7)).toEqual([]) + expect(rangeDescending(5, 5)).toEqual([5]) }) ``` @@ -10520,11 +10709,11 @@ const list = [1, 2, 3] const initialValue = 10 const reducer = (prev, current) => prev * current -const result = R.reduce(reducer, initialValue, list) +const result = R.reduce(reducer, initialValue)(list) // => 60 ``` -Try this R.reduce example in Rambda REPL +Try this R.reduce example in Rambda REPL
@@ -10608,13 +10797,14 @@ test('returns the accumulator for an undefined list', () => { ```typescript import { pipe, reduce } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.reduce', () => { const result = pipe( [1, 2, 3], reduce((acc, val) => acc + val, 10), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -10701,6 +10891,7 @@ test('happy', () => { ```typescript import { reject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -10709,22 +10900,22 @@ describe('R.reject with array', () => { const result = pipe( list, reject(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with index', () => { const result = pipe( list, reject((x: number, i: number) => { - x // $ExpectType number - i // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(i).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('narrowing type', () => { interface Foo { @@ -10745,7 +10936,7 @@ describe('R.reject with array', () => { testList, reject(rejectBar), ) - result // $ExpectType (Foo | Baz)[] + expectTypeOf(result).toEqualTypeOf<(Foo | Baz)[]>() }) it('narrowing type - readonly', () => { interface Foo { @@ -10766,17 +10957,17 @@ describe('R.reject with array', () => { testList, reject(rejectBar), ) - result // $ExpectType (Foo | Baz)[] + expectTypeOf(result).toEqualTypeOf<(Foo | Baz)[]>() }) it('rejecting NonNullable', () => { const testList = [1, 2, null, undefined, 3] const result = pipe(testList, reject(Boolean)) - result // $ExpectType (null | undefined)[] + expectTypeOf(result).toEqualTypeOf<(null | undefined)[]>() }) it('rejecting NonNullable - readonly', () => { const testList = [1, 2, null, undefined, 3] as const const result = pipe(testList, reject(Boolean)) - result // $ExpectType (null | undefined)[] + expectTypeOf(result).toEqualTypeOf<(null | undefined)[]>() // @ts-expect-error result.includes(1) }) @@ -10879,17 +11070,18 @@ test('happy', () => { ```typescript import { filterObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.filterObject', () => { it('require explicit type', () => { const result = pipe( { a: 1, b: 2 }, filterObject<{ b: number }>(a => { - a // $ExpectType number + expectTypeOf(a).toEqualTypeOf() return a > 1 }), ) - result.b // $ExpectType number + expectTypeOf(result.b).toEqualTypeOf() }) }) ``` @@ -10960,6 +11152,7 @@ test('happy', () => { ```typescript import { replace } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const str = 'foo bar foo' const replacer = 'bar' @@ -10968,12 +11161,12 @@ describe('R.replace', () => { it('happy', () => { const result = replace(/foo/g, replacer)(str) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with string as search pattern', () => { const result = replace('foo', replacer)(str) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -11056,6 +11249,7 @@ test('happy', () => { ```typescript import { pipe, replaceAll } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const str = 'foo bar foo' const replacer = 'bar' @@ -11065,7 +11259,7 @@ describe('R.replaceAll', () => { it('happy', () => { const result = pipe(str, replaceAll(patterns, replacer)) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -11123,13 +11317,14 @@ export function shuffle(listInput) { ```typescript import { shuffle } from 'rambdax' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3, 4, 5] describe('R.shuffle', () => { it('happy', () => { const result = shuffle(list) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -11157,7 +11352,7 @@ const sortFn = (x, y) => { return x.a > y.a ? 1 : -1 } -const result = R.sort(sortFn, list) +const result = R.sort(sortFn)(list) const expected = [ {a: 1}, {a: 2}, @@ -11166,7 +11361,7 @@ const expected = [ // => `result` is equal to `expected` ``` -Try this R.sort example in Rambda REPL +Try this R.sort example in Rambda REPL
@@ -11221,6 +11416,7 @@ test("it doesn't mutate", () => { ```typescript import { pipe, sort } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [3, 0, 5, 2, 1] @@ -11229,7 +11425,7 @@ describe('R.sort', () => { const result = sort((a, b) => { return a > b ? 1 : -1 })(list) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('within pipe', () => { const result = pipe( @@ -11238,7 +11434,7 @@ describe('R.sort', () => { return a > b ? 1 : -1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -11350,6 +11546,7 @@ test('with non-existing path', () => { ```typescript import { pipe, sortBy } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.sortBy', () => { it('passing type to sort function and list', () => { @@ -11360,7 +11557,7 @@ describe('R.sortBy', () => { }), ) - result[0].a // $ExpectType number + expectTypeOf(result[0].a).toEqualTypeOf() }) }) ``` @@ -11537,17 +11734,18 @@ test('when path is not found in any item', () => { ```typescript import { pipe, sortByPath } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input= [{ a: { b: 2 } }, { a: { b: 1 } }] describe('R.sortByPath', () => { it('with string as path', () => { const result = pipe(input, sortByPath('a.b')) - result[0].a.b // $ExpectType number + expectTypeOf(result[0].a.b).toEqualTypeOf() }) it('with list of strings as path', () => { const result = pipe(input, sortByPath(['a', 'b'])) - result[0].a.b // $ExpectType number + expectTypeOf(result[0].a.b).toEqualTypeOf() }) it('with non-existent path', () => { // @ts-expect-error @@ -11745,6 +11943,7 @@ test('happy', () => { ```typescript import { sortObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { c: 1, @@ -11757,27 +11956,27 @@ describe('R.sortObject', () => { const result = pipe( obj, sortObject((propA, propB, valueA, valueB) => { - propA // $ExpectType string - propB // $ExpectType string - valueA // $ExpectType number - valueB // $ExpectType number + expectTypeOf(propA).toEqualTypeOf() + expectTypeOf(propB).toEqualTypeOf() + expectTypeOf(valueA).toEqualTypeOf() + expectTypeOf(valueB).toEqualTypeOf() return propA > propB ? -1 : 1 }), ) - result // $ExpectType { c: number; a: number; b: number; } + expectTypeOf(result).toEqualTypeOf<{ c: number; a: number; b: number; }>() }) it('predicate with only property arguments', () => { const result = pipe( obj, sortObject((propA, propB) => { - propA // $ExpectType string - propB // $ExpectType string + expectTypeOf(propA).toEqualTypeOf() + expectTypeOf(propB).toEqualTypeOf() return propA > propB ? -1 : 1 }), ) - result // $ExpectType { c: number; a: number; b: number; } + expectTypeOf(result).toEqualTypeOf<{ c: number; a: number; b: number; }>() }) }) ``` @@ -12054,7 +12253,7 @@ splitEvery(sliceLength: number): (input: T[]) => (T[])[]; R.splitEvery source ```javascript -export function splitEvery(sliceLength) { +export function splitEvery(sliceLength, strict = false) { return list => { if (sliceLength < 1) { throw new Error('First argument to splitEvery must be a positive integer') @@ -12064,6 +12263,7 @@ export function splitEvery(sliceLength) { let counter = 0 while (counter < list.length) { + if (strict && counter + sliceLength > list.length) break; willReturn.push(list.slice(counter, (counter += sliceLength))) } @@ -12094,13 +12294,14 @@ test('happy', () => { ```typescript import { pipe, splitEvery } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3, 4, 5, 6, 7] describe('R.splitEvery', () => { it('happy', () => { const result = pipe(list, splitEvery(3)) - result // $ExpectType number[][] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -12173,14 +12374,14 @@ switcher(valueToMatch: T): Switchem ```javascript const list = [1, 2, 3] -const result = switcher(list.length) +const result = R.switcher(list.length) .is(x => x < 2, 4) .is(x => x < 4, 6) .default(7) // => 6 ``` -Try this R.switcher example in Rambda REPL +Try this R.switcher example in Rambda REPL
@@ -12373,6 +12574,7 @@ test('fallback to default input when no matches', () => { ```typescript import { switcher } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.switcher', () => { it('no transformation', () => { @@ -12383,7 +12585,7 @@ describe('R.switcher', () => { .is(x => x < 4, 6) .default(7) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) it('with transformation', () => { const list = [1, 2, 3] @@ -12394,7 +12596,7 @@ describe('R.switcher', () => { .is(x => x < 4, 'secondStage') .default('thirdStage') - result // $ExpectType Stage + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -12486,6 +12688,7 @@ test('symmetricDifference with objects', () => { ```typescript import { symmetricDifference } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.symmetricDifference', () => { it('happy', () => { @@ -12493,7 +12696,7 @@ describe('R.symmetricDifference', () => { const list2 = [{ id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }] const result = symmetricDifference(list1)(list2) - result // $ExpectType { id: number; }[] + expectTypeOf(result).toEqualTypeOf<{ id: number; }[]>() }) }) ``` @@ -12577,12 +12780,13 @@ test('tail', () => { ```typescript import { map, pipe, tail } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.tail', () => { it('with string', () => { const result = tail('foo') - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with list - using const on short array', () => { const result = pipe( @@ -12590,7 +12794,7 @@ describe('R.tail', () => { map(x => x * 2), tail, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const on empty array', () => { const result = pipe( @@ -12598,7 +12802,7 @@ describe('R.tail', () => { map(x => x * 2), tail, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const', () => { const result = pipe( @@ -12606,12 +12810,12 @@ describe('R.tail', () => { map(x => x * 2), tail, ) - result // $ExpectType [number, number] + expectTypeOf(result).toEqualTypeOf<[number, number]>() }) it('with list - mixed types', () => { const result = tail(['foo', 'bar', 1, 2, 3]) - result // $ExpectType (string | number)[] + expectTypeOf(result).toEqualTypeOf<(string | number)[]>() }) }) ``` @@ -12635,12 +12839,12 @@ const howMany = 2 const result = [ R.take(howMany)([1, 2, 3]), - R.take(howMany, 'foobar'), + R.take(howMany)('foobar'), ] // => [[1, 2], 'fo'] ``` -Try this R.take example in Rambda REPL +Try this R.take example in Rambda REPL
@@ -12980,6 +13184,7 @@ test('always false', () => { ```typescript import { pipe, takeWhile } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -12989,7 +13194,7 @@ it('R.takeWhile', () => { takeWhile(x => x > 1), takeWhile((x, i) => i + x > 1), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -13108,15 +13313,16 @@ test('happy', () => { TypeScript test ```typescript -import { test } from 'rambda' +import { test as ramdaTest } from 'rambda' +import { expectTypeOf, it } from 'vitest' const input = 'foo ' const regex = /foo/ it('R.test', () => { - const result = test(regex)(input) + const result = ramdaTest(regex)(input) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -13162,18 +13368,15 @@ transformPropObject( TypeScript test ```typescript -import { transformPropObject, pipe } from 'rambda' +import type { transformPropObject } from 'rambda' +import { expectTypeOf, it } from 'vitest' +/** + * `transformPropObject` is declared in typings but not exported from the JS bundle yet. + * Keep compile-time-only assertions so Vitest does not execute missing runtime. + */ it('R.transformPropObject', () => { - const result = pipe( - { a: 1, b: 'foo' }, - transformPropObject(x => { - x // $ExpectType number - return x > 2 - }, 'a'), - ) - - result // $ExpectType { b: string; a: boolean; } + expectTypeOf().toBeFunction() }) ``` @@ -13282,6 +13485,7 @@ test('when fn is used', () => { ```typescript import { map, pipe, tryCatch } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.tryCatch', () => { it('happy', () => { @@ -13294,7 +13498,7 @@ describe('R.tryCatch', () => { ), ) - result // $ExpectType (string | null)[] + expectTypeOf(result).toEqualTypeOf<(string | null)[]>() }) }) ``` @@ -13554,12 +13758,13 @@ test('function inside object 2', () => { ```typescript import { type } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.type', () => { it('happy', () => { const result = type(4) - result // $ExpectType RambdaTypes + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -13640,25 +13845,26 @@ test('with list of objects', () => { ```typescript import { union } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.union', () => { it('happy', () => { const result = union([1, 2])([2, 3]) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with array of objects - case 1', () => { const list1 = [{ a: 1 }, { a: 2 }] const list2 = [{ a: 2 }, { a: 3 }] const result = union(list1)(list2) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) it('with array of objects - case 2', () => { const list1 = [{ a: 1, b: 1 }, { a: 2 }] const list2 = [{ a: 2 }, { a: 3, b: 3 }] const result = union(list1)(list2) - result[0].a // $ExpectType number - result[0].b // $ExpectType number | undefined + expectTypeOf(result[0].a).toEqualTypeOf() + expectTypeOf(result[0].b).toEqualTypeOf() }) }) ``` @@ -13743,6 +13949,7 @@ test('happy', () => { ```typescript import { pipe, unionWith } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.unionWith', () => { it('happy', () => { @@ -13750,14 +13957,14 @@ describe('R.unionWith', () => { const result = pipe( list, unionWith((x, y) => { - x.a // $ExpectType number - y.b // $ExpectType number + expectTypeOf(x.a).toEqualTypeOf() + expectTypeOf(y.b).toEqualTypeOf() return x.a === y.a }, [{a: 2, b: 2}, {a: 3, b: 2}]), ) - result[0].a // $ExpectType number - result[0].b // $ExpectType number + expectTypeOf(result[0].a).toEqualTypeOf() + expectTypeOf(result[0].b).toEqualTypeOf() }) }) ``` @@ -13860,11 +14067,12 @@ test('can distinct between string and number', () => { ```typescript import { uniq } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.uniq', () => { it('happy', () => { const result = uniq([1, 2, 3, 3, 3, 1, 2, 0]) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -13951,12 +14159,13 @@ test('uses R.uniq', () => { ```typescript import { uniqBy } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.uniqBy', () => { it('happy', () => { const result = uniqBy(Math.abs)([-2, -1, 0]) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -14106,6 +14315,7 @@ test('should return items that are not equal to themselves', () => { ```typescript import { pipe, uniqWith } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.uniqWith', () => { it('happy', () => { @@ -14113,7 +14323,7 @@ describe('R.uniqWith', () => { [{ a: 1 }, { a: 1 }], uniqWith((x, y) => x.a === y.a), ) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) }) ``` @@ -14210,6 +14420,7 @@ test('happy', () => { ```typescript import { pipe, unless } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const inc = (x: number) => x + 1 @@ -14219,23 +14430,23 @@ describe('R.unless', () => { 1, unless(x => x > 5, inc), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) it('with two different types', () => { const result = pipe( 1, unless( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 5 }, x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return `${x}-foo` }, ), ) - result // $ExpectType string | number + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -14330,6 +14541,7 @@ test('happy', () => { ```typescript import { pipe, unwind } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { a: 1, @@ -14339,13 +14551,13 @@ const obj = { describe('R.unwind', () => { it('happy', () => { const [result] = unwind('b')(obj) - result.a // $ExpectType number - result.b // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) it('inside pipe', () => { const [result] = pipe(obj, unwind('b')) - result.a // $ExpectType number - result.b // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) }) ``` @@ -14529,6 +14741,7 @@ test('happy', () => { ```typescript import { head, pipe, tap, when } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' function notNull(a: T | null | undefined): a is T { return a != null @@ -14543,7 +14756,7 @@ describe('R.when', () => { x => x, ), tap(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() }), when( x => x > 2, @@ -14551,7 +14764,7 @@ describe('R.when', () => { ), ) - result // $ExpectType string | number + expectTypeOf(result).toEqualTypeOf() }) it('with assertion of type', () => { @@ -14560,7 +14773,7 @@ describe('R.when', () => { head, when(notNull, x => x + 1), ) - result // $ExpectType number | null + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -14674,6 +14887,7 @@ test('should truncate result to length of shorted input list', () => { ```typescript import { zip } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.zip', () => { it('happy', () => { @@ -14681,8 +14895,8 @@ describe('R.zip', () => { const array2 = ['A', 'B', 'C'] let a: Partial const result = zip(array1)(array2) - result[0][0] // $ExpectType number - result[0][1] // $ExpectType string + expectTypeOf(result[0][0]).toEqualTypeOf() + expectTypeOf(result[0][1]).toEqualTypeOf() }) }) ``` @@ -14771,6 +14985,7 @@ test('when second list is longer', () => { TypeScript test ```typescript +import { describe, expectTypeOf, it } from 'vitest' import { pipe, zipWith } from 'rambda' const list1 = [1, 2] @@ -14781,13 +14996,13 @@ describe('R.zipWith', () => { const result = pipe( list2, zipWith((x, y) => { - x // $ExpectType number - y // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(y).toEqualTypeOf() return `${x}-${y}` }, list1), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -14798,6 +15013,20 @@ describe('R.zipWith', () => { ## ❯ CHANGELOG +11.2.0 + +- Fix wrong typing for `R.equal`,`R.path`, `R.prop`, `R.propEq`, `R.prepend` - [Issue #803](https://github.com/selfrefactor/rambda/issues/803) + +- Add `R.splitEveryStrict` + +- Add `R.mergeDeep` + +- Change `R.range` when start and end are the same to return array with one element instead of empty array. + +- Fix wrong usage of non-curried methods in example snippets. + +- Migrate to `vitest` for TS testing + 11.1.0 - Add `R.filterMap` - similar to Ruby `filter_map` diff --git a/dist/rambda.cjs b/dist/rambda.cjs index 23ee0a762..72e044f57 100644 --- a/dist/rambda.cjs +++ b/dist/rambda.cjs @@ -1123,6 +1123,29 @@ function merge(target) { Object.assign({}, target || {}, objectWithNewProps || {}) } +const isObject = (x) => type(x) === 'Object'; + +function mergeDeepFn(source, objectWithNewProps) { + return [source, objectWithNewProps].reduce((prev, obj) => { + Object.keys(obj).forEach((key) => { + const pVal = prev[key]; + const oVal = obj[key]; + + if (isObject(pVal) && isObject(oVal)) { + prev[key] = mergeDeepFn(pVal, oVal); + } else { + prev[key] = oVal; + } + }); + + return prev + }, {}) +} + +function mergeDeep(source) { + return (objectWithNewProps) => mergeDeepFn(source, objectWithNewProps) +} + function mergeTypes(x) { return x } @@ -1559,7 +1582,8 @@ function random(min, max){ function range(a, b) { const start = b === undefined ? 0 : a; const end = b === undefined ? a : b; - if (end<= start) { + if (end === start) return [start] + if (end < start) { return [] } const len = end - start; @@ -1568,7 +1592,8 @@ function range(a, b) { function rangeDescending(start, b) { const end = b === undefined ? 0 : b; - if (start <= end) { + if (start === end) return [start] + if (start < end) { return [] } const len = start - end; @@ -1688,7 +1713,7 @@ function split(separator) { return str => str.split(separator) } -function splitEvery(sliceLength) { +function splitEvery(sliceLength, strict = false) { return list => { if (sliceLength < 1) { throw new Error('First argument to splitEvery must be a positive integer') @@ -1698,6 +1723,7 @@ function splitEvery(sliceLength) { let counter = 0; while (counter < list.length) { + if (strict && counter + sliceLength > list.length) break; willReturn.push(list.slice(counter, (counter += sliceLength))); } @@ -2081,6 +2107,7 @@ exports.mapPropObject = mapPropObject; exports.match = match; exports.maxBy = maxBy; exports.merge = merge; +exports.mergeDeep = mergeDeep; exports.mergeTypes = mergeTypes; exports.middle = middle; exports.minBy = minBy; diff --git a/dist/rambda.js b/dist/rambda.js index 3019bcfe2..69b33e3e4 100644 --- a/dist/rambda.js +++ b/dist/rambda.js @@ -1121,6 +1121,29 @@ function merge(target) { Object.assign({}, target || {}, objectWithNewProps || {}) } +const isObject = (x) => type(x) === 'Object'; + +function mergeDeepFn(source, objectWithNewProps) { + return [source, objectWithNewProps].reduce((prev, obj) => { + Object.keys(obj).forEach((key) => { + const pVal = prev[key]; + const oVal = obj[key]; + + if (isObject(pVal) && isObject(oVal)) { + prev[key] = mergeDeepFn(pVal, oVal); + } else { + prev[key] = oVal; + } + }); + + return prev + }, {}) +} + +function mergeDeep(source) { + return (objectWithNewProps) => mergeDeepFn(source, objectWithNewProps) +} + function mergeTypes(x) { return x } @@ -1557,7 +1580,8 @@ function random(min, max){ function range(a, b) { const start = b === undefined ? 0 : a; const end = b === undefined ? a : b; - if (end<= start) { + if (end === start) return [start] + if (end < start) { return [] } const len = end - start; @@ -1566,7 +1590,8 @@ function range(a, b) { function rangeDescending(start, b) { const end = b === undefined ? 0 : b; - if (start <= end) { + if (start === end) return [start] + if (start < end) { return [] } const len = start - end; @@ -1686,7 +1711,7 @@ function split(separator) { return str => str.split(separator) } -function splitEvery(sliceLength) { +function splitEvery(sliceLength, strict = false) { return list => { if (sliceLength < 1) { throw new Error('First argument to splitEvery must be a positive integer') @@ -1696,6 +1721,7 @@ function splitEvery(sliceLength) { let counter = 0; while (counter < list.length) { + if (strict && counter + sliceLength > list.length) break; willReturn.push(list.slice(counter, (counter += sliceLength))); } @@ -2001,4 +2027,4 @@ function zipWith(fn, x) { ) } -export { RAMBDA_DELAY, _arity, _includes, _indexOf, _lastIndexOf, addProp, addPropToObjects, all, allPass, any, anyPass, append, ascend, assertType, checkObjectWithSpec, compact, complement, concat, convertToType, count, countBy, createCompareFunction, createObjectFromKeys, defaultTo, delay, descend, difference, drop, dropLast, dropLastWhile, dropWhile, duplicateBy, eqBy, eqProps, equals, equalsFn, evolve, excludes, exists, filter, filterAsync, filterMap, filterObject, find, findIndex, findLast, findLastIndex, findNth, flatMap, flatten, flattenObject, flattenObjectHelper, groupBy, groupByFallback, head, includes, indexBy, indexOf, init, interpolate, intersection, intersectionWith, intersperse, join, last, lastIndexOf, map, mapAsync, mapChain, mapFn, mapKeys, mapObject, mapObjectAsync, mapParallelAsync, mapPropObject, match, maxBy, merge, mergeTypes, middle, minBy, modifyItemAtIndex, modifyPath, modifyProp, none, objOf, objectIncludes, omit, partition, partitionObject, path, pathSatisfies, permutations, pick, pipe, pipeAsync, pluck, prepend, prop, propEq, propOr, propSatisfies, random, range, rangeDescending, reduce, reject, rejectObject, replace, replaceAll, shuffle, sort, sortBy, sortByDescending, sortByFn, sortByPath, sortByPathDescending, sortObject, sortWith, split, splitEvery, sum, switcher, symmetricDifference, tail, take, takeLast, takeLastWhile, takeWhile, tap, test, transformFlatObject, tryCatch, type, union, unionWith, uniq, uniqBy, uniqWith, unless, unwind, update, when, zip, zipWith }; +export { RAMBDA_DELAY, _arity, _includes, _indexOf, _lastIndexOf, addProp, addPropToObjects, all, allPass, any, anyPass, append, ascend, assertType, checkObjectWithSpec, compact, complement, concat, convertToType, count, countBy, createCompareFunction, createObjectFromKeys, defaultTo, delay, descend, difference, drop, dropLast, dropLastWhile, dropWhile, duplicateBy, eqBy, eqProps, equals, equalsFn, evolve, excludes, exists, filter, filterAsync, filterMap, filterObject, find, findIndex, findLast, findLastIndex, findNth, flatMap, flatten, flattenObject, flattenObjectHelper, groupBy, groupByFallback, head, includes, indexBy, indexOf, init, interpolate, intersection, intersectionWith, intersperse, join, last, lastIndexOf, map, mapAsync, mapChain, mapFn, mapKeys, mapObject, mapObjectAsync, mapParallelAsync, mapPropObject, match, maxBy, merge, mergeDeep, mergeTypes, middle, minBy, modifyItemAtIndex, modifyPath, modifyProp, none, objOf, objectIncludes, omit, partition, partitionObject, path, pathSatisfies, permutations, pick, pipe, pipeAsync, pluck, prepend, prop, propEq, propOr, propSatisfies, random, range, rangeDescending, reduce, reject, rejectObject, replace, replaceAll, shuffle, sort, sortBy, sortByDescending, sortByFn, sortByPath, sortByPathDescending, sortObject, sortWith, split, splitEvery, sum, switcher, symmetricDifference, tail, take, takeLast, takeLastWhile, takeWhile, tap, test, transformFlatObject, tryCatch, type, union, unionWith, uniq, uniqBy, uniqWith, unless, unwind, update, when, zip, zipWith }; diff --git a/dist/rambda.umd.js b/dist/rambda.umd.js index 23636fe1a..63b887eca 100644 --- a/dist/rambda.umd.js +++ b/dist/rambda.umd.js @@ -1127,6 +1127,29 @@ Object.assign({}, target || {}, objectWithNewProps || {}) } + const isObject = (x) => type(x) === 'Object'; + + function mergeDeepFn(source, objectWithNewProps) { + return [source, objectWithNewProps].reduce((prev, obj) => { + Object.keys(obj).forEach((key) => { + const pVal = prev[key]; + const oVal = obj[key]; + + if (isObject(pVal) && isObject(oVal)) { + prev[key] = mergeDeepFn(pVal, oVal); + } else { + prev[key] = oVal; + } + }); + + return prev + }, {}) + } + + function mergeDeep(source) { + return (objectWithNewProps) => mergeDeepFn(source, objectWithNewProps) + } + function mergeTypes(x) { return x } @@ -1563,7 +1586,8 @@ function range(a, b) { const start = b === undefined ? 0 : a; const end = b === undefined ? a : b; - if (end<= start) { + if (end === start) return [start] + if (end < start) { return [] } const len = end - start; @@ -1572,7 +1596,8 @@ function rangeDescending(start, b) { const end = b === undefined ? 0 : b; - if (start <= end) { + if (start === end) return [start] + if (start < end) { return [] } const len = start - end; @@ -1692,7 +1717,7 @@ return str => str.split(separator) } - function splitEvery(sliceLength) { + function splitEvery(sliceLength, strict = false) { return list => { if (sliceLength < 1) { throw new Error('First argument to splitEvery must be a positive integer') @@ -1702,6 +1727,7 @@ let counter = 0; while (counter < list.length) { + if (strict && counter + sliceLength > list.length) break; willReturn.push(list.slice(counter, (counter += sliceLength))); } @@ -2085,6 +2111,7 @@ exports.match = match; exports.maxBy = maxBy; exports.merge = merge; + exports.mergeDeep = mergeDeep; exports.mergeTypes = mergeTypes; exports.middle = middle; exports.minBy = minBy; diff --git a/docs/README.md b/docs/README.md index d2af17fd0..a7be455a7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -233,12 +233,13 @@ test('happy', () => { ```typescript import { addProp, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.addProp', () => { const result = pipe({ a: 1, b: 'foo' }, addProp('c', 3)) - result.a // $ExpectType number - result.b // $ExpectType string - result.c // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) ``` @@ -354,6 +355,7 @@ test('R.addPropToObjects', () => { ```typescript import { addPropToObjects, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.addPropToObjects', () => { let result = pipe( @@ -366,7 +368,7 @@ it('R.addPropToObjects', () => { (x) => String(x.a + x.b), ) ) - result // $ExpectType { a: number; b: number; c: string; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; b: number; c: string; }[]>() }) ``` @@ -455,17 +457,18 @@ test('when false', () => { ```typescript import * as R from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('all', () => { it('happy', () => { const result = R.pipe( [1, 2, 3], R.all(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 0 }), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -557,6 +560,7 @@ test('when returns false', () => { ```typescript import * as R from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('allPass', () => { it('happy', () => { @@ -568,7 +572,7 @@ describe('allPass', () => { (x) => x.length > 2, (x) => x.includes(3) ]))) - result // $ExpectType boolean[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -649,16 +653,17 @@ test('happy', () => { ```typescript import { any, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.any', () => { const result = pipe( [1, 2, 3], any(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 2 }), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -788,13 +793,14 @@ test('with empty predicates list', () => { ```typescript import { anyPass, filter } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('anyPass', () => { it('issue #604', () => { const plusEq = (w: number, x: number, y: number, z: number) => w + x === y + z const result = anyPass([plusEq])(3, 3, 3, 3) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('issue #642', () => { const isGreater = (num: number) => num > 5 @@ -802,9 +808,9 @@ describe('anyPass', () => { const xs = [0, 1, 2, 3] const filtered1 = filter(pred)(xs) - filtered1 // $ExpectType number[] + expectTypeOf(filtered1).toEqualTypeOf() const filtered2 = xs.filter(pred) - filtered2 // $ExpectType number[] + expectTypeOf(filtered2).toEqualTypeOf() }) it('functions as a type guard', () => { const isString = (x: unknown): x is string => typeof x === 'string' @@ -816,7 +822,7 @@ describe('anyPass', () => { const aValue: unknown = 1 if (isStringNumberOrBoolean(aValue)) { - aValue // $ExpectType string | number | boolean + expectTypeOf(aValue).toEqualTypeOf() } }) }) @@ -896,17 +902,18 @@ test('append to empty array', () => { ```typescript import { append, pipe, prepend } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const listOfNumbers = [1, 2, 3] describe('R.append/R.prepend', () => { it('happy', () => { const result = pipe(listOfNumbers, append(4), prepend(0)) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with object', () => { const result = pipe([{ a: 1 }], append({ a: 10 }), prepend({ a: 20 })) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) }) ``` @@ -1003,13 +1010,14 @@ test('descend', () => { ```typescript import { pipe, ascend, sort } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.ascend', () => { const result = pipe( [{a:1}, {a:2}], sort(ascend(x => x.a)) ) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) ``` @@ -1087,6 +1095,7 @@ test('throw', () => { ```typescript import { pipe, assertType } from 'rambda' +import { expectTypeOf, it } from 'vitest' type Book = { title: string @@ -1106,7 +1115,7 @@ it('R.assertType', () => { { title: 'Book1', year: 2020, bookmarkFlag: true }, assertType(isBookToRead), ) - result // $ExpectType BookToRead + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -1226,6 +1235,7 @@ test('when false | early exit', () => { ```typescript import { checkObjectWithSpec, equals } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.checkObjectWithSpec', () => { it('happy', () => { @@ -1240,7 +1250,7 @@ describe('R.checkObjectWithSpec', () => { b: equals('bar'), } const result = checkObjectWithSpec(conditions)(input) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -1348,6 +1358,7 @@ test('happy', () => { ```typescript import { compact, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.compact', () => { let result = pipe( @@ -1363,9 +1374,9 @@ it('R.compact', () => { }) ) - result.a // $ExpectType string[] - result.b // $ExpectType number[] - result.c // $ExpectType { a: number; b: number; c: number; f: boolean; } + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf<{ a: number; b: number; c: number; f: boolean; }>() }) ``` @@ -1447,12 +1458,13 @@ test('with multiple parameters', () => { ```typescript import { complement } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.complement', () => { it('happy', () => { const fn = complement((x: number) => x > 10) const result = fn(1) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -1506,15 +1518,16 @@ export function concat(x) { ```typescript import { concat, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list1 = [1, 2, 3] const list2 = [4, 5, 6] it('R.concat', () => { const result = pipe(list1, concat(list2)) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() const resultString = pipe('foo', concat('list2')) - resultString // $ExpectType string + expectTypeOf(resultString).toEqualTypeOf() }) ``` @@ -1560,6 +1573,7 @@ export function convertToType(x) { ```typescript import { convertToType, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -1567,11 +1581,11 @@ it('R.convertToType', () => { const result = pipe(list, convertToType, x => { - x // $ExpectType string[] + expectTypeOf(x).toEqualTypeOf() return x } ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -1654,13 +1668,14 @@ test('happy', () => { ```typescript import { count, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] const predicate = (x: number) => x > 1 it('R.count', () => { const result = pipe(list, count(predicate)) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -1749,6 +1764,7 @@ test('happy', () => { ```typescript import { countBy, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = ['a', 'A', 'b', 'B', 'c', 'C'] @@ -1757,9 +1773,9 @@ it('R.countBy', () => { list, countBy(x => x.toLowerCase()), ) - result.a // $ExpectType number - result.foo // $ExpectType number - result // $ExpectType { [index: string]: number; } + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.foo).toEqualTypeOf() + expectTypeOf(result).toEqualTypeOf<{ [index: string]: number; }>() }) ``` @@ -1927,12 +1943,13 @@ test('when inputArgument passes initial check', () => { ```typescript import { defaultTo, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.defaultTo', () => { it('happy', () => { const result = pipe('bar' as unknown, defaultTo('foo')) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -2113,6 +2130,7 @@ test('difference with objects', () => { ```typescript import { difference } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.difference', () => { it('happy', () => { @@ -2120,7 +2138,7 @@ describe('R.difference', () => { const list2 = [{ id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }] const result = difference(list1)(list2) - result // $ExpectType { id: number; }[] + expectTypeOf(result).toEqualTypeOf<{ id: number; }[]>() }) }) ``` @@ -2194,10 +2212,11 @@ test('with non-positive count', () => { ```typescript import { drop, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.drop', () => { const result = pipe([1, 2, 3, 4], drop(2)) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -2490,6 +2509,7 @@ test('always false', () => { ```typescript import { dropWhile, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -2500,18 +2520,18 @@ describe('R.dropWhile', () => { dropWhile(x => x > 1), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with index', () => { const result = pipe( list, dropWhile((x, i) => { - i // $ExpectType number + expectTypeOf(i).toEqualTypeOf() return x + i > 2 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -2529,12 +2549,12 @@ duplicateBy(fn: (x: T) => U): (list: T[]) => T[] ```javascript const list = [{a:1}, {a:2}, {a:1}] -const result = R.duplicateBy(x => x, list) +const result = R.duplicateBy(x => x)(list) // => [{a:1}] ``` -Try this R.duplicateBy example in Rambda REPL +Try this R.duplicateBy example in Rambda REPL
@@ -2737,6 +2757,7 @@ test('prop does not exist', () => { ```typescript import { eqProps, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const obj1 = { a: { b: 1 }, c: 2 } const obj2 = { a: { b: 1 }, c: 3 } @@ -2744,7 +2765,7 @@ const obj2 = { a: { b: 1 }, c: 3 } it('R.eqProps', () => { const result = pipe(obj1, eqProps('a', obj2)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -2756,7 +2777,7 @@ it('R.eqProps', () => { ```typescript -equals(x: T, y: T): boolean +equals(x: T): (y: T) => boolean ``` It deeply compares `x` and `y` and returns `true` if they are equal. @@ -2777,7 +2798,6 @@ R.equals( All TypeScript definitions ```typescript -equals(x: T, y: T): boolean; equals(x: T): (y: T) => boolean; ``` @@ -3212,22 +3232,23 @@ test('various examples', () => { ```typescript import { equals } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.equals', () => { it('happy', () => { - const result = equals(4, 1) - result // $ExpectType boolean + const result = equals(4)(1) + expectTypeOf(result).toEqualTypeOf() }) it('with object', () => { const foo = { a: 1 } const bar = { a: 2 } - const result = equals(foo, bar) - result // $ExpectType boolean + const result = equals(foo)(bar) + expectTypeOf(result).toEqualTypeOf() }) it('curried', () => { const result = equals(4)(1) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -3324,6 +3345,7 @@ test('happy', () => { ```typescript import { evolve, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.evolve', () => { const input = { @@ -3339,9 +3361,9 @@ it('R.evolve', () => { foo: x => x + 1, }) ) - result.foo // $ExpectType number - result.baz // $ExpectType number - result.nested.a // $ExpectType number + expectTypeOf(result.foo).toEqualTypeOf() + expectTypeOf(result.baz).toEqualTypeOf() + expectTypeOf(result.nested.a).toEqualTypeOf() }) ``` @@ -3425,16 +3447,17 @@ test('excludes with array', () => { ```typescript import { excludes, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.excludes', () => { it('happy', () => { const list = [{ a: { b: '1' } }, { a: { b: '2' } }, { a: { b: '3' } }] const result = pipe({ a: { b: '1' } }, excludes(list)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('with string', () => { const result = pipe('foo', excludes('bar')) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -3517,6 +3540,7 @@ test('nothing is found', () => { ```typescript import { exists, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -3524,7 +3548,7 @@ describe('R.exists', () => { it('happy', () => { const predicate = (x: number) => x > 2 const result = pipe(list, exists(predicate)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -3631,6 +3655,7 @@ test('using Boolean', () => { ```typescript import { filter, includes, pipe, reject, sort, split, uniq } from 'rambda' +import { describe, expectTypeOf, it, test } from 'vitest' const list = [1, 2, 3] @@ -3639,23 +3664,23 @@ describe('R.filter with array', () => { const result = pipe( list, filter(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with index', () => { const result = pipe( list, filter((x: number, i: number) => { - x // $ExpectType number - i // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(i).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('complex example', () => { @@ -3680,7 +3705,7 @@ describe('R.filter with array', () => { reject(includes(SENTENCE_END_CHARS)), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) it('narrowing type', () => { interface Foo { @@ -3695,7 +3720,7 @@ describe('R.filter with array', () => { return typeof (x as Bar).b === 'string' } const result = pipe(testList, filter(filterBar)) - result // $ExpectType Bar[] + expectTypeOf(result).toEqualTypeOf() }) it('narrowing type - readonly', () => { @@ -3711,13 +3736,13 @@ describe('R.filter with array', () => { return typeof (x as Bar).b === 'string' } const result = pipe(testList, filter(filterBar)) - result // $ExpectType Bar[] + expectTypeOf(result).toEqualTypeOf() }) it('filtering NonNullable - list of objects', () => { const testList = [{ a: 1 }, { a: 2 }, false, { a: 3 }] const result = pipe(testList, filter(Boolean)) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) it('filtering NonNullable - readonly', () => { @@ -3808,6 +3833,7 @@ test('happy', async () => { ```typescript import { filterAsync, pipeAsync } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -3816,11 +3842,11 @@ describe('R.filter with array', () => { const result = await pipeAsync( list, filterAsync(async x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -3903,6 +3929,7 @@ it('happy', () => { ```typescript import { filterMap, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -3911,15 +3938,15 @@ it('R.filterMap - within pipe', () => { list, x => x, filterMap(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return Math.random() > 0.5 ? String(x) : null }), filterMap(x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return Math.random() > 0.5 ? Number(x) : '' }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -4019,17 +4046,18 @@ test('happy', () => { ```typescript import { filterObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.filterObject', () => { it('require explicit type', () => { const result = pipe( { a: 1, b: 2 }, filterObject<{ b: number }>(a => { - a // $ExpectType number + expectTypeOf(a).toEqualTypeOf() return a > 1 }), ) - result.b // $ExpectType number + expectTypeOf(result.b).toEqualTypeOf() }) }) ``` @@ -4126,6 +4154,7 @@ test('with empty list', () => { ```typescript import { find, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -4133,7 +4162,7 @@ describe('R.find', () => { it('happy', () => { const predicate = (x: number) => x > 2 const result = pipe(list, find(predicate)) - result // $ExpectType number | undefined + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -4221,6 +4250,7 @@ test('happy', () => { ```typescript import { findIndex, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -4229,7 +4259,7 @@ it('R.findIndex', () => { list, findIndex(x => x > 2), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -4367,6 +4397,7 @@ test('happy', () => { ```typescript import { findLastIndex, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -4374,7 +4405,7 @@ describe('R.findLastIndex', () => { it('happy', () => { const predicate = (x: number) => x > 2 const result = pipe(list, findLastIndex(predicate)) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -4555,6 +4586,7 @@ test('can compose', () => { ```typescript import { flatMap, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.flatMap', () => { it('happy', () => { @@ -4566,11 +4598,11 @@ describe('R.flatMap', () => { listOfLists, x => x, flatMap(x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return Number(x) + 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -4668,11 +4700,12 @@ test('readme example', () => { ```typescript import { flatten, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('flatten', () => { it('happy', () => { const result = pipe([1, 2, [3, [4]]], flatten) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -4890,11 +4923,12 @@ test('flattenObjectHelper', () => { ```typescript import { flattenObject, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.flattenObject', () => { const result = pipe({ a: { b: 1, c: 2 } }, flattenObject) - result['a.b'] // $ExpectType number - result['a.c'] // $ExpectType number + expectTypeOf(result['a.b']).toEqualTypeOf() + expectTypeOf(result['a.c']).toEqualTypeOf() // @ts-expect-error result['a.foo'] }) @@ -4917,11 +4951,11 @@ It splits `list` according to a provided `groupFn` function and returns an objec const list = [ 'a', 'b', 'aa', 'bb' ] const groupFn = x => x.length -const result = R.groupBy(groupFn, list) +const result = R.groupBy(groupFn)(list) // => { '1': ['a', 'b'], '2': ['aa', 'bb'] } ``` -Try this R.groupBy example in Rambda REPL +Try this R.groupBy example in Rambda REPL
@@ -4998,6 +5032,7 @@ test('with list', () => { ```typescript import { groupBy, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.groupBy', () => { it('happy', () => { @@ -5005,7 +5040,7 @@ describe('R.groupBy', () => { const list = ['foo', 'bar'] const result = pipe(list, groupBy(groupByFn)) - result // $ExpectType Partial> + expectTypeOf(result).toEqualTypeOf>>() }) }) ``` @@ -5095,6 +5130,7 @@ test('head', () => { TypeScript test ```typescript +import { describe, expectTypeOf, it } from 'vitest' import { head, last } from 'rambda' export const mixedList = [1, 'foo', 3, 'bar'] @@ -5107,33 +5143,36 @@ export const string = 'foo' describe('R.head', () => { it('string', () => { - head(string) // $ExpectType string - last(string) // $ExpectType string + expectTypeOf(head(string)).toEqualTypeOf() + expectTypeOf(last(string)).toEqualTypeOf() }) + it('empty string', () => { - head(emptyString) // $ExpectType string - last(emptyString) // $ExpectType string + expectTypeOf(head(emptyString)).toEqualTypeOf() + expectTypeOf(last(emptyString)).toEqualTypeOf() }) + it('array', () => { - head(numberList) // $ExpectType number - head(numberListConst) // $ExpectType 1 + expectTypeOf(head(numberList)).toEqualTypeOf() + expectTypeOf(head(numberListConst)).toEqualTypeOf<1>() - last(numberList) // $ExpectType number - last(numberListConst) // $ExpectType 3 + expectTypeOf(last(numberList)).toEqualTypeOf() + expectTypeOf(last(numberListConst)).toEqualTypeOf<3>() }) + it('empty array', () => { const list = [] as const - head(emptyList) // $ExpectType never - head(list) // $ExpectType undefined - last(emptyList) // $ExpectType never - last(list) // $ExpectType undefined + expectTypeOf(head(emptyList)).toEqualTypeOf() + expectTypeOf(head(list)).toEqualTypeOf() + expectTypeOf(last(emptyList)).toEqualTypeOf() + expectTypeOf(last(list)).toEqualTypeOf() }) it('mixed', () => { - head(mixedList) // $ExpectType string | number - head(mixedListConst) // $ExpectType 1 - last(mixedList) // $ExpectType string | number - last(mixedListConst) // $ExpectType "bar" + expectTypeOf(head(mixedList)).toEqualTypeOf() + expectTypeOf(head(mixedListConst)).toEqualTypeOf<1>() + expectTypeOf(last(mixedList)).toEqualTypeOf() + expectTypeOf(last(mixedListConst)).toEqualTypeOf<'bar'>() }) }) ``` @@ -5247,20 +5286,21 @@ test('with wrong input that does not throw', () => { ```typescript import { pipe , includes} from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.includes', () => { it('happy', () => { const list = [{ a: { b: '1' } }, { a: { b: '2' } }, { a: { b: '3' } }] const result = pipe({ a: { b: '1' } }, includes(list)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('with string', () => { const result = pipe('oo', includes('foo')) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('with array of strings', () => { const result = pipe('1', includes(['1','2','3'])) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -5353,6 +5393,7 @@ test('happy', () => { ```typescript import { pipe, indexBy } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.indexBy', () => { const list = [{id: 'xyz', title: 'A'}, {id: 'abc', title: 'B'}] @@ -5360,8 +5401,8 @@ it('R.indexBy', () => { list, indexBy('id') ) - result.abc // $ExpectType { id: string; title: string; } - result.foo // $ExpectType { id: string; title: string; } + expectTypeOf(result.abc).toEqualTypeOf<{ id: string; title: string; }>() + expectTypeOf(result.foo).toEqualTypeOf<{ id: string; title: string; }>() }) ``` @@ -5455,12 +5496,13 @@ test('list of arrays use R.equals', () => { ```typescript import { indexOf } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.indexOf', () => { it('happy', () => { const list = [{ a: 1 }, { a: 2 }] const result = indexOf({ a: 1 })(list) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -5551,12 +5593,13 @@ test('with string', () => { ```typescript import { map, pipe, init } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.init', () => { it('with string', () => { const result = init('foo') - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with list - using const on short array', () => { const result = pipe( @@ -5564,7 +5607,7 @@ describe('R.init', () => { map(x => x * 2), init, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const on empty array', () => { const result = pipe( @@ -5572,7 +5615,7 @@ describe('R.init', () => { map(x => x * 2), init, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const', () => { const result = pipe( @@ -5580,12 +5623,12 @@ describe('R.init', () => { map(x => x * 2), init, ) - result // $ExpectType [number, number] + expectTypeOf(result).toEqualTypeOf<[number, number]>() }) it('with list - mixed types', () => { const result = init(['foo', 'bar', 1, 2, 3]) - result // $ExpectType (string | number)[] + expectTypeOf(result).toEqualTypeOf<(string | number)[]>() }) }) ``` @@ -5607,12 +5650,12 @@ It generates a new string from `inputWithTags` by replacing all `{{x}}` occurren const inputWithTags = 'foo is {{bar}} even {{a}} more' const templateArguments = {"bar":"BAR", a: 1} -const result = R.interpolate(inputWithTags, templateArguments) +const result = R.interpolate(inputWithTags)(templateArguments) const expected = 'foo is BAR even 1 more' // => `result` is equal to `expected` ``` -Try this R.interpolate example in Rambda REPL +Try this R.interpolate example in Rambda REPL
@@ -5687,6 +5730,7 @@ test('happy', () => { ```typescript import { interpolate } from 'rambda' +import { expectTypeOf, it } from 'vitest' const templateInput = 'foo {{x}} baz' const templateArguments = { x: 'led zeppelin' } @@ -5694,7 +5738,7 @@ const templateArguments = { x: 'led zeppelin' } it('R.interpolate', () => { const result = interpolate(templateInput)(templateArguments) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -5782,6 +5826,7 @@ test('order is the same as in Ramda', () => { ```typescript import { intersection } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list1 = [1, 2, 3] const list2 = [1, 3, 5] @@ -5789,7 +5834,7 @@ const list2 = [1, 3, 5] describe('R.intersection', () => { it('happy', () => { const result = intersection(list1)(list2) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -5926,6 +5971,7 @@ test('readme example', () => { ```typescript import { intersectionWith, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list1 = [1, 2, 3] const list2 = [1, 3, 5] @@ -5936,7 +5982,7 @@ describe('R.intersectionWith', () => { list1, intersectionWith((x, y) => x === y, list2), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -6030,11 +6076,12 @@ test('intersperse', () => { ```typescript import { intersperse } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.intersperse', () => { it('curried', () => { const result = intersperse('|')(['foo', 'bar']) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -6053,10 +6100,10 @@ join(glue: string): (list: T[]) => string It returns a string of all `list` instances joined with a `glue`. ```javascript -R.join('-', [1, 2, 3]) // => '1-2-3' +R.join('-')([1, 2, 3]) // => '1-2-3' ``` -Try this R.join example in Rambda REPL +Try this R.join example in Rambda REPL
@@ -6086,10 +6133,11 @@ export function join(glue) { ```typescript import { join, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.join', () => { const result = pipe([1, 2, 3], join('|')) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -6269,10 +6317,13 @@ test('list of arrays uses R.equals', () => { ```typescript import { lastIndexOf, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.lastIndexOf', () => { - const result = pipe([{ a: 1 }, { a: 2 }, { a: 3 }], lastIndexOf({ a: 2 })) - result // $ExpectType number + it('happy', () => { + const result = pipe([{ a: 1 }, { a: 2 }, { a: 3 }], lastIndexOf({ a: 2 })) + expectTypeOf(result).toEqualTypeOf() + }) }) ``` @@ -6363,6 +6414,7 @@ it('happy', () => { TypeScript test ```typescript +import { expectTypeOf, it } from 'vitest' import { map, pipe } from 'rambda' const list = [1, 2, 3] @@ -6372,11 +6424,11 @@ it('R.map', () => { list, x => x, map(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) it('R.map - index in functor', () => { @@ -6384,26 +6436,26 @@ it('R.map - index in functor', () => { list, x => x, map((x, i) => { - x // $ExpectType number - i // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(i).toEqualTypeOf() return String(x) }), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) it('R.map - without pipe', () => { map(x => { - x // $ExpectType unknown + expectTypeOf(x).toEqualTypeOf() })([1, 2, 3]) }) it('R.map - without pipe but explicitly typed', () => { const result = map(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) })([1, 2, 3]) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -6532,6 +6584,7 @@ test('error', async () => { ```typescript import { mapAsync, pipeAsync, map } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = ['a', 'bc', 'def'] const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) @@ -6541,7 +6594,7 @@ it('R.mapAsync', async () => { list, mapAsync(async x => { await delay(100) - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x.length % 2 ? x.length + 1 : x.length + 10 }), x => x, @@ -6551,7 +6604,7 @@ it('R.mapAsync', async () => { return x + 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -6653,6 +6706,7 @@ it('happy', () => { ```typescript import { mapChain, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -6661,16 +6715,16 @@ it('R.mapChain', () => { list, mapChain( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }, x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, ), ) - result // $ExpectType boolean[] + expectTypeOf(result).toEqualTypeOf() }) it('R.mapChain - with index', () => { @@ -6678,17 +6732,17 @@ it('R.mapChain - with index', () => { list, mapChain( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }, (x, i) => { - i // $ExpectType number - x // $ExpectType string + expectTypeOf(i).toEqualTypeOf() + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, ), ) - result // $ExpectType boolean[] + expectTypeOf(result).toEqualTypeOf() }) it('R.mapChain - 3 functions', () => { @@ -6697,20 +6751,20 @@ it('R.mapChain - 3 functions', () => { x => x, mapChain( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }, x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, x => { - x // $ExpectType boolean + expectTypeOf(x).toEqualTypeOf() return x ? 'foo' : 'bar' }, ), ) - result // $ExpectType ("foo" | "bar")[] + expectTypeOf(result).toEqualTypeOf<("foo" | "bar")[]>() }) ``` @@ -6791,6 +6845,7 @@ test('happy', () => { ```typescript import { mapKeys, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.mapKeys', () => { const result = pipe( @@ -6798,7 +6853,7 @@ it('R.mapKeys', () => { mapKeys((prop, x) => `${prop}-${x}`), mapKeys(prop => `${prop}-${prop}`), ) - result // $ExpectType Record + expectTypeOf(result).toEqualTypeOf>() }) ``` @@ -6894,54 +6949,55 @@ it('happy', () => { ```typescript import { mapObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.mapObject', () => { it('iterable with one arguments', () => { const result = pipe( { a: 1 }, mapObject(a => { - a // $ExpectType number + expectTypeOf(a).toEqualTypeOf() return `${a}` }), ) - result // $ExpectType { a: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; }>() }) it('iterable with one arguments', () => { const result = pipe( { a: [1,2,3], b: 'foo' }, mapObject(a => { - a // $ExpectType string | number[] + expectTypeOf(a).toEqualTypeOf() return typeof a as string }), ) - result // $ExpectType { a: string; b: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; b: string; }>() }) it('iterable with two arguments', () => { const result = pipe( { a: 1, b: 'foo' }, mapObject((a, b) => { - a // $ExpectType string | number - b // $ExpectType "a" | "b" + expectTypeOf(a).toEqualTypeOf() + expectTypeOf(b).toEqualTypeOf<"a" | "b">() return `${a}` }), ) - result // $ExpectType { a: string; b: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; b: string; }>() }) it('iterable with three arguments', () => { const result = pipe( { a: 1, b: 'foo' }, mapObject((a, b, c) => { - a // $ExpectType string | number - b // $ExpectType "a" | "b" - c // $ExpectType { a: number; b: string; } + expectTypeOf(a).toEqualTypeOf() + expectTypeOf(b).toEqualTypeOf<"a" | "b">() + expectTypeOf(c).toEqualTypeOf<{ a: number; b: string; }>() return `${a}` }), ) - result // $ExpectType { a: string; b: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; b: string; }>() }) }) ``` @@ -7034,13 +7090,14 @@ test('happy', async () => { ```typescript import { mapObjectAsync, pipeAsync } from 'rambda' import { delay } from 'rambdax' +import { expectTypeOf, it } from 'vitest' it('R.mapObjectAsync', async () => { const result = await pipeAsync( { a: 'foo', b: 'bar' }, mapObjectAsync(async x => { await delay(100) - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x.length % 2 ? x.length + 1 : x.length + 10 }), x => x, @@ -7049,8 +7106,8 @@ it('R.mapObjectAsync', async () => { return x + 1 }), ) - result.a // $ExpectType number - result.b // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) ``` @@ -7263,13 +7320,14 @@ it('happy', () => { ```typescript import { map, mapPropObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.mapPropObject', () => { it('iterable with one arguments', () => { const result = pipe( { a: [1,2,3], b: 'foo' }, mapPropObject('a', x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return { a: x, flag: x > 2, @@ -7277,21 +7335,21 @@ describe('R.mapPropObject', () => { }), ) - result.a // $ExpectType { a: number; flag: boolean; }[] - result.b // $ExpectType string + expectTypeOf(result.a).toEqualTypeOf<{ a: number; flag: boolean; }[]>() + expectTypeOf(result.b).toEqualTypeOf() }) it('iterable with two arguments', () => { const result = pipe( { a: [1,2,3], b: 'foo' }, mapPropObject('a', (x, list) => { - x // $ExpectType number - list // $ExpectType number[] + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(list).toEqualTypeOf() return list.length }), ) - result.a // $ExpectType number[] - result.b // $ExpectType string + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) it('more complex example', () => { @@ -7299,14 +7357,14 @@ describe('R.mapPropObject', () => { [{a:[true, false, true], b: 'foo'}], map( mapPropObject( 'a',(a) => { - a // $ExpectType boolean + expectTypeOf(a).toEqualTypeOf() return {a, b: 2} }) ) ) - result[0].a[0].a // $ExpectType boolean - result[0].a[0].b // $ExpectType number + expectTypeOf(result[0].a[0].a).toEqualTypeOf() + expectTypeOf(result[0].a[0].b).toEqualTypeOf() }) }) ``` @@ -7326,13 +7384,13 @@ Curried version of `String.prototype.match` which returns empty array, when ther ```javascript const result = [ - R.match('a', 'foo'), - R.match(/([a-z]a)/g, 'bananas') + R.match('a')('foo'), + R.match(/([a-z]a)/g)('bananas') ] // => [[], ['ba', 'na', 'na']] ``` -Try this R.match example in Rambda REPL +Try this R.match example in Rambda REPL
@@ -7388,13 +7446,14 @@ test('with string', () => { ```typescript import { match } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const str = 'foo bar' describe('R.match', () => { it('happy', () => { const result = match(/foo/)(str) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -7415,10 +7474,10 @@ It returns the greater value between `x` and `y` according to `compareFn` functi ```javascript const compareFn = Math.abs -R.maxBy(compareFn, 5, -7) // => -7 +R.maxBy(compareFn, 5)(-7) // => -7 ``` -Try this R.maxBy example in Rambda REPL +Try this R.maxBy example in Rambda REPL
@@ -7463,6 +7522,7 @@ test('happy', () => { ```typescript import { maxBy, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const first = 1 const second = 2 @@ -7472,7 +7532,7 @@ it('R.maxBy', () => { second, maxBy(x => (x % 2 === 0 ? 1 : -1), first), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -7484,17 +7544,17 @@ it('R.maxBy', () => { ```typescript -merge(source: Source): (data: T) => Merge +merge(source: Source): (newProps: T) => Merge ``` -It creates a copy of `target` object with overwritten `newProps` properties. +It creates a copy of `source` object with overwritten `newProps` properties.
All TypeScript definitions ```typescript -merge(source: Source): (data: T) => Merge; +merge(source: Source): (newProps: T) => Merge; ```
@@ -7540,11 +7600,12 @@ test('happy', () => { ```typescript import { merge, mergeTypes, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.merge', () => { const result = pipe({ foo: 1 }, merge({ bar: 2 }), mergeTypes) - result.foo // $ExpectType number - result.bar // $ExpectType number + expectTypeOf(result.foo).toEqualTypeOf() + expectTypeOf(result.bar).toEqualTypeOf() }) ``` @@ -7552,6 +7613,96 @@ it('R.merge', () => { [![---------------](https://raw.githubusercontent.com/selfrefactor/rambda/master/files/separator.png)](#merge) +### mergeDeep + +```typescript + +mergeDeep(source: Source): (newProps: T) => Merge +``` + +
+ +All TypeScript definitions + +```typescript +mergeDeep(source: Source): (newProps: T) => Merge; +``` + +
+ +
+ +R.mergeDeep source + +```javascript +import { type } from './type.js' + +const isObject = (x) => type(x) === 'Object' + +function mergeDeepFn(source, objectWithNewProps) { + return [source, objectWithNewProps].reduce((prev, obj) => { + Object.keys(obj).forEach((key) => { + const pVal = prev[key] + const oVal = obj[key] + + if (isObject(pVal) && isObject(oVal)) { + prev[key] = mergeDeepFn(pVal, oVal) + } else { + prev[key] = oVal + } + }) + + return prev + }, {}) +} + +export function mergeDeep(source) { + return (objectWithNewProps) => mergeDeepFn(source, objectWithNewProps) +} +``` + +
+ +
+ +Tests + +```javascript +import { mergeDeep } from './mergeDeep.js' + +test('happy', () => { + const source = { + a: 1, + b: [1, 2], + c: { + d: 1, + f: 2, + e: [1, 2], + h: [1, 2], + }, + } + const objectWithNewProps = { + b: [3], + c: { + f: 3, + s: 3, + e: [3], + }, + q: 3, + } + expect(mergeDeep(source)(objectWithNewProps)).toEqual({ + a: 1, + b: [3], + c: { d: 1, f: 3, e: [3], h: [1, 2], s: 3 }, + q: 3, + }) +}) +``` + +
+ +[![---------------](https://raw.githubusercontent.com/selfrefactor/rambda/master/files/separator.png)](#mergeDeep) + ### mergeTypes ```typescript @@ -7662,12 +7813,13 @@ test('middle', () => { ```typescript import { map, middle, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.middle', () => { it('with string', () => { const result = middle('foo') - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with list - using const on short array', () => { const result = pipe( @@ -7675,7 +7827,7 @@ describe('R.middle', () => { map(x => x * 2), middle, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const on empty array', () => { const result = pipe( @@ -7683,7 +7835,7 @@ describe('R.middle', () => { map(x => x * 2), middle, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const', () => { const result = pipe( @@ -7691,12 +7843,12 @@ describe('R.middle', () => { map(x => x * 2), middle, ) - result // $ExpectType [number, number] + expectTypeOf(result).toEqualTypeOf<[number, number]>() }) it('with list - mixed types', () => { const result = middle(['foo', 'bar', 1, 2, 3]) - result // $ExpectType (string | number)[] + expectTypeOf(result).toEqualTypeOf<(string | number)[]>() }) }) ``` @@ -7717,10 +7869,10 @@ It returns the lesser value between `x` and `y` according to `compareFn` functio ```javascript const compareFn = Math.abs -R.minBy(compareFn, -5, 2) // => -5 +R.minBy(compareFn, -5)(2) // => -5 ``` -Try this R.minBy example in Rambda REPL +Try this R.minBy example in Rambda REPL
@@ -7854,11 +8006,11 @@ modifyPath(path: [], fn: (value: U) => T): (obj: U) => T It changes a property of object on the base of provided path and transformer function. ```javascript -const result = R.modifyPath('a.b.c', x=> x+1, {a:{b: {c:1}}}) +const result = R.modifyPath('a.b.c', x=> x+1)({a:{b: {c:1}}}) // => {a:{b: {c:2}}} ``` -Try this R.modifyPath example in Rambda REPL +Try this R.modifyPath example in Rambda REPL
@@ -7955,6 +8107,7 @@ test('works only on existing paths', () => { ```typescript import { modifyPath, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { a: { b: { c: 1 } } } @@ -7964,14 +8117,14 @@ describe('R.modifyPath', () => { obj, modifyPath(['a', 'b', 'c'], (x: number) => String(x)), ) - result.a.b.c // $ExpectType string + expectTypeOf(result.a.b.c).toEqualTypeOf() }) it('string path', () => { const result = pipe( obj, modifyPath('a.b.c', (x: number) => String(x)), ) - result.a.b.c // $ExpectType string + expectTypeOf(result.a.b.c).toEqualTypeOf() }) }) ``` @@ -8081,13 +8234,14 @@ test('adjust if `array` at the given key with the `transformation` function', () ```typescript import { modifyProp, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.modify', () => { const result = pipe( { a: 1, b: 2, c: { d: 3 } }, modifyProp('a', val => val + 1), ) - result // $ExpectType { a: number; b: number; c: { d: number; }; } + expectTypeOf(result).toEqualTypeOf<{ a: number; b: number; c: { d: number; }; }>() pipe( { a: 1, b: 2, c: { d: 3 } }, @@ -8182,6 +8336,7 @@ test('when false', () => { ```typescript import { none, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.none', () => { it('happy', () => { @@ -8189,7 +8344,7 @@ describe('R.none', () => { [1, 2, 3], none(x => x > 0), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -8313,15 +8468,16 @@ test('with wrong input', () => { ```typescript import { objectIncludes, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.objectIncludes', () => { it('happy', () => { const result = pipe({ a: 1, b: 2, c: { d: 3 } }, objectIncludes({ a: 2 })) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('nested', () => { const result = pipe({ a: 1, b: 2, c: { d: 3 } }, objectIncludes({ c: { d: 3 } })) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -8388,13 +8544,14 @@ test('happy', () => { ```typescript import { objOf, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const key = 'foo' const value = 42 it('R.objOf', () => { const result = pipe(value, objOf(key)) - result.foo // $ExpectType number + expectTypeOf(result.foo).toEqualTypeOf() // @ts-expect-error result.bar }) @@ -8424,13 +8581,13 @@ const propsToOmit = 'a,c,d' const propsToOmitList = ['a', 'c', 'd'] const result = [ - R.omit(propsToOmit, obj), - R.omit(propsToOmitList, obj) + R.omit(propsToOmit)(obj), + R.omit(propsToOmitList)(obj) ] // => [{b: 2}, {b: 2}] ``` -Try this R.omit example in Rambda REPL +Try this R.omit example in Rambda REPL
@@ -8532,17 +8689,18 @@ test('with array as condition', () => { ```typescript import { omit, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: 'foo', b: 2, c: 3 } describe('R.omit', () => { it('with string as input', () => { const result = pipe(input, omit('a,b')) - result.c // $ExpectType number + expectTypeOf(result.c).toEqualTypeOf() }) it('with array as input', () => { const result = pipe(input, omit(['a', 'b'])) - result.c // $ExpectType number + expectTypeOf(result.c).toEqualTypeOf() }) }) ``` @@ -8639,6 +8797,7 @@ test('happy', () => { ```typescript import { partition, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.partition', () => { it('happy', () => { @@ -8648,14 +8807,14 @@ describe('R.partition', () => { const list = [1, 2, 3, 4] const result = pipe(list, partition(predicate)) - result // $ExpectType [number[], number[]] + expectTypeOf(result).toEqualTypeOf<[number[], number[]]>() }) it('with simple object', () => { const result = pipe( [{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }], partition(x => x.a > 2), ) - result // $ExpectType [{ a: number; }[], { a: number; }[]] + expectTypeOf(result).toEqualTypeOf<[{ a: number; }[], { a: number; }[]]>() }) it('with complex object', () => { interface Foo { @@ -8667,7 +8826,7 @@ describe('R.partition', () => { const list1: (Foo | Bar)[] = [{ a: 1 }, { b: 2 }, { a: 3 }, { b: 4 }] const filterFoo = (x: Foo | Bar): x is Foo => 'a' in x const result = pipe(list1, partition(filterFoo)) - result // $ExpectType [Foo[], Bar[]] + expectTypeOf(result).toEqualTypeOf<[Foo[], Bar[]]>() }) }) ``` @@ -8782,6 +8941,7 @@ test('happy', () => { ```typescript import { partitionObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.partition', () => { it('happy', () => { @@ -8789,7 +8949,7 @@ describe('R.partition', () => { { a: 1, b: 2 }, partitionObject((x, prop) => x> 1 || prop === 'c'), ) - result // $ExpectType [Record, Record] + expectTypeOf(result).toEqualTypeOf<[Record, Record]>() }) it('with complex object', () => { interface Foo { @@ -8806,7 +8966,7 @@ describe('R.partition', () => { } const filterFoo = (x: Foo | Bar): x is Foo => 'a' in x const result = pipe(obj, partitionObject(filterFoo)) - result // $ExpectType [Record, Record] + expectTypeOf(result).toEqualTypeOf<[Record, Record]>() }) }) ``` @@ -8834,14 +8994,14 @@ const pathToSearch = 'a.b' const pathToSearchList = ['a', 'b'] const result = [ - R.path(pathToSearch, obj), - R.path(pathToSearchList, obj), - R.path('a.b.c.d', obj) + R.path(pathToSearch)(obj), + R.path(pathToSearchList)(obj), + R.path('a.b.c.d')(obj) ] // => [1, 1, undefined] ``` -Try this R.path example in Rambda REPL +Try this R.path example in Rambda REPL
@@ -8957,6 +9117,7 @@ test('null is not a valid path', () => { ```typescript import { path, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: { b: { c: true } } } @@ -8964,12 +9125,12 @@ describe('R.path with string as path', () => { it('happy', () => { const result = pipe(input, path(['a', 'b'])) const resultStringInput = pipe(input, path('a.b.c')) - result.c // $ExpectType boolean - resultStringInput // $ExpectType boolean + expectTypeOf(result.c).toEqualTypeOf() + expectTypeOf(resultStringInput).toEqualTypeOf() }) it('happy', () => { const result = pipe([1, 2, 3], path([1])) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -9071,6 +9232,7 @@ it('returns false otherwise', () => { ```typescript import { pathSatisfies, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: { b: { c: 'bar' } } } @@ -9080,7 +9242,7 @@ describe('R.pathSatisfies', () => { input, pathSatisfies( x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, ['a', 'b', 'c'], @@ -9089,12 +9251,12 @@ describe('R.pathSatisfies', () => { const resultStringInput = pipe( input, pathSatisfies(x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, 'a.b.c'), ) - result // $ExpectType boolean - resultStringInput // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() + expectTypeOf(resultStringInput).toEqualTypeOf() }) }) ``` @@ -9311,19 +9473,20 @@ test('props to pick is an array', () => { ```typescript import { pick, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: 'foo', c: 3 } describe('R.pick', () => { it('with string as input', () => { const result = pipe(input, pick('a,c')) - result.a // $ExpectType string - result.c // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) it('with array as input', () => { const result = pipe(input, pick(['a', 'c'])) - result.a // $ExpectType string - result.c // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) it('throws error if some keys do not exist', () => { // @ts-expect-error @@ -9526,6 +9689,7 @@ import { split, union, } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' type IsNotNever = [T] extends [never] ? false : true type Expect = T @@ -9622,11 +9786,11 @@ describe('real use cases - books', () => { drop(1), // without converting to `as FamousBook`, endsWith will pick up `Book` as type tapFn(union([awardedBrothersKaramazov]), (a, b) => { - a // $ExpectType Book[] - b // $ExpectType Book[] + expectTypeOf(a).toEqualTypeOf() + expectTypeOf(b).toEqualTypeOf() }), find(x => { - x // $ExpectType Book + expectTypeOf(x).toEqualTypeOf() return x.title === 'Brothers Karamazov' }), x => [x], @@ -9650,7 +9814,7 @@ describe('real use cases - books', () => { simplify, pick('year'), ) - const result = getResult(zaratustra) + const result = getResult(awardedZaratustraToRead as BaseBook) const final: Expect> = true }) it('case 3', () => { @@ -9660,7 +9824,7 @@ describe('real use cases - books', () => { 3,The Third,2018` const result = pipe(tableData, split('\n'), map(split(','))) - result // $ExpectType string[][] + expectTypeOf(result).toEqualTypeOf() }) }) @@ -9677,9 +9841,9 @@ it('R.pipe', () => { x => ({ ...x, c: x.b + 'bar' }), ) - result.a // $ExpectType number - result.b // $ExpectType string - result.c // $ExpectType string + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) ``` @@ -9783,23 +9947,24 @@ test('happy', async () => { ```typescript import { pipeAsync } from 'rambda' import { delay } from 'rambdax' +import { describe, expectTypeOf, it } from 'vitest' describe('R.pipeAsync', () => { it('happy', async () => { const result = await pipeAsync( 4, async x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() await delay(100) return x + 1 }, x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return Promise.resolve([x]) }, ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -9892,6 +10057,7 @@ test('with undefined', () => { ```typescript import { pipe, pluck } from 'rambda'; +import { expectTypeOf, it } from 'vitest' it("R.pluck", () => { const input = [ @@ -9899,7 +10065,7 @@ it("R.pluck", () => { { a: 2, b: "bar" }, ]; const result = pipe(input, pluck("b")); - result; // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }); it("R.pluck without R.pipe", () => { @@ -9912,7 +10078,7 @@ it("R.pluck without R.pipe", () => { }, ]; const sentences = pluck("text")(content); - sentences; // $ExpectType string[] + expectTypeOf(sentences).toEqualTypeOf() }); ``` @@ -9924,24 +10090,23 @@ it("R.pluck without R.pipe", () => { ```typescript -prepend(xToPrepend: T, iterable: T[]): T[] +prepend(xToPrepend: T): (iterable: T[]) => T[] ``` It adds element `x` at the beginning of `list`. ```javascript -const result = R.prepend('foo', ['bar', 'baz']) +const result = R.prepend('foo')(['bar', 'baz']) // => ['foo', 'bar', 'baz'] ``` -Try this R.prepend example in Rambda REPL +Try this R.prepend example in Rambda REPL
All TypeScript definitions ```typescript -prepend(xToPrepend: T, iterable: T[]): T[]; prepend(xToPrepend: T): (iterable: T[]) => T[]; ``` @@ -10006,7 +10171,6 @@ const result = [ ```typescript prop(prop: K): (obj: U) => U[K]; -prop(prop: K, obj: U): U[K]; ```
@@ -10029,17 +10193,18 @@ export function prop(searchProperty) { ```typescript import { map, pipe, prop } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.prop', () => { it('happy', () => { const result = pipe({ a: 1 }, prop('a')) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) it('alike R.pluck', () => { const result = pipe([{ a: 1 }, { a: 2 }], map(prop('a'))) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -10052,8 +10217,7 @@ describe('R.prop', () => { ```typescript -propEq(val: T): { - (name: K): (obj: Record) => boolean +propEq(valueToMatch: T, propToFind: K): (obj: Record) => boolean ``` It returns true if `obj` has property `propToFind` and its value is equal to `valueToMatch`. @@ -10066,26 +10230,20 @@ const propToFind = 'foo' const valueToMatch = 'bar' const result = [ - R.propEq(propToFind, valueToMatch)(obj), - R.propEq(propToFind, valueToMatch)(secondObj) + R.propEq(valueToMatch, propToFind)(obj), + R.propEq(valueToMatch, propToFind)(secondObj) ] // => [true, false] ``` -Try this R.propEq example in Rambda REPL +Try this R.propEq example in Rambda REPL
All TypeScript definitions ```typescript -propEq(val: T): { - (name: K): (obj: Record) => boolean; - (name: K, obj: Record): boolean; -}; -propEq(val: T, name: K): (obj: Record) => boolean; -... -... +propEq(valueToMatch: T, propToFind: K): (obj: Record) => boolean; ```
@@ -10135,6 +10293,26 @@ test('returns false if called with a null or undefined object', () => {
+
+ +TypeScript test + +```typescript +import { pipe, propEq } from 'rambda' +import { expectTypeOf, it } from 'vitest' + +const obj = { foo: 'bar' } +const valueToMatch = 'bar' +const propToFind = 'foo' + +it('R.propEq', () => { + const result = pipe(obj, propEq(valueToMatch, propToFind)) + expectTypeOf(result).toEqualTypeOf() +}) +``` + +
+ [![---------------](https://raw.githubusercontent.com/selfrefactor/rambda/master/files/separator.png)](#propEq) ### propOr @@ -10152,13 +10330,13 @@ const defaultValue = 'DEFAULT_VALUE' const property = 'a' const result = [ - R.propOr(defaultValue, property)(obj), - R.propOr(defaultValue, 'foo')(obj) + R.propOr(property, defaultValue)(obj), + R.propOr('foo', defaultValue)(obj) ] // => [1, 'DEFAULT_VALUE'] ``` -Try this R.propOr example in Rambda REPL +Try this R.propOr example in Rambda REPL
@@ -10213,6 +10391,7 @@ test('propOr', () => { ```typescript import { propOr } from 'rambda' +import { expectTypeOf, it } from 'vitest' const obj = { foo: 'bar' } const property = 'foo' @@ -10220,7 +10399,7 @@ const fallback = 'fallback' it('R.propOr', () => { const result = propOr(property, fallback)(obj) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -10242,11 +10421,11 @@ const obj = {a: {b:1}} const property = 'a' const predicate = x => x?.b === 1 -const result = R.propSatisfies(predicate, property, obj) +const result = R.propSatisfies(predicate, property)(obj) // => true ``` -Try this R.propSatisfies example in Rambda REPL +Try this R.propSatisfies example in Rambda REPL
@@ -10296,6 +10475,7 @@ test('when false', () => { ```typescript import { pipe, propSatisfies } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { a: 1 } @@ -10304,12 +10484,12 @@ describe('R.propSatisfies', () => { const result = pipe( obj, propSatisfies(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 0 }, 'a'), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -10403,7 +10583,8 @@ range(startInclusive: number, endInclusive: number) : number[]; export function range(a, b) { const start = b === undefined ? 0 : a const end = b === undefined ? a : b - if (end<= start) { + if (end === start) return [start] + if (end < start) { return [] } const len = end - start @@ -10422,9 +10603,12 @@ import { range } from './range.js' test('happy', () => { expect(range(5)).toEqual([0, 1, 2, 3, 4, 5]) - expect(range(3,5)).toEqual([3, 4, 5]) - expect(range(5,3)).toEqual([]) - expect(range(0)).toEqual([]) + expect(range(3, 5)).toEqual([3, 4, 5]) + expect(range(5, 3)).toEqual([]) + expect(range(5, 5)).toEqual([5]) + expect(range(0)).toEqual([0]) + expect(range(1)).toEqual([0, 1]) + expect(range(2)).toEqual([0, 1, 2]) }) ``` @@ -10436,12 +10620,13 @@ test('happy', () => { ```typescript import { range } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.range', () => { it('curried', () => { const result = [range(1, 4), range(1)] - result // $ExpectType number[][] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -10477,7 +10662,8 @@ rangeDescending(endInclusive: number) : number[]; ```javascript export function rangeDescending(start, b) { const end = b === undefined ? 0 : b - if (start <= end) { + if (start === end) return [start] + if (start < end) { return [] } const len = start - end @@ -10496,9 +10682,12 @@ import { rangeDescending } from './rangeDescending.js' test('happy', () => { expect(rangeDescending(5)).toEqual([5, 4, 3, 2, 1, 0]) - expect(rangeDescending(7,3)).toEqual([7, 6, 5, 4,3]) - expect(rangeDescending(5, 7)).toEqual([]) - expect(rangeDescending(5, 5)).toEqual([]) + expect(rangeDescending(7, 3)).toEqual([7, 6, 5, 4, 3]) + expect(rangeDescending(0)).toEqual([0]) + expect(rangeDescending(1)).toEqual([1, 0]) + expect(rangeDescending(2)).toEqual([2, 1, 0]) + expect(rangeDescending(5, 7)).toEqual([]) + expect(rangeDescending(5, 5)).toEqual([5]) }) ``` @@ -10520,11 +10709,11 @@ const list = [1, 2, 3] const initialValue = 10 const reducer = (prev, current) => prev * current -const result = R.reduce(reducer, initialValue, list) +const result = R.reduce(reducer, initialValue)(list) // => 60 ``` -Try this R.reduce example in Rambda REPL +Try this R.reduce example in Rambda REPL
@@ -10608,13 +10797,14 @@ test('returns the accumulator for an undefined list', () => { ```typescript import { pipe, reduce } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.reduce', () => { const result = pipe( [1, 2, 3], reduce((acc, val) => acc + val, 10), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -10701,6 +10891,7 @@ test('happy', () => { ```typescript import { reject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -10709,22 +10900,22 @@ describe('R.reject with array', () => { const result = pipe( list, reject(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with index', () => { const result = pipe( list, reject((x: number, i: number) => { - x // $ExpectType number - i // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(i).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('narrowing type', () => { interface Foo { @@ -10745,7 +10936,7 @@ describe('R.reject with array', () => { testList, reject(rejectBar), ) - result // $ExpectType (Foo | Baz)[] + expectTypeOf(result).toEqualTypeOf<(Foo | Baz)[]>() }) it('narrowing type - readonly', () => { interface Foo { @@ -10766,17 +10957,17 @@ describe('R.reject with array', () => { testList, reject(rejectBar), ) - result // $ExpectType (Foo | Baz)[] + expectTypeOf(result).toEqualTypeOf<(Foo | Baz)[]>() }) it('rejecting NonNullable', () => { const testList = [1, 2, null, undefined, 3] const result = pipe(testList, reject(Boolean)) - result // $ExpectType (null | undefined)[] + expectTypeOf(result).toEqualTypeOf<(null | undefined)[]>() }) it('rejecting NonNullable - readonly', () => { const testList = [1, 2, null, undefined, 3] as const const result = pipe(testList, reject(Boolean)) - result // $ExpectType (null | undefined)[] + expectTypeOf(result).toEqualTypeOf<(null | undefined)[]>() // @ts-expect-error result.includes(1) }) @@ -10879,17 +11070,18 @@ test('happy', () => { ```typescript import { filterObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.filterObject', () => { it('require explicit type', () => { const result = pipe( { a: 1, b: 2 }, filterObject<{ b: number }>(a => { - a // $ExpectType number + expectTypeOf(a).toEqualTypeOf() return a > 1 }), ) - result.b // $ExpectType number + expectTypeOf(result.b).toEqualTypeOf() }) }) ``` @@ -10960,6 +11152,7 @@ test('happy', () => { ```typescript import { replace } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const str = 'foo bar foo' const replacer = 'bar' @@ -10968,12 +11161,12 @@ describe('R.replace', () => { it('happy', () => { const result = replace(/foo/g, replacer)(str) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with string as search pattern', () => { const result = replace('foo', replacer)(str) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -11056,6 +11249,7 @@ test('happy', () => { ```typescript import { pipe, replaceAll } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const str = 'foo bar foo' const replacer = 'bar' @@ -11065,7 +11259,7 @@ describe('R.replaceAll', () => { it('happy', () => { const result = pipe(str, replaceAll(patterns, replacer)) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -11123,13 +11317,14 @@ export function shuffle(listInput) { ```typescript import { shuffle } from 'rambdax' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3, 4, 5] describe('R.shuffle', () => { it('happy', () => { const result = shuffle(list) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -11157,7 +11352,7 @@ const sortFn = (x, y) => { return x.a > y.a ? 1 : -1 } -const result = R.sort(sortFn, list) +const result = R.sort(sortFn)(list) const expected = [ {a: 1}, {a: 2}, @@ -11166,7 +11361,7 @@ const expected = [ // => `result` is equal to `expected` ``` -Try this R.sort example in Rambda REPL +Try this R.sort example in Rambda REPL
@@ -11221,6 +11416,7 @@ test("it doesn't mutate", () => { ```typescript import { pipe, sort } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [3, 0, 5, 2, 1] @@ -11229,7 +11425,7 @@ describe('R.sort', () => { const result = sort((a, b) => { return a > b ? 1 : -1 })(list) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('within pipe', () => { const result = pipe( @@ -11238,7 +11434,7 @@ describe('R.sort', () => { return a > b ? 1 : -1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -11350,6 +11546,7 @@ test('with non-existing path', () => { ```typescript import { pipe, sortBy } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.sortBy', () => { it('passing type to sort function and list', () => { @@ -11360,7 +11557,7 @@ describe('R.sortBy', () => { }), ) - result[0].a // $ExpectType number + expectTypeOf(result[0].a).toEqualTypeOf() }) }) ``` @@ -11537,17 +11734,18 @@ test('when path is not found in any item', () => { ```typescript import { pipe, sortByPath } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input= [{ a: { b: 2 } }, { a: { b: 1 } }] describe('R.sortByPath', () => { it('with string as path', () => { const result = pipe(input, sortByPath('a.b')) - result[0].a.b // $ExpectType number + expectTypeOf(result[0].a.b).toEqualTypeOf() }) it('with list of strings as path', () => { const result = pipe(input, sortByPath(['a', 'b'])) - result[0].a.b // $ExpectType number + expectTypeOf(result[0].a.b).toEqualTypeOf() }) it('with non-existent path', () => { // @ts-expect-error @@ -11745,6 +11943,7 @@ test('happy', () => { ```typescript import { sortObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { c: 1, @@ -11757,27 +11956,27 @@ describe('R.sortObject', () => { const result = pipe( obj, sortObject((propA, propB, valueA, valueB) => { - propA // $ExpectType string - propB // $ExpectType string - valueA // $ExpectType number - valueB // $ExpectType number + expectTypeOf(propA).toEqualTypeOf() + expectTypeOf(propB).toEqualTypeOf() + expectTypeOf(valueA).toEqualTypeOf() + expectTypeOf(valueB).toEqualTypeOf() return propA > propB ? -1 : 1 }), ) - result // $ExpectType { c: number; a: number; b: number; } + expectTypeOf(result).toEqualTypeOf<{ c: number; a: number; b: number; }>() }) it('predicate with only property arguments', () => { const result = pipe( obj, sortObject((propA, propB) => { - propA // $ExpectType string - propB // $ExpectType string + expectTypeOf(propA).toEqualTypeOf() + expectTypeOf(propB).toEqualTypeOf() return propA > propB ? -1 : 1 }), ) - result // $ExpectType { c: number; a: number; b: number; } + expectTypeOf(result).toEqualTypeOf<{ c: number; a: number; b: number; }>() }) }) ``` @@ -12054,7 +12253,7 @@ splitEvery(sliceLength: number): (input: T[]) => (T[])[]; R.splitEvery source ```javascript -export function splitEvery(sliceLength) { +export function splitEvery(sliceLength, strict = false) { return list => { if (sliceLength < 1) { throw new Error('First argument to splitEvery must be a positive integer') @@ -12064,6 +12263,7 @@ export function splitEvery(sliceLength) { let counter = 0 while (counter < list.length) { + if (strict && counter + sliceLength > list.length) break; willReturn.push(list.slice(counter, (counter += sliceLength))) } @@ -12094,13 +12294,14 @@ test('happy', () => { ```typescript import { pipe, splitEvery } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3, 4, 5, 6, 7] describe('R.splitEvery', () => { it('happy', () => { const result = pipe(list, splitEvery(3)) - result // $ExpectType number[][] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -12173,14 +12374,14 @@ switcher(valueToMatch: T): Switchem ```javascript const list = [1, 2, 3] -const result = switcher(list.length) +const result = R.switcher(list.length) .is(x => x < 2, 4) .is(x => x < 4, 6) .default(7) // => 6 ``` -Try this R.switcher example in Rambda REPL +Try this R.switcher example in Rambda REPL
@@ -12373,6 +12574,7 @@ test('fallback to default input when no matches', () => { ```typescript import { switcher } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.switcher', () => { it('no transformation', () => { @@ -12383,7 +12585,7 @@ describe('R.switcher', () => { .is(x => x < 4, 6) .default(7) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) it('with transformation', () => { const list = [1, 2, 3] @@ -12394,7 +12596,7 @@ describe('R.switcher', () => { .is(x => x < 4, 'secondStage') .default('thirdStage') - result // $ExpectType Stage + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -12486,6 +12688,7 @@ test('symmetricDifference with objects', () => { ```typescript import { symmetricDifference } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.symmetricDifference', () => { it('happy', () => { @@ -12493,7 +12696,7 @@ describe('R.symmetricDifference', () => { const list2 = [{ id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }] const result = symmetricDifference(list1)(list2) - result // $ExpectType { id: number; }[] + expectTypeOf(result).toEqualTypeOf<{ id: number; }[]>() }) }) ``` @@ -12577,12 +12780,13 @@ test('tail', () => { ```typescript import { map, pipe, tail } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.tail', () => { it('with string', () => { const result = tail('foo') - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with list - using const on short array', () => { const result = pipe( @@ -12590,7 +12794,7 @@ describe('R.tail', () => { map(x => x * 2), tail, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const on empty array', () => { const result = pipe( @@ -12598,7 +12802,7 @@ describe('R.tail', () => { map(x => x * 2), tail, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const', () => { const result = pipe( @@ -12606,12 +12810,12 @@ describe('R.tail', () => { map(x => x * 2), tail, ) - result // $ExpectType [number, number] + expectTypeOf(result).toEqualTypeOf<[number, number]>() }) it('with list - mixed types', () => { const result = tail(['foo', 'bar', 1, 2, 3]) - result // $ExpectType (string | number)[] + expectTypeOf(result).toEqualTypeOf<(string | number)[]>() }) }) ``` @@ -12635,12 +12839,12 @@ const howMany = 2 const result = [ R.take(howMany)([1, 2, 3]), - R.take(howMany, 'foobar'), + R.take(howMany)('foobar'), ] // => [[1, 2], 'fo'] ``` -Try this R.take example in Rambda REPL +Try this R.take example in Rambda REPL
@@ -12980,6 +13184,7 @@ test('always false', () => { ```typescript import { pipe, takeWhile } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -12989,7 +13194,7 @@ it('R.takeWhile', () => { takeWhile(x => x > 1), takeWhile((x, i) => i + x > 1), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -13108,15 +13313,16 @@ test('happy', () => { TypeScript test ```typescript -import { test } from 'rambda' +import { test as ramdaTest } from 'rambda' +import { expectTypeOf, it } from 'vitest' const input = 'foo ' const regex = /foo/ it('R.test', () => { - const result = test(regex)(input) + const result = ramdaTest(regex)(input) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) ``` @@ -13162,18 +13368,15 @@ transformPropObject( TypeScript test ```typescript -import { transformPropObject, pipe } from 'rambda' +import type { transformPropObject } from 'rambda' +import { expectTypeOf, it } from 'vitest' +/** + * `transformPropObject` is declared in typings but not exported from the JS bundle yet. + * Keep compile-time-only assertions so Vitest does not execute missing runtime. + */ it('R.transformPropObject', () => { - const result = pipe( - { a: 1, b: 'foo' }, - transformPropObject(x => { - x // $ExpectType number - return x > 2 - }, 'a'), - ) - - result // $ExpectType { b: string; a: boolean; } + expectTypeOf().toBeFunction() }) ``` @@ -13282,6 +13485,7 @@ test('when fn is used', () => { ```typescript import { map, pipe, tryCatch } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.tryCatch', () => { it('happy', () => { @@ -13294,7 +13498,7 @@ describe('R.tryCatch', () => { ), ) - result // $ExpectType (string | null)[] + expectTypeOf(result).toEqualTypeOf<(string | null)[]>() }) }) ``` @@ -13554,12 +13758,13 @@ test('function inside object 2', () => { ```typescript import { type } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.type', () => { it('happy', () => { const result = type(4) - result // $ExpectType RambdaTypes + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -13640,25 +13845,26 @@ test('with list of objects', () => { ```typescript import { union } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.union', () => { it('happy', () => { const result = union([1, 2])([2, 3]) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with array of objects - case 1', () => { const list1 = [{ a: 1 }, { a: 2 }] const list2 = [{ a: 2 }, { a: 3 }] const result = union(list1)(list2) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) it('with array of objects - case 2', () => { const list1 = [{ a: 1, b: 1 }, { a: 2 }] const list2 = [{ a: 2 }, { a: 3, b: 3 }] const result = union(list1)(list2) - result[0].a // $ExpectType number - result[0].b // $ExpectType number | undefined + expectTypeOf(result[0].a).toEqualTypeOf() + expectTypeOf(result[0].b).toEqualTypeOf() }) }) ``` @@ -13743,6 +13949,7 @@ test('happy', () => { ```typescript import { pipe, unionWith } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.unionWith', () => { it('happy', () => { @@ -13750,14 +13957,14 @@ describe('R.unionWith', () => { const result = pipe( list, unionWith((x, y) => { - x.a // $ExpectType number - y.b // $ExpectType number + expectTypeOf(x.a).toEqualTypeOf() + expectTypeOf(y.b).toEqualTypeOf() return x.a === y.a }, [{a: 2, b: 2}, {a: 3, b: 2}]), ) - result[0].a // $ExpectType number - result[0].b // $ExpectType number + expectTypeOf(result[0].a).toEqualTypeOf() + expectTypeOf(result[0].b).toEqualTypeOf() }) }) ``` @@ -13860,11 +14067,12 @@ test('can distinct between string and number', () => { ```typescript import { uniq } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.uniq', () => { it('happy', () => { const result = uniq([1, 2, 3, 3, 3, 1, 2, 0]) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -13951,12 +14159,13 @@ test('uses R.uniq', () => { ```typescript import { uniqBy } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.uniqBy', () => { it('happy', () => { const result = uniqBy(Math.abs)([-2, -1, 0]) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -14106,6 +14315,7 @@ test('should return items that are not equal to themselves', () => { ```typescript import { pipe, uniqWith } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.uniqWith', () => { it('happy', () => { @@ -14113,7 +14323,7 @@ describe('R.uniqWith', () => { [{ a: 1 }, { a: 1 }], uniqWith((x, y) => x.a === y.a), ) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) }) ``` @@ -14210,6 +14420,7 @@ test('happy', () => { ```typescript import { pipe, unless } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const inc = (x: number) => x + 1 @@ -14219,23 +14430,23 @@ describe('R.unless', () => { 1, unless(x => x > 5, inc), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) it('with two different types', () => { const result = pipe( 1, unless( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 5 }, x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return `${x}-foo` }, ), ) - result // $ExpectType string | number + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -14330,6 +14541,7 @@ test('happy', () => { ```typescript import { pipe, unwind } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { a: 1, @@ -14339,13 +14551,13 @@ const obj = { describe('R.unwind', () => { it('happy', () => { const [result] = unwind('b')(obj) - result.a // $ExpectType number - result.b // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) it('inside pipe', () => { const [result] = pipe(obj, unwind('b')) - result.a // $ExpectType number - result.b // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) }) ``` @@ -14529,6 +14741,7 @@ test('happy', () => { ```typescript import { head, pipe, tap, when } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' function notNull(a: T | null | undefined): a is T { return a != null @@ -14543,7 +14756,7 @@ describe('R.when', () => { x => x, ), tap(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() }), when( x => x > 2, @@ -14551,7 +14764,7 @@ describe('R.when', () => { ), ) - result // $ExpectType string | number + expectTypeOf(result).toEqualTypeOf() }) it('with assertion of type', () => { @@ -14560,7 +14773,7 @@ describe('R.when', () => { head, when(notNull, x => x + 1), ) - result // $ExpectType number | null + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -14674,6 +14887,7 @@ test('should truncate result to length of shorted input list', () => { ```typescript import { zip } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.zip', () => { it('happy', () => { @@ -14681,8 +14895,8 @@ describe('R.zip', () => { const array2 = ['A', 'B', 'C'] let a: Partial const result = zip(array1)(array2) - result[0][0] // $ExpectType number - result[0][1] // $ExpectType string + expectTypeOf(result[0][0]).toEqualTypeOf() + expectTypeOf(result[0][1]).toEqualTypeOf() }) }) ``` @@ -14771,6 +14985,7 @@ test('when second list is longer', () => { TypeScript test ```typescript +import { describe, expectTypeOf, it } from 'vitest' import { pipe, zipWith } from 'rambda' const list1 = [1, 2] @@ -14781,13 +14996,13 @@ describe('R.zipWith', () => { const result = pipe( list2, zipWith((x, y) => { - x // $ExpectType number - y // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(y).toEqualTypeOf() return `${x}-${y}` }, list1), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) }) ``` @@ -14798,6 +15013,20 @@ describe('R.zipWith', () => { ## ❯ CHANGELOG +11.2.0 + +- Fix wrong typing for `R.equal`,`R.path`, `R.prop`, `R.propEq`, `R.prepend` - [Issue #803](https://github.com/selfrefactor/rambda/issues/803) + +- Add `R.splitEveryStrict` + +- Add `R.mergeDeep` + +- Change `R.range` when start and end are the same to return array with one element instead of empty array. + +- Fix wrong usage of non-curried methods in example snippets. + +- Migrate to `vitest` for TS testing + 11.1.0 - Add `R.filterMap` - similar to Ruby `filter_map` diff --git a/files/DEV_NOTES.md b/files/DEV_NOTES.md index c913977f7..3ae77fe43 100644 --- a/files/DEV_NOTES.md +++ b/files/DEV_NOTES.md @@ -1,3 +1,5 @@ +https://github.com/radashi-org/radashi/pull/425/changes + - Change several functions to be used directly without currying. It relates when there is confusion which is the input that is coming from the pipe: diff --git a/files/index.d.ts b/files/index.d.ts index c672f0bb0..97713508a 100644 --- a/files/index.d.ts +++ b/files/index.d.ts @@ -464,7 +464,6 @@ Notes: It doesn't handle cyclical data structures and functions */ // @SINGLE_MARKER -export function equals(x: T, y: T): boolean; export function equals(x: T): (y: T) => boolean; /* @@ -716,7 +715,7 @@ Example: const list = [ 'a', 'b', 'aa', 'bb' ] const groupFn = x => x.length -const result = R.groupBy(groupFn, list) +const result = R.groupBy(groupFn)(list) // => { '1': ['a', 'b'], '2': ['aa', 'bb'] } ``` @@ -930,7 +929,7 @@ Explanation: It returns a string of all `list` instances joined with a `glue`. Example: ``` -R.join('-', [1, 2, 3]) // => '1-2-3' +R.join('-')([1, 2, 3]) // => '1-2-3' ``` Categories: List @@ -1309,8 +1308,8 @@ Example: ``` const result = [ - R.match('a', 'foo'), - R.match(/([a-z]a)/g, 'bananas') + R.match('a')('foo'), + R.match(/([a-z]a)/g)('bananas') ] // => [[], ['ba', 'na', 'na']] ``` @@ -1333,7 +1332,7 @@ Example: ``` const compareFn = Math.abs -R.maxBy(compareFn, 5, -7) // => -7 +R.maxBy(compareFn, 5)(-7) // => -7 ``` Categories: Logic @@ -1347,7 +1346,7 @@ export function maxBy(compareFn: (input: T) => Ord, x: T): (y: T) => T; /* Method: merge -Explanation: It creates a copy of `target` object with overwritten `newProps` properties. +Explanation: It creates a copy of `source` object with overwritten `newProps` properties. Example: @@ -1360,7 +1359,25 @@ Notes: */ // @SINGLE_MARKER -export function merge(source: Source): (data: T) => Merge; +export function merge(source: Source): (newProps: T) => Merge; + +/* +Method: mergeDeep + +Explanation: + +Example: + +``` +``` + +Categories: Object + +Notes: + +*/ +// @SINGLE_MARKER +export function mergeDeep(source: Source): (newProps: T) => Merge; /* Method: minBy @@ -1372,7 +1389,7 @@ Example: ``` const compareFn = Math.abs -R.minBy(compareFn, -5, 2) // => -5 +R.minBy(compareFn, -5)(2) // => -5 ``` Categories: Logic @@ -1439,8 +1456,8 @@ const propsToOmit = 'a,c,d' const propsToOmitList = ['a', 'c', 'd'] const result = [ - R.omit(propsToOmit, obj), - R.omit(propsToOmitList, obj) + R.omit(propsToOmit)(obj), + R.omit(propsToOmitList)(obj) ] // => [{b: 2}, {b: 2}] ``` @@ -1565,9 +1582,9 @@ const pathToSearch = 'a.b' const pathToSearchList = ['a', 'b'] const result = [ - R.path(pathToSearch, obj), - R.path(pathToSearchList, obj), - R.path('a.b.c.d', obj) + R.path(pathToSearch)(obj), + R.path(pathToSearchList)(obj), + R.path('a.b.c.d')(obj) ] // => [1, 1, undefined] ``` @@ -1622,14 +1639,6 @@ export function path< K3 extends string & keyof S[K0][K1][K2], K4 extends string & keyof S[K0][K1][K2][K3] >(path: `${K0}.${K1}.${K2}.${K3}.${K4}`): (obj: S) => S[K0][K1][K2][K3][K4]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3] ->(path: [K0, K1, K2, K3, K4], obj: S): S[K0][K1][K2][K3][K4]; export function path< S, K0 extends keyof S, @@ -1648,15 +1657,6 @@ export function path< K4 extends string & keyof S[K0][K1][K2][K3], K5 extends string & keyof S[K0][K1][K2][K3][K4] >(path: `${K0}.${K1}.${K2}.${K3}.${K4}.${K5}`): (obj: S) => S[K0][K1][K2][K3][K4][K5]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4] ->(path: [K0, K1, K2, K3, K4, K5], obj: S): S[K0][K1][K2][K3][K4][K5]; export function path< S, K0 extends keyof S, @@ -1677,16 +1677,6 @@ export function path< K5 extends string & keyof S[K0][K1][K2][K3][K4], K6 extends string & keyof S[K0][K1][K2][K3][K4][K5] >(path: `${K0}.${K1}.${K2}.${K3}.${K4}.${K5}.${K6}`): (obj: S) => S[K0][K1][K2][K3][K4][K5][K6]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4], - K6 extends keyof S[K0][K1][K2][K3][K4][K5] ->(path: [K0, K1, K2, K3, K4, K5, K6], obj: S): S[K0][K1][K2][K3][K4][K5][K6]; export function path< S, K0 extends keyof S, @@ -1756,14 +1746,6 @@ export function path< K3 extends keyof S[K0][K1][K2], K4 extends keyof S[K0][K1][K2][K3] >(path: [K0, K1, K2, K3, K4]): (obj: S) => S[K0][K1][K2][K3][K4]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3] ->(path: [K0, K1, K2, K3, K4], obj: S): S[K0][K1][K2][K3][K4]; export function path< S, K0 extends keyof S, @@ -1773,15 +1755,6 @@ export function path< K4 extends keyof S[K0][K1][K2][K3], K5 extends keyof S[K0][K1][K2][K3][K4] >(path: [K0, K1, K2, K3, K4, K5]): (obj: S) => S[K0][K1][K2][K3][K4][K5]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4] ->(path: [K0, K1, K2, K3, K4, K5], obj: S): S[K0][K1][K2][K3][K4][K5]; export function path< S, K0 extends keyof S, @@ -1792,16 +1765,6 @@ export function path< K5 extends keyof S[K0][K1][K2][K3][K4], K6 extends keyof S[K0][K1][K2][K3][K4][K5] >(path: [K0, K1, K2, K3, K4, K5, K6]): (obj: S) => S[K0][K1][K2][K3][K4][K5][K6]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4], - K6 extends keyof S[K0][K1][K2][K3][K4][K5] ->(path: [K0, K1, K2, K3, K4, K5, K6], obj: S): S[K0][K1][K2][K3][K4][K5][K6]; export function path< S, K0 extends keyof S, @@ -1834,7 +1797,7 @@ Explanation: It changes a property of object on the base of provided path and tr Example: ``` -const result = R.modifyPath('a.b.c', x=> x+1, {a:{b: {c:1}}}) +const result = R.modifyPath('a.b.c', x=> x+1)({a:{b: {c:1}}}) // => {a:{b: {c:2}}} ``` @@ -2333,7 +2296,7 @@ Explanation: It adds element `x` at the beginning of `list`. Example: ``` -const result = R.prepend('foo', ['bar', 'baz']) +const result = R.prepend('foo')(['bar', 'baz']) // => ['foo', 'bar', 'baz'] ``` @@ -2343,7 +2306,6 @@ Notes: */ // @SINGLE_MARKER -export function prepend(xToPrepend: T, iterable: T[]): T[]; export function prepend(xToPrepend: T): (iterable: T[]) => T[]; /* @@ -2370,7 +2332,6 @@ Notes: */ // @SINGLE_MARKER export function prop(prop: K): (obj: U) => U[K]; -export function prop(prop: K, obj: U): U[K]; /* Method: propEq @@ -2387,8 +2348,8 @@ const propToFind = 'foo' const valueToMatch = 'bar' const result = [ - R.propEq(propToFind, valueToMatch)(obj), - R.propEq(propToFind, valueToMatch)(secondObj) + R.propEq(valueToMatch, propToFind)(obj), + R.propEq(valueToMatch, propToFind)(secondObj) ] // => [true, false] ``` @@ -2399,12 +2360,7 @@ Notes: */ // @SINGLE_MARKER -export function propEq(val: T): { - (name: K): (obj: Record) => boolean; - (name: K, obj: Record): boolean; -}; -export function propEq(val: T, name: K): (obj: Record) => boolean; -export function propEq(val: U[K], name: K, obj: U): boolean; +export function propEq(valueToMatch: T, propToFind: K): (obj: Record) => boolean; /* Method: propOr @@ -2419,8 +2375,8 @@ const defaultValue = 'DEFAULT_VALUE' const property = 'a' const result = [ - R.propOr(defaultValue, property)(obj), - R.propOr(defaultValue, 'foo')(obj) + R.propOr(property, defaultValue)(obj), + R.propOr('foo', defaultValue)(obj) ] // => [1, 'DEFAULT_VALUE'] ``` @@ -2445,7 +2401,7 @@ const obj = {a: {b:1}} const property = 'a' const predicate = x => x?.b === 1 -const result = R.propSatisfies(predicate, property, obj) +const result = R.propSatisfies(predicate, property)(obj) // => true ``` @@ -2469,7 +2425,7 @@ const list = [1, 2, 3] const initialValue = 10 const reducer = (prev, current) => prev * current -const result = R.reduce(reducer, initialValue, list) +const result = R.reduce(reducer, initialValue)(list) // => 60 ``` @@ -2578,7 +2534,7 @@ const sortFn = (x, y) => { return x.a > y.a ? 1 : -1 } -const result = R.sort(sortFn, list) +const result = R.sort(sortFn)(list) const expected = [ {a: 1}, {a: 2}, @@ -3111,6 +3067,34 @@ Notes: // @SINGLE_MARKER export function splitEvery(sliceLength: number): (input: T[]) => (T[])[]; +/* +Method: splitEveryStrict + +Explanation: Similar to `R.splitEvery`, but it trims the last slice if it's not of the same length as `sliceLength`. + +Example: + +``` +const result = [ + R.splitEveryStrict(2)([1, 2, 3, 4, 5]), + R.splitEveryStrict(2)('foobarbaz') +] + +const expected = [ + [[1, 2], [3, 4]], + ['fo', 'ob', 'ar', 'ba'] +] +// => `result` is equal to `expected` +``` + +Categories: List + +Notes: + +*/ +// @SINGLE_MARKER +export function splitEvery(sliceLength: number): (input: T[]) => (T[])[]; + /* Method: difference @@ -3224,7 +3208,7 @@ const howMany = 2 const result = [ R.take(howMany)([1, 2, 3]), - R.take(howMany, 'foobar'), + R.take(howMany)('foobar'), ] // => [[1, 2], 'fo'] ``` @@ -3909,7 +3893,7 @@ Example: ``` const list = [{a:1}, {a:2}, {a:1}] -const result = R.duplicateBy(x => x, list) +const result = R.duplicateBy(x => x)(list) // => [{a:1}] ``` @@ -4956,7 +4940,7 @@ Example: const inputWithTags = 'foo is {{bar}} even {{a}} more' const templateArguments = {"bar":"BAR", a: 1} -const result = R.interpolate(inputWithTags, templateArguments) +const result = R.interpolate(inputWithTags)(templateArguments) const expected = 'foo is BAR even 1 more' // => `result` is equal to `expected` ``` @@ -5082,7 +5066,7 @@ Example: ``` const list = [1, 2, 3] -const result = switcher(list.length) +const result = R.switcher(list.length) .is(x => x < 2, 4) .is(x => x < 4, 6) .default(7) diff --git a/index.d.cts b/index.d.cts index f346e9437..1af28f0aa 100644 --- a/index.d.cts +++ b/index.d.cts @@ -334,7 +334,6 @@ export function eqProps(prop: K, obj1: T): (obj2: T) => bo /** * It deeply compares `x` and `y` and returns `true` if they are equal. */ -export function equals(x: T, y: T): boolean; export function equals(x: T): (y: T) => boolean; /** @@ -656,9 +655,11 @@ export function match(regExpression: RegExp): (str: string) => string[]; export function maxBy(compareFn: (input: T) => Ord, x: T): (y: T) => T; /** - * It creates a copy of `target` object with overwritten `newProps` properties. + * It creates a copy of `source` object with overwritten `newProps` properties. */ -export function merge(source: Source): (data: T) => Merge; +export function merge(source: Source): (newProps: T) => Merge; + +export function mergeDeep(source: Source): (newProps: T) => Merge; /** * Helper to merge all calculated TypeScript definitions into one definition. @@ -909,14 +910,6 @@ export function path< K3 extends string & keyof S[K0][K1][K2], K4 extends string & keyof S[K0][K1][K2][K3] >(path: `${K0}.${K1}.${K2}.${K3}.${K4}`): (obj: S) => S[K0][K1][K2][K3][K4]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3] ->(path: [K0, K1, K2, K3, K4], obj: S): S[K0][K1][K2][K3][K4]; export function path< S, K0 extends keyof S, @@ -935,15 +928,6 @@ export function path< K4 extends string & keyof S[K0][K1][K2][K3], K5 extends string & keyof S[K0][K1][K2][K3][K4] >(path: `${K0}.${K1}.${K2}.${K3}.${K4}.${K5}`): (obj: S) => S[K0][K1][K2][K3][K4][K5]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4] ->(path: [K0, K1, K2, K3, K4, K5], obj: S): S[K0][K1][K2][K3][K4][K5]; export function path< S, K0 extends keyof S, @@ -964,16 +948,6 @@ export function path< K5 extends string & keyof S[K0][K1][K2][K3][K4], K6 extends string & keyof S[K0][K1][K2][K3][K4][K5] >(path: `${K0}.${K1}.${K2}.${K3}.${K4}.${K5}.${K6}`): (obj: S) => S[K0][K1][K2][K3][K4][K5][K6]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4], - K6 extends keyof S[K0][K1][K2][K3][K4][K5] ->(path: [K0, K1, K2, K3, K4, K5, K6], obj: S): S[K0][K1][K2][K3][K4][K5][K6]; export function path< S, K0 extends keyof S, @@ -1043,14 +1017,6 @@ export function path< K3 extends keyof S[K0][K1][K2], K4 extends keyof S[K0][K1][K2][K3] >(path: [K0, K1, K2, K3, K4]): (obj: S) => S[K0][K1][K2][K3][K4]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3] ->(path: [K0, K1, K2, K3, K4], obj: S): S[K0][K1][K2][K3][K4]; export function path< S, K0 extends keyof S, @@ -1060,15 +1026,6 @@ export function path< K4 extends keyof S[K0][K1][K2][K3], K5 extends keyof S[K0][K1][K2][K3][K4] >(path: [K0, K1, K2, K3, K4, K5]): (obj: S) => S[K0][K1][K2][K3][K4][K5]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4] ->(path: [K0, K1, K2, K3, K4, K5], obj: S): S[K0][K1][K2][K3][K4][K5]; export function path< S, K0 extends keyof S, @@ -1079,16 +1036,6 @@ export function path< K5 extends keyof S[K0][K1][K2][K3][K4], K6 extends keyof S[K0][K1][K2][K3][K4][K5] >(path: [K0, K1, K2, K3, K4, K5, K6]): (obj: S) => S[K0][K1][K2][K3][K4][K5][K6]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4], - K6 extends keyof S[K0][K1][K2][K3][K4][K5] ->(path: [K0, K1, K2, K3, K4, K5, K6], obj: S): S[K0][K1][K2][K3][K4][K5][K6]; export function path< S, K0 extends keyof S, @@ -1823,7 +1770,6 @@ export function pluck(prop: K): { /** * It adds element `x` at the beginning of `list`. */ -export function prepend(xToPrepend: T, iterable: T[]): T[]; export function prepend(xToPrepend: T): (iterable: T[]) => T[]; /** @@ -1832,17 +1778,11 @@ export function prepend(xToPrepend: T): (iterable: T[]) => T[]; * If there is no such property, it returns `undefined`. */ export function prop(prop: K): (obj: U) => U[K]; -export function prop(prop: K, obj: U): U[K]; /** * It returns true if `obj` has property `propToFind` and its value is equal to `valueToMatch`. */ -export function propEq(val: T): { - (name: K): (obj: Record) => boolean; - (name: K, obj: Record): boolean; -}; -export function propEq(val: T, name: K): (obj: Record) => boolean; -export function propEq(val: U[K], name: K, obj: U): boolean; +export function propEq(valueToMatch: T, propToFind: K): (obj: Record) => boolean; /** * It returns either `defaultValue` or the value of `property` in `obj`. diff --git a/index.d.ts b/index.d.ts index f346e9437..1af28f0aa 100644 --- a/index.d.ts +++ b/index.d.ts @@ -334,7 +334,6 @@ export function eqProps(prop: K, obj1: T): (obj2: T) => bo /** * It deeply compares `x` and `y` and returns `true` if they are equal. */ -export function equals(x: T, y: T): boolean; export function equals(x: T): (y: T) => boolean; /** @@ -656,9 +655,11 @@ export function match(regExpression: RegExp): (str: string) => string[]; export function maxBy(compareFn: (input: T) => Ord, x: T): (y: T) => T; /** - * It creates a copy of `target` object with overwritten `newProps` properties. + * It creates a copy of `source` object with overwritten `newProps` properties. */ -export function merge(source: Source): (data: T) => Merge; +export function merge(source: Source): (newProps: T) => Merge; + +export function mergeDeep(source: Source): (newProps: T) => Merge; /** * Helper to merge all calculated TypeScript definitions into one definition. @@ -909,14 +910,6 @@ export function path< K3 extends string & keyof S[K0][K1][K2], K4 extends string & keyof S[K0][K1][K2][K3] >(path: `${K0}.${K1}.${K2}.${K3}.${K4}`): (obj: S) => S[K0][K1][K2][K3][K4]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3] ->(path: [K0, K1, K2, K3, K4], obj: S): S[K0][K1][K2][K3][K4]; export function path< S, K0 extends keyof S, @@ -935,15 +928,6 @@ export function path< K4 extends string & keyof S[K0][K1][K2][K3], K5 extends string & keyof S[K0][K1][K2][K3][K4] >(path: `${K0}.${K1}.${K2}.${K3}.${K4}.${K5}`): (obj: S) => S[K0][K1][K2][K3][K4][K5]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4] ->(path: [K0, K1, K2, K3, K4, K5], obj: S): S[K0][K1][K2][K3][K4][K5]; export function path< S, K0 extends keyof S, @@ -964,16 +948,6 @@ export function path< K5 extends string & keyof S[K0][K1][K2][K3][K4], K6 extends string & keyof S[K0][K1][K2][K3][K4][K5] >(path: `${K0}.${K1}.${K2}.${K3}.${K4}.${K5}.${K6}`): (obj: S) => S[K0][K1][K2][K3][K4][K5][K6]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4], - K6 extends keyof S[K0][K1][K2][K3][K4][K5] ->(path: [K0, K1, K2, K3, K4, K5, K6], obj: S): S[K0][K1][K2][K3][K4][K5][K6]; export function path< S, K0 extends keyof S, @@ -1043,14 +1017,6 @@ export function path< K3 extends keyof S[K0][K1][K2], K4 extends keyof S[K0][K1][K2][K3] >(path: [K0, K1, K2, K3, K4]): (obj: S) => S[K0][K1][K2][K3][K4]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3] ->(path: [K0, K1, K2, K3, K4], obj: S): S[K0][K1][K2][K3][K4]; export function path< S, K0 extends keyof S, @@ -1060,15 +1026,6 @@ export function path< K4 extends keyof S[K0][K1][K2][K3], K5 extends keyof S[K0][K1][K2][K3][K4] >(path: [K0, K1, K2, K3, K4, K5]): (obj: S) => S[K0][K1][K2][K3][K4][K5]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4] ->(path: [K0, K1, K2, K3, K4, K5], obj: S): S[K0][K1][K2][K3][K4][K5]; export function path< S, K0 extends keyof S, @@ -1079,16 +1036,6 @@ export function path< K5 extends keyof S[K0][K1][K2][K3][K4], K6 extends keyof S[K0][K1][K2][K3][K4][K5] >(path: [K0, K1, K2, K3, K4, K5, K6]): (obj: S) => S[K0][K1][K2][K3][K4][K5][K6]; -export function path< - S, - K0 extends keyof S, - K1 extends keyof S[K0], - K2 extends keyof S[K0][K1], - K3 extends keyof S[K0][K1][K2], - K4 extends keyof S[K0][K1][K2][K3], - K5 extends keyof S[K0][K1][K2][K3][K4], - K6 extends keyof S[K0][K1][K2][K3][K4][K5] ->(path: [K0, K1, K2, K3, K4, K5, K6], obj: S): S[K0][K1][K2][K3][K4][K5][K6]; export function path< S, K0 extends keyof S, @@ -1823,7 +1770,6 @@ export function pluck(prop: K): { /** * It adds element `x` at the beginning of `list`. */ -export function prepend(xToPrepend: T, iterable: T[]): T[]; export function prepend(xToPrepend: T): (iterable: T[]) => T[]; /** @@ -1832,17 +1778,11 @@ export function prepend(xToPrepend: T): (iterable: T[]) => T[]; * If there is no such property, it returns `undefined`. */ export function prop(prop: K): (obj: U) => U[K]; -export function prop(prop: K, obj: U): U[K]; /** * It returns true if `obj` has property `propToFind` and its value is equal to `valueToMatch`. */ -export function propEq(val: T): { - (name: K): (obj: Record) => boolean; - (name: K, obj: Record): boolean; -}; -export function propEq(val: T, name: K): (obj: Record) => boolean; -export function propEq(val: U[K], name: K, obj: U): boolean; +export function propEq(valueToMatch: T, propToFind: K): (obj: Record) => boolean; /** * It returns either `defaultValue` or the value of `property` in `obj`. diff --git a/package.json b/package.json index 1e777a7fd..d9c537b10 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "test:file": "node scripts/tasks/run/run-test.js", "test:ci": "vitest run", "test": "vitest run --watch -u", - "test:typings": "dtslint --localTs ./node_modules/typescript/lib --expectOnly ./source", + "test:typings": "vitest run --config vitest.typings.config.js", "create-docsify": "cd ../rambda-scripts && yarn create-docsify", "deps": "run dep:next 10", "x": "run dep:stable 10", @@ -23,9 +23,6 @@ "niketaScripts": { "**/*.js": "yarn test:file" }, - "depFn": [ - "@definitelytyped/dtslint" - ], "type": "module", "exports": { "require": { @@ -39,20 +36,19 @@ "module": "dist/rambda.js", "dependencies": {}, "devDependencies": { - "@definitelytyped/dtslint": "0.0.182", "@types/mocha": "10.0.10", - "@types/node": "24.10.1", - "@vitest/coverage-v8": "4.0.10", - "helpers-fn": "2.0.0", - "lodash": "4.17.21", + "@types/node": "25.8.0", + "@vitest/coverage-v8": "5.0.0-beta.2", + "helpers-fn": "2.1.1", + "lodash": "4.18.1", "radashi": "13.0.0-beta.ffa4778", "rambdax": "11.3.1", "ramda": "0.32.0", - "remeda": "2.32.0", - "rollup": "4.53.3", + "remeda": "2.34.1", + "rollup": "4.60.4", "types-ramda": "0.31.0", - "typescript": "6.0.0-dev.20251119", - "vitest": "4.0.10" + "typescript": "6.0.3", + "vitest": "5.0.0-beta.2" }, "jest": { "testEnvironment": "node", diff --git a/rambda.js b/rambda.js index 3ad5d98df..f0f33241a 100644 --- a/rambda.js +++ b/rambda.js @@ -67,6 +67,7 @@ export * from './src/mapPropObject.js' export * from './src/match.js' export * from './src/maxBy.js' export * from './src/merge.js' +export * from './src/mergeDeep.js' export * from './src/mergeTypes.js' export * from './src/middle.js' export * from './src/minBy.js' diff --git a/source/addProp-spec.ts b/source/addProp-spec.ts index cc48821b9..3844fa5c0 100644 --- a/source/addProp-spec.ts +++ b/source/addProp-spec.ts @@ -1,8 +1,9 @@ import { addProp, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.addProp', () => { const result = pipe({ a: 1, b: 'foo' }, addProp('c', 3)) - result.a // $ExpectType number - result.b // $ExpectType string - result.c // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) diff --git a/source/addPropToObjects-spec.ts b/source/addPropToObjects-spec.ts index ce032fdc8..bde4ef396 100644 --- a/source/addPropToObjects-spec.ts +++ b/source/addPropToObjects-spec.ts @@ -1,4 +1,5 @@ import { addPropToObjects, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.addPropToObjects', () => { let result = pipe( @@ -11,5 +12,5 @@ it('R.addPropToObjects', () => { (x) => String(x.a + x.b), ) ) - result // $ExpectType { a: number; b: number; c: string; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; b: number; c: string; }[]>() }) diff --git a/source/all-spec.ts b/source/all-spec.ts index 260a325eb..721f919ba 100644 --- a/source/all-spec.ts +++ b/source/all-spec.ts @@ -1,14 +1,15 @@ import * as R from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('all', () => { it('happy', () => { const result = R.pipe( [1, 2, 3], R.all(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 0 }), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/allPass-spec.ts b/source/allPass-spec.ts index a3bc1b763..3c53ce713 100644 --- a/source/allPass-spec.ts +++ b/source/allPass-spec.ts @@ -1,4 +1,5 @@ import * as R from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('allPass', () => { it('happy', () => { @@ -10,6 +11,6 @@ describe('allPass', () => { (x) => x.length > 2, (x) => x.includes(3) ]))) - result // $ExpectType boolean[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/any-spec.ts b/source/any-spec.ts index f15a6fe24..9d969d8a0 100644 --- a/source/any-spec.ts +++ b/source/any-spec.ts @@ -1,12 +1,13 @@ import { any, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.any', () => { const result = pipe( [1, 2, 3], any(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 2 }), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/anyPass-spec.ts b/source/anyPass-spec.ts index 0fc37a4d7..1d2ef3746 100644 --- a/source/anyPass-spec.ts +++ b/source/anyPass-spec.ts @@ -1,11 +1,12 @@ import { anyPass, filter } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('anyPass', () => { it('issue #604', () => { const plusEq = (w: number, x: number, y: number, z: number) => w + x === y + z const result = anyPass([plusEq])(3, 3, 3, 3) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('issue #642', () => { const isGreater = (num: number) => num > 5 @@ -13,9 +14,9 @@ describe('anyPass', () => { const xs = [0, 1, 2, 3] const filtered1 = filter(pred)(xs) - filtered1 // $ExpectType number[] + expectTypeOf(filtered1).toEqualTypeOf() const filtered2 = xs.filter(pred) - filtered2 // $ExpectType number[] + expectTypeOf(filtered2).toEqualTypeOf() }) it('functions as a type guard', () => { const isString = (x: unknown): x is string => typeof x === 'string' @@ -27,7 +28,7 @@ describe('anyPass', () => { const aValue: unknown = 1 if (isStringNumberOrBoolean(aValue)) { - aValue // $ExpectType string | number | boolean + expectTypeOf(aValue).toEqualTypeOf() } }) }) diff --git a/source/append-spec.ts b/source/append-spec.ts index df65f28af..63fb870c4 100644 --- a/source/append-spec.ts +++ b/source/append-spec.ts @@ -1,14 +1,15 @@ import { append, pipe, prepend } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const listOfNumbers = [1, 2, 3] describe('R.append/R.prepend', () => { it('happy', () => { const result = pipe(listOfNumbers, append(4), prepend(0)) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with object', () => { const result = pipe([{ a: 1 }], append({ a: 10 }), prepend({ a: 20 })) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) }) diff --git a/source/ascend-spec.ts b/source/ascend-spec.ts index e817d575c..b10642f69 100644 --- a/source/ascend-spec.ts +++ b/source/ascend-spec.ts @@ -1,9 +1,10 @@ import { pipe, ascend, sort } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.ascend', () => { const result = pipe( [{a:1}, {a:2}], sort(ascend(x => x.a)) ) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) diff --git a/source/assertType-spec.ts b/source/assertType-spec.ts index a3eb53247..d11c79076 100644 --- a/source/assertType-spec.ts +++ b/source/assertType-spec.ts @@ -1,4 +1,5 @@ import { pipe, assertType } from 'rambda' +import { expectTypeOf, it } from 'vitest' type Book = { title: string @@ -18,5 +19,5 @@ it('R.assertType', () => { { title: 'Book1', year: 2020, bookmarkFlag: true }, assertType(isBookToRead), ) - result // $ExpectType BookToRead + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/checkObjectWithSpec-spec.ts b/source/checkObjectWithSpec-spec.ts index 3509cee5e..c799f8470 100644 --- a/source/checkObjectWithSpec-spec.ts +++ b/source/checkObjectWithSpec-spec.ts @@ -1,4 +1,5 @@ import { checkObjectWithSpec, equals } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.checkObjectWithSpec', () => { it('happy', () => { @@ -13,6 +14,6 @@ describe('R.checkObjectWithSpec', () => { b: equals('bar'), } const result = checkObjectWithSpec(conditions)(input) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/compact-spec.ts b/source/compact-spec.ts index 5b5f537d7..01dbde672 100644 --- a/source/compact-spec.ts +++ b/source/compact-spec.ts @@ -1,4 +1,5 @@ import { compact, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.compact', () => { let result = pipe( @@ -14,7 +15,7 @@ it('R.compact', () => { }) ) - result.a // $ExpectType string[] - result.b // $ExpectType number[] - result.c // $ExpectType { a: number; b: number; c: number; f: boolean; } + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf<{ a: number; b: number; c: number; f: boolean; }>() }) diff --git a/source/complement-spec.ts b/source/complement-spec.ts index 1601bb9b2..cae729eb6 100644 --- a/source/complement-spec.ts +++ b/source/complement-spec.ts @@ -1,9 +1,10 @@ import { complement } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.complement', () => { it('happy', () => { const fn = complement((x: number) => x > 10) const result = fn(1) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/concat-spec.ts b/source/concat-spec.ts index b6f35e803..77303ca5f 100644 --- a/source/concat-spec.ts +++ b/source/concat-spec.ts @@ -1,11 +1,12 @@ import { concat, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list1 = [1, 2, 3] const list2 = [4, 5, 6] it('R.concat', () => { const result = pipe(list1, concat(list2)) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() const resultString = pipe('foo', concat('list2')) - resultString // $ExpectType string + expectTypeOf(resultString).toEqualTypeOf() }) diff --git a/source/convertToType-spec.ts b/source/convertToType-spec.ts index 8dc90633f..27d8f11c3 100644 --- a/source/convertToType-spec.ts +++ b/source/convertToType-spec.ts @@ -1,4 +1,5 @@ import { convertToType, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -6,9 +7,9 @@ it('R.convertToType', () => { const result = pipe(list, convertToType, x => { - x // $ExpectType string[] + expectTypeOf(x).toEqualTypeOf() return x } ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/count-spec.ts b/source/count-spec.ts index c2960d6f4..a9e7cfe06 100644 --- a/source/count-spec.ts +++ b/source/count-spec.ts @@ -1,9 +1,10 @@ import { count, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] const predicate = (x: number) => x > 1 it('R.count', () => { const result = pipe(list, count(predicate)) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/countBy-spec.ts b/source/countBy-spec.ts index 79bfeb44f..292233597 100644 --- a/source/countBy-spec.ts +++ b/source/countBy-spec.ts @@ -1,4 +1,5 @@ import { countBy, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = ['a', 'A', 'b', 'B', 'c', 'C'] @@ -7,7 +8,7 @@ it('R.countBy', () => { list, countBy(x => x.toLowerCase()), ) - result.a // $ExpectType number - result.foo // $ExpectType number - result // $ExpectType { [index: string]: number; } + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.foo).toEqualTypeOf() + expectTypeOf(result).toEqualTypeOf<{ [index: string]: number; }>() }) diff --git a/source/defaultTo-spec.ts b/source/defaultTo-spec.ts index eab980d66..3ae9eeb0f 100644 --- a/source/defaultTo-spec.ts +++ b/source/defaultTo-spec.ts @@ -1,9 +1,10 @@ import { defaultTo, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.defaultTo', () => { it('happy', () => { const result = pipe('bar' as unknown, defaultTo('foo')) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/difference-spec.ts b/source/difference-spec.ts index 3d8a44095..8ecf9e0fb 100644 --- a/source/difference-spec.ts +++ b/source/difference-spec.ts @@ -1,4 +1,5 @@ import { difference } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.difference', () => { it('happy', () => { @@ -6,6 +7,6 @@ describe('R.difference', () => { const list2 = [{ id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }] const result = difference(list1)(list2) - result // $ExpectType { id: number; }[] + expectTypeOf(result).toEqualTypeOf<{ id: number; }[]>() }) }) diff --git a/source/drop-spec.ts b/source/drop-spec.ts index 17e744896..0d6e0e1f0 100644 --- a/source/drop-spec.ts +++ b/source/drop-spec.ts @@ -1,6 +1,7 @@ import { drop, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.drop', () => { const result = pipe([1, 2, 3, 4], drop(2)) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/dropWhile-spec.ts b/source/dropWhile-spec.ts index 5bf784a85..fbde6623b 100644 --- a/source/dropWhile-spec.ts +++ b/source/dropWhile-spec.ts @@ -1,4 +1,5 @@ import { dropWhile, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -9,17 +10,17 @@ describe('R.dropWhile', () => { dropWhile(x => x > 1), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with index', () => { const result = pipe( list, dropWhile((x, i) => { - i // $ExpectType number + expectTypeOf(i).toEqualTypeOf() return x + i > 2 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/eqProps-spec.ts b/source/eqProps-spec.ts index 4530194dc..1328c82ce 100644 --- a/source/eqProps-spec.ts +++ b/source/eqProps-spec.ts @@ -1,4 +1,5 @@ import { eqProps, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const obj1 = { a: { b: 1 }, c: 2 } const obj2 = { a: { b: 1 }, c: 3 } @@ -6,5 +7,5 @@ const obj2 = { a: { b: 1 }, c: 3 } it('R.eqProps', () => { const result = pipe(obj1, eqProps('a', obj2)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/equals-spec.ts b/source/equals-spec.ts index 7740bfb8f..ab41ca554 100644 --- a/source/equals-spec.ts +++ b/source/equals-spec.ts @@ -1,19 +1,20 @@ import { equals } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.equals', () => { it('happy', () => { - const result = equals(4, 1) - result // $ExpectType boolean + const result = equals(4)(1) + expectTypeOf(result).toEqualTypeOf() }) it('with object', () => { const foo = { a: 1 } const bar = { a: 2 } - const result = equals(foo, bar) - result // $ExpectType boolean + const result = equals(foo)(bar) + expectTypeOf(result).toEqualTypeOf() }) it('curried', () => { const result = equals(4)(1) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/evolve-spec.ts b/source/evolve-spec.ts index 1b9ffac4f..b202ba4ac 100644 --- a/source/evolve-spec.ts +++ b/source/evolve-spec.ts @@ -1,4 +1,5 @@ import { evolve, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.evolve', () => { const input = { @@ -14,7 +15,7 @@ it('R.evolve', () => { foo: x => x + 1, }) ) - result.foo // $ExpectType number - result.baz // $ExpectType number - result.nested.a // $ExpectType number + expectTypeOf(result.foo).toEqualTypeOf() + expectTypeOf(result.baz).toEqualTypeOf() + expectTypeOf(result.nested.a).toEqualTypeOf() }) diff --git a/source/excludes-spec.ts b/source/excludes-spec.ts index 1852c380d..4b244c371 100644 --- a/source/excludes-spec.ts +++ b/source/excludes-spec.ts @@ -1,13 +1,14 @@ import { excludes, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.excludes', () => { it('happy', () => { const list = [{ a: { b: '1' } }, { a: { b: '2' } }, { a: { b: '3' } }] const result = pipe({ a: { b: '1' } }, excludes(list)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('with string', () => { const result = pipe('foo', excludes('bar')) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/exists-spec.ts b/source/exists-spec.ts index efb1cab92..19440109a 100644 --- a/source/exists-spec.ts +++ b/source/exists-spec.ts @@ -1,4 +1,5 @@ import { exists, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -6,6 +7,6 @@ describe('R.exists', () => { it('happy', () => { const predicate = (x: number) => x > 2 const result = pipe(list, exists(predicate)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/filter-spec.ts b/source/filter-spec.ts index 9c9a5a2a8..9b3f03507 100644 --- a/source/filter-spec.ts +++ b/source/filter-spec.ts @@ -1,4 +1,5 @@ import { filter, includes, pipe, reject, sort, split, uniq } from 'rambda' +import { describe, expectTypeOf, it, test } from 'vitest' const list = [1, 2, 3] @@ -7,23 +8,23 @@ describe('R.filter with array', () => { const result = pipe( list, filter(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with index', () => { const result = pipe( list, filter((x: number, i: number) => { - x // $ExpectType number - i // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(i).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('complex example', () => { @@ -48,7 +49,7 @@ describe('R.filter with array', () => { reject(includes(SENTENCE_END_CHARS)), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) it('narrowing type', () => { interface Foo { @@ -63,7 +64,7 @@ describe('R.filter with array', () => { return typeof (x as Bar).b === 'string' } const result = pipe(testList, filter(filterBar)) - result // $ExpectType Bar[] + expectTypeOf(result).toEqualTypeOf() }) it('narrowing type - readonly', () => { @@ -79,13 +80,13 @@ describe('R.filter with array', () => { return typeof (x as Bar).b === 'string' } const result = pipe(testList, filter(filterBar)) - result // $ExpectType Bar[] + expectTypeOf(result).toEqualTypeOf() }) it('filtering NonNullable - list of objects', () => { const testList = [{ a: 1 }, { a: 2 }, false, { a: 3 }] const result = pipe(testList, filter(Boolean)) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) it('filtering NonNullable - readonly', () => { diff --git a/source/filterAsync-spec.ts b/source/filterAsync-spec.ts index 2c65f02c6..949e3b9e5 100644 --- a/source/filterAsync-spec.ts +++ b/source/filterAsync-spec.ts @@ -1,4 +1,5 @@ import { filterAsync, pipeAsync } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -7,10 +8,10 @@ describe('R.filter with array', () => { const result = await pipeAsync( list, filterAsync(async x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/filterMap-spec.ts b/source/filterMap-spec.ts index 548865071..65b6c7e68 100644 --- a/source/filterMap-spec.ts +++ b/source/filterMap-spec.ts @@ -1,4 +1,5 @@ import { filterMap, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -7,13 +8,13 @@ it('R.filterMap - within pipe', () => { list, x => x, filterMap(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return Math.random() > 0.5 ? String(x) : null }), filterMap(x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return Math.random() > 0.5 ? Number(x) : '' }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/filterObject-spec.ts b/source/filterObject-spec.ts index 75eb438ac..aabf3d17a 100644 --- a/source/filterObject-spec.ts +++ b/source/filterObject-spec.ts @@ -1,14 +1,15 @@ import { filterObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.filterObject', () => { it('require explicit type', () => { const result = pipe( { a: 1, b: 2 }, filterObject<{ b: number }>(a => { - a // $ExpectType number + expectTypeOf(a).toEqualTypeOf() return a > 1 }), ) - result.b // $ExpectType number + expectTypeOf(result.b).toEqualTypeOf() }) }) diff --git a/source/find-spec.ts b/source/find-spec.ts index c6139ae8b..746bb15c9 100644 --- a/source/find-spec.ts +++ b/source/find-spec.ts @@ -1,4 +1,5 @@ import { find, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -6,6 +7,6 @@ describe('R.find', () => { it('happy', () => { const predicate = (x: number) => x > 2 const result = pipe(list, find(predicate)) - result // $ExpectType number | undefined + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/findIndex-spec.ts b/source/findIndex-spec.ts index c5c827e3d..a6acb5885 100644 --- a/source/findIndex-spec.ts +++ b/source/findIndex-spec.ts @@ -1,4 +1,5 @@ import { findIndex, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -7,5 +8,5 @@ it('R.findIndex', () => { list, findIndex(x => x > 2), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/findLastIndex-spec.ts b/source/findLastIndex-spec.ts index 20393e902..939416fd0 100644 --- a/source/findLastIndex-spec.ts +++ b/source/findLastIndex-spec.ts @@ -1,4 +1,5 @@ import { findLastIndex, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -6,6 +7,6 @@ describe('R.findLastIndex', () => { it('happy', () => { const predicate = (x: number) => x > 2 const result = pipe(list, findLastIndex(predicate)) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/findNth-spec.ts b/source/findNth-spec.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/source/flatMap-spec.ts b/source/flatMap-spec.ts index 2bb85856e..db24e3bb7 100644 --- a/source/flatMap-spec.ts +++ b/source/flatMap-spec.ts @@ -1,4 +1,5 @@ import { flatMap, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.flatMap', () => { it('happy', () => { @@ -10,10 +11,10 @@ describe('R.flatMap', () => { listOfLists, x => x, flatMap(x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return Number(x) + 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/flatten-spec.ts b/source/flatten-spec.ts index 8a15843c1..80bd4a520 100644 --- a/source/flatten-spec.ts +++ b/source/flatten-spec.ts @@ -1,8 +1,9 @@ import { flatten, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('flatten', () => { it('happy', () => { const result = pipe([1, 2, [3, [4]]], flatten) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/flattenObject-spec.ts b/source/flattenObject-spec.ts index 8674430fe..aab9b1658 100644 --- a/source/flattenObject-spec.ts +++ b/source/flattenObject-spec.ts @@ -1,9 +1,10 @@ import { flattenObject, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.flattenObject', () => { const result = pipe({ a: { b: 1, c: 2 } }, flattenObject) - result['a.b'] // $ExpectType number - result['a.c'] // $ExpectType number + expectTypeOf(result['a.b']).toEqualTypeOf() + expectTypeOf(result['a.c']).toEqualTypeOf() // @ts-expect-error result['a.foo'] }) diff --git a/source/groupBy-spec.ts b/source/groupBy-spec.ts index 6c8ba9c35..a360280bb 100644 --- a/source/groupBy-spec.ts +++ b/source/groupBy-spec.ts @@ -1,4 +1,5 @@ import { groupBy, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.groupBy', () => { it('happy', () => { @@ -6,6 +7,6 @@ describe('R.groupBy', () => { const list = ['foo', 'bar'] const result = pipe(list, groupBy(groupByFn)) - result // $ExpectType Partial> + expectTypeOf(result).toEqualTypeOf>>() }) }) diff --git a/source/head-spec.ts b/source/head-spec.ts index bfcef9a59..caee003bb 100644 --- a/source/head-spec.ts +++ b/source/head-spec.ts @@ -1,3 +1,4 @@ +import { describe, expectTypeOf, it } from 'vitest' import { head, last } from 'rambda' export const mixedList = [1, 'foo', 3, 'bar'] @@ -10,32 +11,35 @@ export const string = 'foo' describe('R.head', () => { it('string', () => { - head(string) // $ExpectType string - last(string) // $ExpectType string + expectTypeOf(head(string)).toEqualTypeOf() + expectTypeOf(last(string)).toEqualTypeOf() }) + it('empty string', () => { - head(emptyString) // $ExpectType string - last(emptyString) // $ExpectType string + expectTypeOf(head(emptyString)).toEqualTypeOf() + expectTypeOf(last(emptyString)).toEqualTypeOf() }) + it('array', () => { - head(numberList) // $ExpectType number - head(numberListConst) // $ExpectType 1 + expectTypeOf(head(numberList)).toEqualTypeOf() + expectTypeOf(head(numberListConst)).toEqualTypeOf<1>() - last(numberList) // $ExpectType number - last(numberListConst) // $ExpectType 3 + expectTypeOf(last(numberList)).toEqualTypeOf() + expectTypeOf(last(numberListConst)).toEqualTypeOf<3>() }) + it('empty array', () => { const list = [] as const - head(emptyList) // $ExpectType never - head(list) // $ExpectType undefined - last(emptyList) // $ExpectType never - last(list) // $ExpectType undefined + expectTypeOf(head(emptyList)).toEqualTypeOf() + expectTypeOf(head(list)).toEqualTypeOf() + expectTypeOf(last(emptyList)).toEqualTypeOf() + expectTypeOf(last(list)).toEqualTypeOf() }) it('mixed', () => { - head(mixedList) // $ExpectType string | number - head(mixedListConst) // $ExpectType 1 - last(mixedList) // $ExpectType string | number - last(mixedListConst) // $ExpectType "bar" + expectTypeOf(head(mixedList)).toEqualTypeOf() + expectTypeOf(head(mixedListConst)).toEqualTypeOf<1>() + expectTypeOf(last(mixedList)).toEqualTypeOf() + expectTypeOf(last(mixedListConst)).toEqualTypeOf<'bar'>() }) }) diff --git a/source/includes-spec.ts b/source/includes-spec.ts index c43b72fbb..178a8de73 100644 --- a/source/includes-spec.ts +++ b/source/includes-spec.ts @@ -1,17 +1,18 @@ import { pipe , includes} from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.includes', () => { it('happy', () => { const list = [{ a: { b: '1' } }, { a: { b: '2' } }, { a: { b: '3' } }] const result = pipe({ a: { b: '1' } }, includes(list)) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('with string', () => { const result = pipe('oo', includes('foo')) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('with array of strings', () => { const result = pipe('1', includes(['1','2','3'])) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/indexBy-spec.ts b/source/indexBy-spec.ts index 0f0e1b19e..b2d5c9232 100644 --- a/source/indexBy-spec.ts +++ b/source/indexBy-spec.ts @@ -1,4 +1,5 @@ import { pipe, indexBy } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.indexBy', () => { const list = [{id: 'xyz', title: 'A'}, {id: 'abc', title: 'B'}] @@ -6,6 +7,6 @@ it('R.indexBy', () => { list, indexBy('id') ) - result.abc // $ExpectType { id: string; title: string; } - result.foo // $ExpectType { id: string; title: string; } + expectTypeOf(result.abc).toEqualTypeOf<{ id: string; title: string; }>() + expectTypeOf(result.foo).toEqualTypeOf<{ id: string; title: string; }>() }) diff --git a/source/indexOf-spec.ts b/source/indexOf-spec.ts index 424b86fdd..c804042b0 100644 --- a/source/indexOf-spec.ts +++ b/source/indexOf-spec.ts @@ -1,9 +1,10 @@ import { indexOf } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.indexOf', () => { it('happy', () => { const list = [{ a: 1 }, { a: 2 }] const result = indexOf({ a: 1 })(list) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/init-spec.ts b/source/init-spec.ts index b0346cdb5..b9c817e30 100644 --- a/source/init-spec.ts +++ b/source/init-spec.ts @@ -1,10 +1,11 @@ import { map, pipe, init } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.init', () => { it('with string', () => { const result = init('foo') - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with list - using const on short array', () => { const result = pipe( @@ -12,7 +13,7 @@ describe('R.init', () => { map(x => x * 2), init, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const on empty array', () => { const result = pipe( @@ -20,7 +21,7 @@ describe('R.init', () => { map(x => x * 2), init, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const', () => { const result = pipe( @@ -28,11 +29,11 @@ describe('R.init', () => { map(x => x * 2), init, ) - result // $ExpectType [number, number] + expectTypeOf(result).toEqualTypeOf<[number, number]>() }) it('with list - mixed types', () => { const result = init(['foo', 'bar', 1, 2, 3]) - result // $ExpectType (string | number)[] + expectTypeOf(result).toEqualTypeOf<(string | number)[]>() }) }) diff --git a/source/interpolate-spec.ts b/source/interpolate-spec.ts index d7f45ee3d..19d35aab8 100644 --- a/source/interpolate-spec.ts +++ b/source/interpolate-spec.ts @@ -1,4 +1,5 @@ import { interpolate } from 'rambda' +import { expectTypeOf, it } from 'vitest' const templateInput = 'foo {{x}} baz' const templateArguments = { x: 'led zeppelin' } @@ -6,5 +7,5 @@ const templateArguments = { x: 'led zeppelin' } it('R.interpolate', () => { const result = interpolate(templateInput)(templateArguments) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/intersection-spec.ts b/source/intersection-spec.ts index 472266002..ed55d7e17 100644 --- a/source/intersection-spec.ts +++ b/source/intersection-spec.ts @@ -1,4 +1,5 @@ import { intersection } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list1 = [1, 2, 3] const list2 = [1, 3, 5] @@ -6,6 +7,6 @@ const list2 = [1, 3, 5] describe('R.intersection', () => { it('happy', () => { const result = intersection(list1)(list2) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/intersectionWith-spec.ts b/source/intersectionWith-spec.ts index 4da784171..cf7b72b35 100644 --- a/source/intersectionWith-spec.ts +++ b/source/intersectionWith-spec.ts @@ -1,4 +1,5 @@ import { intersectionWith, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list1 = [1, 2, 3] const list2 = [1, 3, 5] @@ -9,6 +10,6 @@ describe('R.intersectionWith', () => { list1, intersectionWith((x, y) => x === y, list2), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/intersperse-spec.ts b/source/intersperse-spec.ts index 8bf0ab8bc..ad3f30de0 100644 --- a/source/intersperse-spec.ts +++ b/source/intersperse-spec.ts @@ -1,8 +1,9 @@ import { intersperse } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.intersperse', () => { it('curried', () => { const result = intersperse('|')(['foo', 'bar']) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/join-spec.ts b/source/join-spec.ts index f6b682974..62d9dbebb 100644 --- a/source/join-spec.ts +++ b/source/join-spec.ts @@ -1,6 +1,7 @@ import { join, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.join', () => { const result = pipe([1, 2, 3], join('|')) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/lastIndexOf-spec.ts b/source/lastIndexOf-spec.ts index c3b40878f..bc1030758 100644 --- a/source/lastIndexOf-spec.ts +++ b/source/lastIndexOf-spec.ts @@ -1,6 +1,9 @@ import { lastIndexOf, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.lastIndexOf', () => { - const result = pipe([{ a: 1 }, { a: 2 }, { a: 3 }], lastIndexOf({ a: 2 })) - result // $ExpectType number + it('happy', () => { + const result = pipe([{ a: 1 }, { a: 2 }, { a: 3 }], lastIndexOf({ a: 2 })) + expectTypeOf(result).toEqualTypeOf() + }) }) diff --git a/source/map-spec.ts b/source/map-spec.ts index b52bab589..431008af3 100644 --- a/source/map-spec.ts +++ b/source/map-spec.ts @@ -1,3 +1,4 @@ +import { expectTypeOf, it } from 'vitest' import { map, pipe } from 'rambda' const list = [1, 2, 3] @@ -7,11 +8,11 @@ it('R.map', () => { list, x => x, map(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) it('R.map - index in functor', () => { @@ -19,24 +20,24 @@ it('R.map - index in functor', () => { list, x => x, map((x, i) => { - x // $ExpectType number - i // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(i).toEqualTypeOf() return String(x) }), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) it('R.map - without pipe', () => { map(x => { - x // $ExpectType unknown + expectTypeOf(x).toEqualTypeOf() })([1, 2, 3]) }) it('R.map - without pipe but explicitly typed', () => { const result = map(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) })([1, 2, 3]) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/mapAsync-spec.ts b/source/mapAsync-spec.ts index 2f1ce89c5..485360201 100644 --- a/source/mapAsync-spec.ts +++ b/source/mapAsync-spec.ts @@ -1,4 +1,5 @@ import { mapAsync, pipeAsync, map } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = ['a', 'bc', 'def'] const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) @@ -8,7 +9,7 @@ it('R.mapAsync', async () => { list, mapAsync(async x => { await delay(100) - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x.length % 2 ? x.length + 1 : x.length + 10 }), x => x, @@ -18,5 +19,5 @@ it('R.mapAsync', async () => { return x + 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/mapChain-spec.ts b/source/mapChain-spec.ts index c2c2edcc2..6bd1e0873 100644 --- a/source/mapChain-spec.ts +++ b/source/mapChain-spec.ts @@ -1,4 +1,5 @@ import { mapChain, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -7,16 +8,16 @@ it('R.mapChain', () => { list, mapChain( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }, x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, ), ) - result // $ExpectType boolean[] + expectTypeOf(result).toEqualTypeOf() }) it('R.mapChain - with index', () => { @@ -24,17 +25,17 @@ it('R.mapChain - with index', () => { list, mapChain( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }, (x, i) => { - i // $ExpectType number - x // $ExpectType string + expectTypeOf(i).toEqualTypeOf() + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, ), ) - result // $ExpectType boolean[] + expectTypeOf(result).toEqualTypeOf() }) it('R.mapChain - 3 functions', () => { @@ -43,18 +44,18 @@ it('R.mapChain - 3 functions', () => { x => x, mapChain( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return String(x) }, x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, x => { - x // $ExpectType boolean + expectTypeOf(x).toEqualTypeOf() return x ? 'foo' : 'bar' }, ), ) - result // $ExpectType ("foo" | "bar")[] + expectTypeOf(result).toEqualTypeOf<("foo" | "bar")[]>() }) diff --git a/source/mapKeys-spec.ts b/source/mapKeys-spec.ts index d0ae06884..b12db5f32 100644 --- a/source/mapKeys-spec.ts +++ b/source/mapKeys-spec.ts @@ -1,4 +1,5 @@ import { mapKeys, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.mapKeys', () => { const result = pipe( @@ -6,5 +7,5 @@ it('R.mapKeys', () => { mapKeys((prop, x) => `${prop}-${x}`), mapKeys(prop => `${prop}-${prop}`), ) - result // $ExpectType Record + expectTypeOf(result).toEqualTypeOf>() }) diff --git a/source/mapObject-spec.ts b/source/mapObject-spec.ts index c2f650c10..14827d9e5 100644 --- a/source/mapObject-spec.ts +++ b/source/mapObject-spec.ts @@ -1,51 +1,52 @@ import { mapObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.mapObject', () => { it('iterable with one arguments', () => { const result = pipe( { a: 1 }, mapObject(a => { - a // $ExpectType number + expectTypeOf(a).toEqualTypeOf() return `${a}` }), ) - result // $ExpectType { a: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; }>() }) it('iterable with one arguments', () => { const result = pipe( { a: [1,2,3], b: 'foo' }, mapObject(a => { - a // $ExpectType string | number[] + expectTypeOf(a).toEqualTypeOf() return typeof a as string }), ) - result // $ExpectType { a: string; b: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; b: string; }>() }) it('iterable with two arguments', () => { const result = pipe( { a: 1, b: 'foo' }, mapObject((a, b) => { - a // $ExpectType string | number - b // $ExpectType "a" | "b" + expectTypeOf(a).toEqualTypeOf() + expectTypeOf(b).toEqualTypeOf<"a" | "b">() return `${a}` }), ) - result // $ExpectType { a: string; b: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; b: string; }>() }) it('iterable with three arguments', () => { const result = pipe( { a: 1, b: 'foo' }, mapObject((a, b, c) => { - a // $ExpectType string | number - b // $ExpectType "a" | "b" - c // $ExpectType { a: number; b: string; } + expectTypeOf(a).toEqualTypeOf() + expectTypeOf(b).toEqualTypeOf<"a" | "b">() + expectTypeOf(c).toEqualTypeOf<{ a: number; b: string; }>() return `${a}` }), ) - result // $ExpectType { a: string; b: string; } + expectTypeOf(result).toEqualTypeOf<{ a: string; b: string; }>() }) }) diff --git a/source/mapObjectAsync-spec.ts b/source/mapObjectAsync-spec.ts index 004a49f71..83924e319 100644 --- a/source/mapObjectAsync-spec.ts +++ b/source/mapObjectAsync-spec.ts @@ -1,12 +1,13 @@ import { mapObjectAsync, pipeAsync } from 'rambda' import { delay } from 'rambdax' +import { expectTypeOf, it } from 'vitest' it('R.mapObjectAsync', async () => { const result = await pipeAsync( { a: 'foo', b: 'bar' }, mapObjectAsync(async x => { await delay(100) - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x.length % 2 ? x.length + 1 : x.length + 10 }), x => x, @@ -15,6 +16,6 @@ it('R.mapObjectAsync', async () => { return x + 1 }), ) - result.a // $ExpectType number - result.b // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) diff --git a/source/mapPropObject-spec.ts b/source/mapPropObject-spec.ts index 4e9988ec2..f047fa61f 100644 --- a/source/mapPropObject-spec.ts +++ b/source/mapPropObject-spec.ts @@ -1,11 +1,12 @@ import { map, mapPropObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.mapPropObject', () => { it('iterable with one arguments', () => { const result = pipe( { a: [1,2,3], b: 'foo' }, mapPropObject('a', x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return { a: x, flag: x > 2, @@ -13,21 +14,21 @@ describe('R.mapPropObject', () => { }), ) - result.a // $ExpectType { a: number; flag: boolean; }[] - result.b // $ExpectType string + expectTypeOf(result.a).toEqualTypeOf<{ a: number; flag: boolean; }[]>() + expectTypeOf(result.b).toEqualTypeOf() }) it('iterable with two arguments', () => { const result = pipe( { a: [1,2,3], b: 'foo' }, mapPropObject('a', (x, list) => { - x // $ExpectType number - list // $ExpectType number[] + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(list).toEqualTypeOf() return list.length }), ) - result.a // $ExpectType number[] - result.b // $ExpectType string + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) it('more complex example', () => { @@ -35,13 +36,13 @@ describe('R.mapPropObject', () => { [{a:[true, false, true], b: 'foo'}], map( mapPropObject( 'a',(a) => { - a // $ExpectType boolean + expectTypeOf(a).toEqualTypeOf() return {a, b: 2} }) ) ) - result[0].a[0].a // $ExpectType boolean - result[0].a[0].b // $ExpectType number + expectTypeOf(result[0].a[0].a).toEqualTypeOf() + expectTypeOf(result[0].a[0].b).toEqualTypeOf() }) }) diff --git a/source/match-spec.ts b/source/match-spec.ts index 12d8ac039..54c30ca66 100644 --- a/source/match-spec.ts +++ b/source/match-spec.ts @@ -1,10 +1,11 @@ import { match } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const str = 'foo bar' describe('R.match', () => { it('happy', () => { const result = match(/foo/)(str) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/maxBy-spec.ts b/source/maxBy-spec.ts index 27d5d7e4a..875148832 100644 --- a/source/maxBy-spec.ts +++ b/source/maxBy-spec.ts @@ -1,4 +1,5 @@ import { maxBy, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const first = 1 const second = 2 @@ -8,5 +9,5 @@ it('R.maxBy', () => { second, maxBy(x => (x % 2 === 0 ? 1 : -1), first), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/merge-spec.ts b/source/merge-spec.ts index 2f121a482..392e4c9e3 100644 --- a/source/merge-spec.ts +++ b/source/merge-spec.ts @@ -1,7 +1,8 @@ import { merge, mergeTypes, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.merge', () => { const result = pipe({ foo: 1 }, merge({ bar: 2 }), mergeTypes) - result.foo // $ExpectType number - result.bar // $ExpectType number + expectTypeOf(result.foo).toEqualTypeOf() + expectTypeOf(result.bar).toEqualTypeOf() }) diff --git a/source/mergeDeep.js b/source/mergeDeep.js new file mode 100644 index 000000000..5f37fbcb6 --- /dev/null +++ b/source/mergeDeep.js @@ -0,0 +1,24 @@ +import { type } from './type.js' + +const isObject = (x) => type(x) === 'Object' + +function mergeDeepFn(source, objectWithNewProps) { + return [source, objectWithNewProps].reduce((prev, obj) => { + Object.keys(obj).forEach((key) => { + const pVal = prev[key] + const oVal = obj[key] + + if (isObject(pVal) && isObject(oVal)) { + prev[key] = mergeDeepFn(pVal, oVal) + } else { + prev[key] = oVal + } + }) + + return prev + }, {}) +} + +export function mergeDeep(source) { + return (objectWithNewProps) => mergeDeepFn(source, objectWithNewProps) +} diff --git a/source/mergeDeep.spec.js b/source/mergeDeep.spec.js new file mode 100644 index 000000000..c55e9b5eb --- /dev/null +++ b/source/mergeDeep.spec.js @@ -0,0 +1,29 @@ +import { mergeDeep } from './mergeDeep.js' + +test('happy', () => { + const source = { + a: 1, + b: [1, 2], + c: { + d: 1, + f: 2, + e: [1, 2], + h: [1, 2], + }, + } + const objectWithNewProps = { + b: [3], + c: { + f: 3, + s: 3, + e: [3], + }, + q: 3, + } + expect(mergeDeep(source)(objectWithNewProps)).toEqual({ + a: 1, + b: [3], + c: { d: 1, f: 3, e: [3], h: [1, 2], s: 3 }, + q: 3, + }) +}) diff --git a/source/middle-spec.ts b/source/middle-spec.ts index 529ae45ca..608fb3494 100644 --- a/source/middle-spec.ts +++ b/source/middle-spec.ts @@ -1,10 +1,11 @@ import { map, middle, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.middle', () => { it('with string', () => { const result = middle('foo') - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with list - using const on short array', () => { const result = pipe( @@ -12,7 +13,7 @@ describe('R.middle', () => { map(x => x * 2), middle, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const on empty array', () => { const result = pipe( @@ -20,7 +21,7 @@ describe('R.middle', () => { map(x => x * 2), middle, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const', () => { const result = pipe( @@ -28,11 +29,11 @@ describe('R.middle', () => { map(x => x * 2), middle, ) - result // $ExpectType [number, number] + expectTypeOf(result).toEqualTypeOf<[number, number]>() }) it('with list - mixed types', () => { const result = middle(['foo', 'bar', 1, 2, 3]) - result // $ExpectType (string | number)[] + expectTypeOf(result).toEqualTypeOf<(string | number)[]>() }) }) diff --git a/source/modifyPath-spec.ts b/source/modifyPath-spec.ts index f77cb6f4c..945346a04 100644 --- a/source/modifyPath-spec.ts +++ b/source/modifyPath-spec.ts @@ -1,4 +1,5 @@ import { modifyPath, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { a: { b: { c: 1 } } } @@ -8,13 +9,13 @@ describe('R.modifyPath', () => { obj, modifyPath(['a', 'b', 'c'], (x: number) => String(x)), ) - result.a.b.c // $ExpectType string + expectTypeOf(result.a.b.c).toEqualTypeOf() }) it('string path', () => { const result = pipe( obj, modifyPath('a.b.c', (x: number) => String(x)), ) - result.a.b.c // $ExpectType string + expectTypeOf(result.a.b.c).toEqualTypeOf() }) }) diff --git a/source/modifyProp-spec.ts b/source/modifyProp-spec.ts index 2a8ff7e20..8c39c4e6b 100644 --- a/source/modifyProp-spec.ts +++ b/source/modifyProp-spec.ts @@ -1,11 +1,12 @@ import { modifyProp, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.modify', () => { const result = pipe( { a: 1, b: 2, c: { d: 3 } }, modifyProp('a', val => val + 1), ) - result // $ExpectType { a: number; b: number; c: { d: number; }; } + expectTypeOf(result).toEqualTypeOf<{ a: number; b: number; c: { d: number; }; }>() pipe( { a: 1, b: 2, c: { d: 3 } }, diff --git a/source/none-spec.ts b/source/none-spec.ts index f2d3d4c00..d56048479 100644 --- a/source/none-spec.ts +++ b/source/none-spec.ts @@ -1,4 +1,5 @@ import { none, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.none', () => { it('happy', () => { @@ -6,6 +7,6 @@ describe('R.none', () => { [1, 2, 3], none(x => x > 0), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/objOf-spec.ts b/source/objOf-spec.ts index beaee4a37..9ce6e8e07 100644 --- a/source/objOf-spec.ts +++ b/source/objOf-spec.ts @@ -1,11 +1,12 @@ import { objOf, pipe } from 'rambda' +import { expectTypeOf, it } from 'vitest' const key = 'foo' const value = 42 it('R.objOf', () => { const result = pipe(value, objOf(key)) - result.foo // $ExpectType number + expectTypeOf(result.foo).toEqualTypeOf() // @ts-expect-error result.bar }) diff --git a/source/objectIncludes-spec.ts b/source/objectIncludes-spec.ts index da5d0deca..fee39863c 100644 --- a/source/objectIncludes-spec.ts +++ b/source/objectIncludes-spec.ts @@ -1,12 +1,13 @@ import { objectIncludes, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.objectIncludes', () => { it('happy', () => { const result = pipe({ a: 1, b: 2, c: { d: 3 } }, objectIncludes({ a: 2 })) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) it('nested', () => { const result = pipe({ a: 1, b: 2, c: { d: 3 } }, objectIncludes({ c: { d: 3 } })) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/omit-spec.ts b/source/omit-spec.ts index 15fae9357..5dec03889 100644 --- a/source/omit-spec.ts +++ b/source/omit-spec.ts @@ -1,14 +1,15 @@ import { omit, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: 'foo', b: 2, c: 3 } describe('R.omit', () => { it('with string as input', () => { const result = pipe(input, omit('a,b')) - result.c // $ExpectType number + expectTypeOf(result.c).toEqualTypeOf() }) it('with array as input', () => { const result = pipe(input, omit(['a', 'b'])) - result.c // $ExpectType number + expectTypeOf(result.c).toEqualTypeOf() }) }) diff --git a/source/partition-spec.ts b/source/partition-spec.ts index 04ef16149..6ae4cf81a 100644 --- a/source/partition-spec.ts +++ b/source/partition-spec.ts @@ -1,4 +1,5 @@ import { partition, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.partition', () => { it('happy', () => { @@ -8,14 +9,14 @@ describe('R.partition', () => { const list = [1, 2, 3, 4] const result = pipe(list, partition(predicate)) - result // $ExpectType [number[], number[]] + expectTypeOf(result).toEqualTypeOf<[number[], number[]]>() }) it('with simple object', () => { const result = pipe( [{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }], partition(x => x.a > 2), ) - result // $ExpectType [{ a: number; }[], { a: number; }[]] + expectTypeOf(result).toEqualTypeOf<[{ a: number; }[], { a: number; }[]]>() }) it('with complex object', () => { interface Foo { @@ -27,6 +28,6 @@ describe('R.partition', () => { const list1: (Foo | Bar)[] = [{ a: 1 }, { b: 2 }, { a: 3 }, { b: 4 }] const filterFoo = (x: Foo | Bar): x is Foo => 'a' in x const result = pipe(list1, partition(filterFoo)) - result // $ExpectType [Foo[], Bar[]] + expectTypeOf(result).toEqualTypeOf<[Foo[], Bar[]]>() }) }) diff --git a/source/partitionObject-spec.ts b/source/partitionObject-spec.ts index 02cc39d16..dc377461c 100644 --- a/source/partitionObject-spec.ts +++ b/source/partitionObject-spec.ts @@ -1,4 +1,5 @@ import { partitionObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.partition', () => { it('happy', () => { @@ -6,7 +7,7 @@ describe('R.partition', () => { { a: 1, b: 2 }, partitionObject((x, prop) => x> 1 || prop === 'c'), ) - result // $ExpectType [Record, Record] + expectTypeOf(result).toEqualTypeOf<[Record, Record]>() }) it('with complex object', () => { interface Foo { @@ -23,6 +24,6 @@ describe('R.partition', () => { } const filterFoo = (x: Foo | Bar): x is Foo => 'a' in x const result = pipe(obj, partitionObject(filterFoo)) - result // $ExpectType [Record, Record] + expectTypeOf(result).toEqualTypeOf<[Record, Record]>() }) }) diff --git a/source/path-spec.ts b/source/path-spec.ts index 0bc01471b..21657050b 100644 --- a/source/path-spec.ts +++ b/source/path-spec.ts @@ -1,4 +1,5 @@ import { path, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: { b: { c: true } } } @@ -6,11 +7,11 @@ describe('R.path with string as path', () => { it('happy', () => { const result = pipe(input, path(['a', 'b'])) const resultStringInput = pipe(input, path('a.b.c')) - result.c // $ExpectType boolean - resultStringInput // $ExpectType boolean + expectTypeOf(result.c).toEqualTypeOf() + expectTypeOf(resultStringInput).toEqualTypeOf() }) it('happy', () => { const result = pipe([1, 2, 3], path([1])) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/pathSatisfies-spec.ts b/source/pathSatisfies-spec.ts index ac87fb1ee..5c2e80d8e 100644 --- a/source/pathSatisfies-spec.ts +++ b/source/pathSatisfies-spec.ts @@ -1,4 +1,5 @@ import { pathSatisfies, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: { b: { c: 'bar' } } } @@ -8,7 +9,7 @@ describe('R.pathSatisfies', () => { input, pathSatisfies( x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, ['a', 'b', 'c'], @@ -17,11 +18,11 @@ describe('R.pathSatisfies', () => { const resultStringInput = pipe( input, pathSatisfies(x => { - x // $ExpectType string + expectTypeOf(x).toEqualTypeOf() return x !== 'foo' }, 'a.b.c'), ) - result // $ExpectType boolean - resultStringInput // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() + expectTypeOf(resultStringInput).toEqualTypeOf() }) }) diff --git a/source/pick-spec.ts b/source/pick-spec.ts index f1eef6554..835ed5456 100644 --- a/source/pick-spec.ts +++ b/source/pick-spec.ts @@ -1,17 +1,18 @@ import { pick, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input = { a: 'foo', c: 3 } describe('R.pick', () => { it('with string as input', () => { const result = pipe(input, pick('a,c')) - result.a // $ExpectType string - result.c // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) it('with array as input', () => { const result = pipe(input, pick(['a', 'c'])) - result.a // $ExpectType string - result.c // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) it('throws error if some keys do not exist', () => { // @ts-expect-error diff --git a/source/pipe-spec.ts b/source/pipe-spec.ts index 6d0532579..16d6203dd 100644 --- a/source/pipe-spec.ts +++ b/source/pipe-spec.ts @@ -15,6 +15,7 @@ import { split, union, } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' type IsNotNever = [T] extends [never] ? false : true type Expect = T @@ -111,11 +112,11 @@ describe('real use cases - books', () => { drop(1), // without converting to `as FamousBook`, endsWith will pick up `Book` as type tapFn(union([awardedBrothersKaramazov]), (a, b) => { - a // $ExpectType Book[] - b // $ExpectType Book[] + expectTypeOf(a).toEqualTypeOf() + expectTypeOf(b).toEqualTypeOf() }), find(x => { - x // $ExpectType Book + expectTypeOf(x).toEqualTypeOf() return x.title === 'Brothers Karamazov' }), x => [x], @@ -139,7 +140,7 @@ describe('real use cases - books', () => { simplify, pick('year'), ) - const result = getResult(zaratustra) + const result = getResult(awardedZaratustraToRead as BaseBook) const final: Expect> = true }) it('case 3', () => { @@ -149,7 +150,7 @@ describe('real use cases - books', () => { 3,The Third,2018` const result = pipe(tableData, split('\n'), map(split(','))) - result // $ExpectType string[][] + expectTypeOf(result).toEqualTypeOf() }) }) @@ -166,7 +167,7 @@ it('R.pipe', () => { x => ({ ...x, c: x.b + 'bar' }), ) - result.a // $ExpectType number - result.b // $ExpectType string - result.c // $ExpectType string + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() + expectTypeOf(result.c).toEqualTypeOf() }) diff --git a/source/pipeAsync-spec.ts b/source/pipeAsync-spec.ts index 659a40f62..a6411b9a1 100644 --- a/source/pipeAsync-spec.ts +++ b/source/pipeAsync-spec.ts @@ -1,21 +1,22 @@ import { pipeAsync } from 'rambda' import { delay } from 'rambdax' +import { describe, expectTypeOf, it } from 'vitest' describe('R.pipeAsync', () => { it('happy', async () => { const result = await pipeAsync( 4, async x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() await delay(100) return x + 1 }, x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return Promise.resolve([x]) }, ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/pluck-spec.ts b/source/pluck-spec.ts index 3c15710ec..49a3d25d8 100644 --- a/source/pluck-spec.ts +++ b/source/pluck-spec.ts @@ -1,4 +1,5 @@ import { pipe, pluck } from 'rambda'; +import { expectTypeOf, it } from 'vitest' it("R.pluck", () => { const input = [ @@ -6,7 +7,7 @@ it("R.pluck", () => { { a: 2, b: "bar" }, ]; const result = pipe(input, pluck("b")); - result; // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }); it("R.pluck without R.pipe", () => { @@ -19,5 +20,5 @@ it("R.pluck without R.pipe", () => { }, ]; const sentences = pluck("text")(content); - sentences; // $ExpectType string[] + expectTypeOf(sentences).toEqualTypeOf() }); diff --git a/source/prop-spec.ts b/source/prop-spec.ts index 8b75f8731..91ce6d335 100644 --- a/source/prop-spec.ts +++ b/source/prop-spec.ts @@ -1,14 +1,15 @@ import { map, pipe, prop } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.prop', () => { it('happy', () => { const result = pipe({ a: 1 }, prop('a')) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) it('alike R.pluck', () => { const result = pipe([{ a: 1 }, { a: 2 }], map(prop('a'))) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/propEq-spec.ts b/source/propEq-spec.ts new file mode 100644 index 000000000..71fb73c3d --- /dev/null +++ b/source/propEq-spec.ts @@ -0,0 +1,11 @@ +import { pipe, propEq } from 'rambda' +import { expectTypeOf, it } from 'vitest' + +const obj = { foo: 'bar' } +const valueToMatch = 'bar' +const propToFind = 'foo' + +it('R.propEq', () => { + const result = pipe(obj, propEq(valueToMatch, propToFind)) + expectTypeOf(result).toEqualTypeOf() +}) diff --git a/source/propOr-spec.ts b/source/propOr-spec.ts index fc2021722..ebae3dc79 100644 --- a/source/propOr-spec.ts +++ b/source/propOr-spec.ts @@ -1,4 +1,5 @@ import { propOr } from 'rambda' +import { expectTypeOf, it } from 'vitest' const obj = { foo: 'bar' } const property = 'foo' @@ -6,5 +7,5 @@ const fallback = 'fallback' it('R.propOr', () => { const result = propOr(property, fallback)(obj) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/propSatisfies-spec.ts b/source/propSatisfies-spec.ts index e0805b153..e2608476c 100644 --- a/source/propSatisfies-spec.ts +++ b/source/propSatisfies-spec.ts @@ -1,4 +1,5 @@ import { pipe, propSatisfies } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { a: 1 } @@ -7,11 +8,11 @@ describe('R.propSatisfies', () => { const result = pipe( obj, propSatisfies(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 0 }, 'a'), ) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/range-spec.ts b/source/range-spec.ts index 40bcf85ed..25cd5c2ab 100644 --- a/source/range-spec.ts +++ b/source/range-spec.ts @@ -1,9 +1,10 @@ import { range } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.range', () => { it('curried', () => { const result = [range(1, 4), range(1)] - result // $ExpectType number[][] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/range.js b/source/range.js index 94e3f672b..3491f3da0 100644 --- a/source/range.js +++ b/source/range.js @@ -1,7 +1,8 @@ export function range(a, b) { const start = b === undefined ? 0 : a const end = b === undefined ? a : b - if (end<= start) { + if (end === start) return [start] + if (end < start) { return [] } const len = end - start diff --git a/source/range.spec.js b/source/range.spec.js index 49368ca1c..205f84cff 100644 --- a/source/range.spec.js +++ b/source/range.spec.js @@ -2,7 +2,10 @@ import { range } from './range.js' test('happy', () => { expect(range(5)).toEqual([0, 1, 2, 3, 4, 5]) - expect(range(3,5)).toEqual([3, 4, 5]) - expect(range(5,3)).toEqual([]) - expect(range(0)).toEqual([]) + expect(range(3, 5)).toEqual([3, 4, 5]) + expect(range(5, 3)).toEqual([]) + expect(range(5, 5)).toEqual([5]) + expect(range(0)).toEqual([0]) + expect(range(1)).toEqual([0, 1]) + expect(range(2)).toEqual([0, 1, 2]) }) diff --git a/source/rangeDescending.js b/source/rangeDescending.js index 03fce1947..cf5291a92 100644 --- a/source/rangeDescending.js +++ b/source/rangeDescending.js @@ -1,6 +1,7 @@ export function rangeDescending(start, b) { const end = b === undefined ? 0 : b - if (start <= end) { + if (start === end) return [start] + if (start < end) { return [] } const len = start - end diff --git a/source/rangeDescending.spec.js b/source/rangeDescending.spec.js index ac9bed04e..79039cbad 100644 --- a/source/rangeDescending.spec.js +++ b/source/rangeDescending.spec.js @@ -2,7 +2,10 @@ import { rangeDescending } from './rangeDescending.js' test('happy', () => { expect(rangeDescending(5)).toEqual([5, 4, 3, 2, 1, 0]) - expect(rangeDescending(7,3)).toEqual([7, 6, 5, 4,3]) - expect(rangeDescending(5, 7)).toEqual([]) - expect(rangeDescending(5, 5)).toEqual([]) + expect(rangeDescending(7, 3)).toEqual([7, 6, 5, 4, 3]) + expect(rangeDescending(0)).toEqual([0]) + expect(rangeDescending(1)).toEqual([1, 0]) + expect(rangeDescending(2)).toEqual([2, 1, 0]) + expect(rangeDescending(5, 7)).toEqual([]) + expect(rangeDescending(5, 5)).toEqual([5]) }) diff --git a/source/reduce-spec.ts b/source/reduce-spec.ts index 97b95fbf1..58594d004 100644 --- a/source/reduce-spec.ts +++ b/source/reduce-spec.ts @@ -1,9 +1,10 @@ import { pipe, reduce } from 'rambda' +import { expectTypeOf, it } from 'vitest' it('R.reduce', () => { const result = pipe( [1, 2, 3], reduce((acc, val) => acc + val, 10), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/reject-spec.ts b/source/reject-spec.ts index 6fa72992c..4c2c67e5e 100644 --- a/source/reject-spec.ts +++ b/source/reject-spec.ts @@ -1,4 +1,5 @@ import { reject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -7,22 +8,22 @@ describe('R.reject with array', () => { const result = pipe( list, reject(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with index', () => { const result = pipe( list, reject((x: number, i: number) => { - x // $ExpectType number - i // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(i).toEqualTypeOf() return x > 1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('narrowing type', () => { interface Foo { @@ -43,7 +44,7 @@ describe('R.reject with array', () => { testList, reject(rejectBar), ) - result // $ExpectType (Foo | Baz)[] + expectTypeOf(result).toEqualTypeOf<(Foo | Baz)[]>() }) it('narrowing type - readonly', () => { interface Foo { @@ -64,17 +65,17 @@ describe('R.reject with array', () => { testList, reject(rejectBar), ) - result // $ExpectType (Foo | Baz)[] + expectTypeOf(result).toEqualTypeOf<(Foo | Baz)[]>() }) it('rejecting NonNullable', () => { const testList = [1, 2, null, undefined, 3] const result = pipe(testList, reject(Boolean)) - result // $ExpectType (null | undefined)[] + expectTypeOf(result).toEqualTypeOf<(null | undefined)[]>() }) it('rejecting NonNullable - readonly', () => { const testList = [1, 2, null, undefined, 3] as const const result = pipe(testList, reject(Boolean)) - result // $ExpectType (null | undefined)[] + expectTypeOf(result).toEqualTypeOf<(null | undefined)[]>() // @ts-expect-error result.includes(1) }) diff --git a/source/rejectObject-spec.ts b/source/rejectObject-spec.ts index 75eb438ac..aabf3d17a 100644 --- a/source/rejectObject-spec.ts +++ b/source/rejectObject-spec.ts @@ -1,14 +1,15 @@ import { filterObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.filterObject', () => { it('require explicit type', () => { const result = pipe( { a: 1, b: 2 }, filterObject<{ b: number }>(a => { - a // $ExpectType number + expectTypeOf(a).toEqualTypeOf() return a > 1 }), ) - result.b // $ExpectType number + expectTypeOf(result.b).toEqualTypeOf() }) }) diff --git a/source/replace-spec.ts b/source/replace-spec.ts index f600dc280..9d6e72227 100644 --- a/source/replace-spec.ts +++ b/source/replace-spec.ts @@ -1,4 +1,5 @@ import { replace } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const str = 'foo bar foo' const replacer = 'bar' @@ -7,11 +8,11 @@ describe('R.replace', () => { it('happy', () => { const result = replace(/foo/g, replacer)(str) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with string as search pattern', () => { const result = replace('foo', replacer)(str) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/replaceAll-spec.ts b/source/replaceAll-spec.ts index 334e85727..4acabd413 100644 --- a/source/replaceAll-spec.ts +++ b/source/replaceAll-spec.ts @@ -1,4 +1,5 @@ import { pipe, replaceAll } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const str = 'foo bar foo' const replacer = 'bar' @@ -8,6 +9,6 @@ describe('R.replaceAll', () => { it('happy', () => { const result = pipe(str, replaceAll(patterns, replacer)) - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/shuffle-spec.ts b/source/shuffle-spec.ts index f4136975c..611b15a49 100644 --- a/source/shuffle-spec.ts +++ b/source/shuffle-spec.ts @@ -1,10 +1,11 @@ import { shuffle } from 'rambdax' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3, 4, 5] describe('R.shuffle', () => { it('happy', () => { const result = shuffle(list) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/sort-spec.ts b/source/sort-spec.ts index b7829a634..c169293dd 100644 --- a/source/sort-spec.ts +++ b/source/sort-spec.ts @@ -1,4 +1,5 @@ import { pipe, sort } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [3, 0, 5, 2, 1] @@ -7,7 +8,7 @@ describe('R.sort', () => { const result = sort((a, b) => { return a > b ? 1 : -1 })(list) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('within pipe', () => { const result = pipe( @@ -16,6 +17,6 @@ describe('R.sort', () => { return a > b ? 1 : -1 }), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/sortBy-spec.ts b/source/sortBy-spec.ts index 7def8850d..0e5d37a73 100644 --- a/source/sortBy-spec.ts +++ b/source/sortBy-spec.ts @@ -1,4 +1,5 @@ import { pipe, sortBy } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.sortBy', () => { it('passing type to sort function and list', () => { @@ -9,6 +10,6 @@ describe('R.sortBy', () => { }), ) - result[0].a // $ExpectType number + expectTypeOf(result[0].a).toEqualTypeOf() }) }) diff --git a/source/sortByPath-spec.ts b/source/sortByPath-spec.ts index 55af742af..6f4da2d97 100644 --- a/source/sortByPath-spec.ts +++ b/source/sortByPath-spec.ts @@ -1,15 +1,16 @@ import { pipe, sortByPath } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const input= [{ a: { b: 2 } }, { a: { b: 1 } }] describe('R.sortByPath', () => { it('with string as path', () => { const result = pipe(input, sortByPath('a.b')) - result[0].a.b // $ExpectType number + expectTypeOf(result[0].a.b).toEqualTypeOf() }) it('with list of strings as path', () => { const result = pipe(input, sortByPath(['a', 'b'])) - result[0].a.b // $ExpectType number + expectTypeOf(result[0].a.b).toEqualTypeOf() }) it('with non-existent path', () => { // @ts-expect-error diff --git a/source/sortByProps-spec.ts b/source/sortByProps-spec.ts index a0a66cd28..690b55ad6 100644 --- a/source/sortByProps-spec.ts +++ b/source/sortByProps-spec.ts @@ -1,4 +1,5 @@ import { sortByProps } from 'rambdax' +import { describe, expectTypeOf, it } from 'vitest' const list = [{ a: { b: 3 } }, { a: { b: 2 } }, { a: { b: 1 } }] @@ -6,11 +7,11 @@ describe('R.sortByProps', () => { it('happy', () => { const result = sortByProps(['foo.bar', 'a.b'], list) - result // $ExpectType { a: { b: number; }; }[] + expectTypeOf(result).toEqualTypeOf<{ a: { b: number; }; }[]>() }) it('curried', () => { const result = sortByProps(['foo.bar', 'a.b'])(list) - result // $ExpectType { a: { b: number; }; }[] + expectTypeOf(result).toEqualTypeOf<{ a: { b: number; }; }[]>() }) }) diff --git a/source/sortObject-spec.ts b/source/sortObject-spec.ts index 6c2fa542f..ba14ce8d3 100644 --- a/source/sortObject-spec.ts +++ b/source/sortObject-spec.ts @@ -1,4 +1,5 @@ import { sortObject, pipe } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { c: 1, @@ -11,26 +12,26 @@ describe('R.sortObject', () => { const result = pipe( obj, sortObject((propA, propB, valueA, valueB) => { - propA // $ExpectType string - propB // $ExpectType string - valueA // $ExpectType number - valueB // $ExpectType number + expectTypeOf(propA).toEqualTypeOf() + expectTypeOf(propB).toEqualTypeOf() + expectTypeOf(valueA).toEqualTypeOf() + expectTypeOf(valueB).toEqualTypeOf() return propA > propB ? -1 : 1 }), ) - result // $ExpectType { c: number; a: number; b: number; } + expectTypeOf(result).toEqualTypeOf<{ c: number; a: number; b: number; }>() }) it('predicate with only property arguments', () => { const result = pipe( obj, sortObject((propA, propB) => { - propA // $ExpectType string - propB // $ExpectType string + expectTypeOf(propA).toEqualTypeOf() + expectTypeOf(propB).toEqualTypeOf() return propA > propB ? -1 : 1 }), ) - result // $ExpectType { c: number; a: number; b: number; } + expectTypeOf(result).toEqualTypeOf<{ c: number; a: number; b: number; }>() }) }) diff --git a/source/splitEvery-spec.ts b/source/splitEvery-spec.ts index 6d12120da..505ac333a 100644 --- a/source/splitEvery-spec.ts +++ b/source/splitEvery-spec.ts @@ -1,10 +1,11 @@ import { pipe, splitEvery } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const list = [1, 2, 3, 4, 5, 6, 7] describe('R.splitEvery', () => { it('happy', () => { const result = pipe(list, splitEvery(3)) - result // $ExpectType number[][] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/splitEvery.js b/source/splitEvery.js index 4441cd3d2..20726bf36 100644 --- a/source/splitEvery.js +++ b/source/splitEvery.js @@ -1,4 +1,4 @@ -export function splitEvery(sliceLength) { +export function splitEvery(sliceLength, strict = false) { return list => { if (sliceLength < 1) { throw new Error('First argument to splitEvery must be a positive integer') @@ -8,6 +8,7 @@ export function splitEvery(sliceLength) { let counter = 0 while (counter < list.length) { + if (strict && counter + sliceLength > list.length) break; willReturn.push(list.slice(counter, (counter += sliceLength))) } diff --git a/source/splitEveryStrict.js b/source/splitEveryStrict.js new file mode 100644 index 000000000..b12ccfaac --- /dev/null +++ b/source/splitEveryStrict.js @@ -0,0 +1,5 @@ +import { splitEvery } from "./splitEvery.js"; + +export function splitEveryStrict(sliceLength) { + return splitEvery(sliceLength, true) +} diff --git a/source/splitEveryStrict.spec.js b/source/splitEveryStrict.spec.js new file mode 100644 index 000000000..8094bdd36 --- /dev/null +++ b/source/splitEveryStrict.spec.js @@ -0,0 +1,8 @@ +import { splitEveryStrict } from './splitEveryStrict.js' + +test('happy', () => { + expect(splitEveryStrict(3)([1, 2, 3, 4, 5, 6, 7])).toEqual([ + [1, 2, 3], + [4, 5, 6], + ]) +}) diff --git a/source/switcher-spec.ts b/source/switcher-spec.ts index 73b3fc80b..3450e15b6 100644 --- a/source/switcher-spec.ts +++ b/source/switcher-spec.ts @@ -1,4 +1,5 @@ import { switcher } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.switcher', () => { it('no transformation', () => { @@ -9,7 +10,7 @@ describe('R.switcher', () => { .is(x => x < 4, 6) .default(7) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) it('with transformation', () => { const list = [1, 2, 3] @@ -20,6 +21,6 @@ describe('R.switcher', () => { .is(x => x < 4, 'secondStage') .default('thirdStage') - result // $ExpectType Stage + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/symmetricDifference-spec.ts b/source/symmetricDifference-spec.ts index 92ddfe680..036adba3b 100644 --- a/source/symmetricDifference-spec.ts +++ b/source/symmetricDifference-spec.ts @@ -1,4 +1,5 @@ import { symmetricDifference } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.symmetricDifference', () => { it('happy', () => { @@ -6,6 +7,6 @@ describe('R.symmetricDifference', () => { const list2 = [{ id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }] const result = symmetricDifference(list1)(list2) - result // $ExpectType { id: number; }[] + expectTypeOf(result).toEqualTypeOf<{ id: number; }[]>() }) }) diff --git a/source/tail-spec.ts b/source/tail-spec.ts index 902ed5189..273a22bb4 100644 --- a/source/tail-spec.ts +++ b/source/tail-spec.ts @@ -1,10 +1,11 @@ import { map, pipe, tail } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.tail', () => { it('with string', () => { const result = tail('foo') - result // $ExpectType string + expectTypeOf(result).toEqualTypeOf() }) it('with list - using const on short array', () => { const result = pipe( @@ -12,7 +13,7 @@ describe('R.tail', () => { map(x => x * 2), tail, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const on empty array', () => { const result = pipe( @@ -20,7 +21,7 @@ describe('R.tail', () => { map(x => x * 2), tail, ) - result // $ExpectType [] + expectTypeOf(result).toEqualTypeOf<[]>() }) it('with list - using const', () => { const result = pipe( @@ -28,11 +29,11 @@ describe('R.tail', () => { map(x => x * 2), tail, ) - result // $ExpectType [number, number] + expectTypeOf(result).toEqualTypeOf<[number, number]>() }) it('with list - mixed types', () => { const result = tail(['foo', 'bar', 1, 2, 3]) - result // $ExpectType (string | number)[] + expectTypeOf(result).toEqualTypeOf<(string | number)[]>() }) }) diff --git a/source/takeWhile-spec.ts b/source/takeWhile-spec.ts index 9164a9636..f2eae308c 100644 --- a/source/takeWhile-spec.ts +++ b/source/takeWhile-spec.ts @@ -1,4 +1,5 @@ import { pipe, takeWhile } from 'rambda' +import { expectTypeOf, it } from 'vitest' const list = [1, 2, 3] @@ -8,5 +9,5 @@ it('R.takeWhile', () => { takeWhile(x => x > 1), takeWhile((x, i) => i + x > 1), ) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/test-spec.ts b/source/test-spec.ts index d8d7f51d5..07c43ed83 100644 --- a/source/test-spec.ts +++ b/source/test-spec.ts @@ -1,10 +1,11 @@ -import { test } from 'rambda' +import { test as ramdaTest } from 'rambda' +import { expectTypeOf, it } from 'vitest' const input = 'foo ' const regex = /foo/ it('R.test', () => { - const result = test(regex)(input) + const result = ramdaTest(regex)(input) - result // $ExpectType boolean + expectTypeOf(result).toEqualTypeOf() }) diff --git a/source/transformPropObject-spec.ts b/source/transformPropObject-spec.ts index 68fc58270..f9baaaebd 100644 --- a/source/transformPropObject-spec.ts +++ b/source/transformPropObject-spec.ts @@ -1,13 +1,10 @@ -import { transformPropObject, pipe } from 'rambda' +import type { transformPropObject } from 'rambda' +import { expectTypeOf, it } from 'vitest' +/** + * `transformPropObject` is declared in typings but not exported from the JS bundle yet. + * Keep compile-time-only assertions so Vitest does not execute missing runtime. + */ it('R.transformPropObject', () => { - const result = pipe( - { a: 1, b: 'foo' }, - transformPropObject(x => { - x // $ExpectType number - return x > 2 - }, 'a'), - ) - - result // $ExpectType { b: string; a: boolean; } + expectTypeOf().toBeFunction() }) diff --git a/source/tryCatch-spec.ts b/source/tryCatch-spec.ts index d4852009b..1f67b18a5 100644 --- a/source/tryCatch-spec.ts +++ b/source/tryCatch-spec.ts @@ -1,4 +1,5 @@ import { map, pipe, tryCatch } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.tryCatch', () => { it('happy', () => { @@ -11,6 +12,6 @@ describe('R.tryCatch', () => { ), ) - result // $ExpectType (string | null)[] + expectTypeOf(result).toEqualTypeOf<(string | null)[]>() }) }) diff --git a/source/type-spec.ts b/source/type-spec.ts index 98e9ef216..4c2b7cdb1 100644 --- a/source/type-spec.ts +++ b/source/type-spec.ts @@ -1,9 +1,10 @@ import { type } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.type', () => { it('happy', () => { const result = type(4) - result // $ExpectType RambdaTypes + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/union-spec.ts b/source/union-spec.ts index 2f15199fd..96858e52a 100644 --- a/source/union-spec.ts +++ b/source/union-spec.ts @@ -1,22 +1,23 @@ import { union } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.union', () => { it('happy', () => { const result = union([1, 2])([2, 3]) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) it('with array of objects - case 1', () => { const list1 = [{ a: 1 }, { a: 2 }] const list2 = [{ a: 2 }, { a: 3 }] const result = union(list1)(list2) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) it('with array of objects - case 2', () => { const list1 = [{ a: 1, b: 1 }, { a: 2 }] const list2 = [{ a: 2 }, { a: 3, b: 3 }] const result = union(list1)(list2) - result[0].a // $ExpectType number - result[0].b // $ExpectType number | undefined + expectTypeOf(result[0].a).toEqualTypeOf() + expectTypeOf(result[0].b).toEqualTypeOf() }) }) diff --git a/source/unionWith-spec.ts b/source/unionWith-spec.ts index a5c4e72c4..718255693 100644 --- a/source/unionWith-spec.ts +++ b/source/unionWith-spec.ts @@ -1,4 +1,5 @@ import { pipe, unionWith } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.unionWith', () => { it('happy', () => { @@ -6,13 +7,13 @@ describe('R.unionWith', () => { const result = pipe( list, unionWith((x, y) => { - x.a // $ExpectType number - y.b // $ExpectType number + expectTypeOf(x.a).toEqualTypeOf() + expectTypeOf(y.b).toEqualTypeOf() return x.a === y.a }, [{a: 2, b: 2}, {a: 3, b: 2}]), ) - result[0].a // $ExpectType number - result[0].b // $ExpectType number + expectTypeOf(result[0].a).toEqualTypeOf() + expectTypeOf(result[0].b).toEqualTypeOf() }) }) diff --git a/source/uniq-spec.ts b/source/uniq-spec.ts index d67df8414..e7214e0f1 100644 --- a/source/uniq-spec.ts +++ b/source/uniq-spec.ts @@ -1,8 +1,9 @@ import { uniq } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.uniq', () => { it('happy', () => { const result = uniq([1, 2, 3, 3, 3, 1, 2, 0]) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/uniqBy-spec.ts b/source/uniqBy-spec.ts index b64928f77..cbed4363d 100644 --- a/source/uniqBy-spec.ts +++ b/source/uniqBy-spec.ts @@ -1,9 +1,10 @@ import { uniqBy } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.uniqBy', () => { it('happy', () => { const result = uniqBy(Math.abs)([-2, -1, 0]) - result // $ExpectType number[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/uniqWith-spec.ts b/source/uniqWith-spec.ts index 6bacfb052..dcdfecb8c 100644 --- a/source/uniqWith-spec.ts +++ b/source/uniqWith-spec.ts @@ -1,4 +1,5 @@ import { pipe, uniqWith } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.uniqWith', () => { it('happy', () => { @@ -6,6 +7,6 @@ describe('R.uniqWith', () => { [{ a: 1 }, { a: 1 }], uniqWith((x, y) => x.a === y.a), ) - result // $ExpectType { a: number; }[] + expectTypeOf(result).toEqualTypeOf<{ a: number; }[]>() }) }) diff --git a/source/unless-spec.ts b/source/unless-spec.ts index 3a3ef1ead..aa574065b 100644 --- a/source/unless-spec.ts +++ b/source/unless-spec.ts @@ -1,4 +1,5 @@ import { pipe, unless } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const inc = (x: number) => x + 1 @@ -8,22 +9,22 @@ describe('R.unless', () => { 1, unless(x => x > 5, inc), ) - result // $ExpectType number + expectTypeOf(result).toEqualTypeOf() }) it('with two different types', () => { const result = pipe( 1, unless( x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return x > 5 }, x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() return `${x}-foo` }, ), ) - result // $ExpectType string | number + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/unwind-spec.ts b/source/unwind-spec.ts index 437782a67..80e8ab606 100644 --- a/source/unwind-spec.ts +++ b/source/unwind-spec.ts @@ -1,4 +1,5 @@ import { pipe, unwind } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' const obj = { a: 1, @@ -8,12 +9,12 @@ const obj = { describe('R.unwind', () => { it('happy', () => { const [result] = unwind('b')(obj) - result.a // $ExpectType number - result.b // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) it('inside pipe', () => { const [result] = pipe(obj, unwind('b')) - result.a // $ExpectType number - result.b // $ExpectType number + expectTypeOf(result.a).toEqualTypeOf() + expectTypeOf(result.b).toEqualTypeOf() }) }) diff --git a/source/when-spec.ts b/source/when-spec.ts index fdc661db8..405569542 100644 --- a/source/when-spec.ts +++ b/source/when-spec.ts @@ -1,4 +1,5 @@ import { head, pipe, tap, when } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' function notNull(a: T | null | undefined): a is T { return a != null @@ -13,7 +14,7 @@ describe('R.when', () => { x => x, ), tap(x => { - x // $ExpectType number + expectTypeOf(x).toEqualTypeOf() }), when( x => x > 2, @@ -21,7 +22,7 @@ describe('R.when', () => { ), ) - result // $ExpectType string | number + expectTypeOf(result).toEqualTypeOf() }) it('with assertion of type', () => { @@ -30,6 +31,6 @@ describe('R.when', () => { head, when(notNull, x => x + 1), ) - result // $ExpectType number | null + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/source/zip-spec.ts b/source/zip-spec.ts index 2844b81f6..7a7c42eb3 100644 --- a/source/zip-spec.ts +++ b/source/zip-spec.ts @@ -1,4 +1,5 @@ import { zip } from 'rambda' +import { describe, expectTypeOf, it } from 'vitest' describe('R.zip', () => { it('happy', () => { @@ -6,7 +7,7 @@ describe('R.zip', () => { const array2 = ['A', 'B', 'C'] let a: Partial const result = zip(array1)(array2) - result[0][0] // $ExpectType number - result[0][1] // $ExpectType string + expectTypeOf(result[0][0]).toEqualTypeOf() + expectTypeOf(result[0][1]).toEqualTypeOf() }) }) diff --git a/source/zipWith-spec.ts b/source/zipWith-spec.ts index 03b911b0e..e1984d571 100644 --- a/source/zipWith-spec.ts +++ b/source/zipWith-spec.ts @@ -1,3 +1,4 @@ +import { describe, expectTypeOf, it } from 'vitest' import { pipe, zipWith } from 'rambda' const list1 = [1, 2] @@ -8,12 +9,12 @@ describe('R.zipWith', () => { const result = pipe( list2, zipWith((x, y) => { - x // $ExpectType number - y // $ExpectType number + expectTypeOf(x).toEqualTypeOf() + expectTypeOf(y).toEqualTypeOf() return `${x}-${y}` }, list1), ) - result // $ExpectType string[] + expectTypeOf(result).toEqualTypeOf() }) }) diff --git a/src/mergeDeep.js b/src/mergeDeep.js new file mode 100644 index 000000000..5f37fbcb6 --- /dev/null +++ b/src/mergeDeep.js @@ -0,0 +1,24 @@ +import { type } from './type.js' + +const isObject = (x) => type(x) === 'Object' + +function mergeDeepFn(source, objectWithNewProps) { + return [source, objectWithNewProps].reduce((prev, obj) => { + Object.keys(obj).forEach((key) => { + const pVal = prev[key] + const oVal = obj[key] + + if (isObject(pVal) && isObject(oVal)) { + prev[key] = mergeDeepFn(pVal, oVal) + } else { + prev[key] = oVal + } + }) + + return prev + }, {}) +} + +export function mergeDeep(source) { + return (objectWithNewProps) => mergeDeepFn(source, objectWithNewProps) +} diff --git a/src/range.js b/src/range.js index 94e3f672b..3491f3da0 100644 --- a/src/range.js +++ b/src/range.js @@ -1,7 +1,8 @@ export function range(a, b) { const start = b === undefined ? 0 : a const end = b === undefined ? a : b - if (end<= start) { + if (end === start) return [start] + if (end < start) { return [] } const len = end - start diff --git a/src/rangeDescending.js b/src/rangeDescending.js index 03fce1947..cf5291a92 100644 --- a/src/rangeDescending.js +++ b/src/rangeDescending.js @@ -1,6 +1,7 @@ export function rangeDescending(start, b) { const end = b === undefined ? 0 : b - if (start <= end) { + if (start === end) return [start] + if (start < end) { return [] } const len = start - end diff --git a/src/splitEvery.js b/src/splitEvery.js index 4441cd3d2..20726bf36 100644 --- a/src/splitEvery.js +++ b/src/splitEvery.js @@ -1,4 +1,4 @@ -export function splitEvery(sliceLength) { +export function splitEvery(sliceLength, strict = false) { return list => { if (sliceLength < 1) { throw new Error('First argument to splitEvery must be a positive integer') @@ -8,6 +8,7 @@ export function splitEvery(sliceLength) { let counter = 0 while (counter < list.length) { + if (strict && counter + sliceLength > list.length) break; willReturn.push(list.slice(counter, (counter += sliceLength))) } diff --git a/vitest.config.js b/vitest.config.js index 40db9b04a..2ed8cab3f 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -1,26 +1,14 @@ import { defineConfig } from 'vitest/config' -// const resolve = (specifier) => -// new URL(import.meta.resolve(specifier)).pathname - export default defineConfig(env => ({ test: { globals: true, - include: ['source/**/*.spec.js'], + include: ['source/**/*.spec.js', 'source/**/*-spec.ts'], + exclude: ['source/_internals/**'], coverage: { thresholds: { 100: true }, include: ['source/**.js'], exclude: ['source/*.ts'], }, - // typecheck: { - // include: ['tests/**/*.test-d.ts'], - // enabled: true, - // tsconfig: 'tests/tsconfig.json', - // }, }, - // resolve: { - // alias: { - // radashi: resolve('./src/mod.js'), - // }, - // }, })) diff --git a/vitest.typings.config.js b/vitest.typings.config.js new file mode 100644 index 000000000..bedd34061 --- /dev/null +++ b/vitest.typings.config.js @@ -0,0 +1,10 @@ +import { defineConfig } from 'vitest/config' + +/** TS-only typings tests (`expectTypeOf`). Used by `yarn test:typings` / `yarn ts`. */ +export default defineConfig({ + test: { + globals: true, + include: ['source/**/*-spec.ts'], + exclude: ['source/_internals/**'], + }, +}) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 313fd39b2..7518f0ba8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,17 +12,17 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== -"@babel/parser@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" - integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== +"@babel/parser@^7.29.3": + version "7.29.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.3.tgz#116f70a77958307fceac27747573032f8a62f88e" + integrity sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA== dependencies: - "@babel/types" "^7.28.5" + "@babel/types" "^7.29.0" -"@babel/types@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" - integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== +"@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" @@ -32,242 +32,27 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz#bbe12dca5b4ef983a0d0af4b07b9bc90ea0ababa" integrity sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA== -"@definitelytyped/dts-critic@0.0.178": - version "0.0.178" - resolved "https://registry.yarnpkg.com/@definitelytyped/dts-critic/-/dts-critic-0.0.178.tgz#79e82ef35615b1534da979eb925a6130e1977d94" - integrity sha512-1JiY6giD2qLYxDPSWPbZiICzmTX+cHBNMXf09SeY6CJX0kZPcAkX+Uhc64HSqlhutECRWy7SdQCp/NP3xVOt4Q== - dependencies: - "@definitelytyped/header-parser" "^0.0.178" - command-exists "^1.2.8" - rimraf "^3.0.2" - semver "^7.5.2" - tmp "^0.2.1" - yargs "^15.3.1" - -"@definitelytyped/dtslint@0.0.182": - version "0.0.182" - resolved "https://registry.yarnpkg.com/@definitelytyped/dtslint/-/dtslint-0.0.182.tgz#7b8cffcccbcd8725cdfeac916f757e3cbfd305d2" - integrity sha512-88t3yXrqXQbw+KmAY7D+PHJnC2BTzEZPxy7UvtksqrDL1RWLUxXKuG33/+0w36T3qDsdQTiqNBdLbAI+uzxsEA== - dependencies: - "@definitelytyped/dts-critic" "0.0.178" - "@definitelytyped/header-parser" "0.0.178" - "@definitelytyped/typescript-versions" "0.0.178" - "@definitelytyped/utils" "0.0.178" - "@typescript-eslint/eslint-plugin" "^5.55.0" - "@typescript-eslint/parser" "^5.55.0" - "@typescript-eslint/types" "^5.56.0" - "@typescript-eslint/typescript-estree" "^5.55.0" - "@typescript-eslint/utils" "^5.55.0" - eslint "^8.17.0" - fs-extra "^6.0.1" - json-stable-stringify "^1.0.1" - strip-json-comments "^2.0.1" - tslint "5.14.0" - yargs "^15.1.0" - -"@definitelytyped/header-parser@0.0.178", "@definitelytyped/header-parser@^0.0.178": - version "0.0.178" - resolved "https://registry.yarnpkg.com/@definitelytyped/header-parser/-/header-parser-0.0.178.tgz#2cfd170a33b014d686135673fa7fac837cfe5556" - integrity sha512-16FFuaWW2Hq+a0Abyt+9gvPAT0w/ezy4eph3RbtLSqxH3T/UHDla1jgnp1DMvfNeBWaIqHxcr+Vrr7BPquw7mw== - dependencies: - "@definitelytyped/typescript-versions" "^0.0.178" - "@types/parsimmon" "^1.10.1" - parsimmon "^1.13.0" - -"@definitelytyped/typescript-versions@0.0.178", "@definitelytyped/typescript-versions@^0.0.178": - version "0.0.178" - resolved "https://registry.yarnpkg.com/@definitelytyped/typescript-versions/-/typescript-versions-0.0.178.tgz#98a92f2251f18b32122e808b968ca8e009d3b123" - integrity sha512-pPXy3z5gE4xnVgqIRApFcQ6M6kqtRK1gnqyGx/I0Yo1CH8RAsRvumCDB/KiZmQDpCHiy//E9dOIUFdquvC5t7g== - -"@definitelytyped/utils@0.0.178": - version "0.0.178" - resolved "https://registry.yarnpkg.com/@definitelytyped/utils/-/utils-0.0.178.tgz#f403be41816690246a4e0244d125a0084b16462a" - integrity sha512-nYg3E51XpTodS0/5w5r1wM/DhPYhyqa9BP8ili4XgB5s9j4v4mDPX9Jwjns2q24derBvyhdUpzshKDh43aqwZw== - dependencies: - "@definitelytyped/typescript-versions" "^0.0.178" - "@qiwi/npm-registry-client" "^8.9.1" - "@types/node" "^14.14.35" - charm "^1.0.2" - fs-extra "^8.1.0" - fstream "^1.0.12" - tar "^6.1.11" - tar-stream "^2.1.4" - -"@esbuild/aix-ppc64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz#4e0f91776c2b340e75558f60552195f6fad09f18" - integrity sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA== - -"@esbuild/android-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz#bc766407f1718923f6b8079c8c61bf86ac3a6a4f" - integrity sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg== - -"@esbuild/android-arm@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz#4290d6d3407bae3883ad2cded1081a234473ce26" - integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA== - -"@esbuild/android-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz#40c11d9cbca4f2406548c8a9895d321bc3b35eff" - integrity sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw== - -"@esbuild/darwin-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz#49d8bf8b1df95f759ac81eb1d0736018006d7e34" - integrity sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ== - -"@esbuild/darwin-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz#e27a5d92a14886ef1d492fd50fc61a2d4d87e418" - integrity sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ== - -"@esbuild/freebsd-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz#97cede59d638840ca104e605cdb9f1b118ba0b1c" - integrity sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw== - -"@esbuild/freebsd-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz#71c77812042a1a8190c3d581e140d15b876b9c6f" - integrity sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw== - -"@esbuild/linux-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz#f7b7c8f97eff8ffd2e47f6c67eb5c9765f2181b8" - integrity sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg== - -"@esbuild/linux-arm@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz#2a0be71b6cd8201fa559aea45598dffabc05d911" - integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw== - -"@esbuild/linux-ia32@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz#763414463cd9ea6fa1f96555d2762f9f84c61783" - integrity sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA== - -"@esbuild/linux-loong64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz#428cf2213ff786a502a52c96cf29d1fcf1eb8506" - integrity sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg== - -"@esbuild/linux-mips64el@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz#5cbcc7fd841b4cd53358afd33527cd394e325d96" - integrity sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg== - -"@esbuild/linux-ppc64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz#0d954ab39ce4f5e50f00c4f8c4fd38f976c13ad9" - integrity sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ== - -"@esbuild/linux-riscv64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz#0e7dd30730505abd8088321e8497e94b547bfb1e" - integrity sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA== - -"@esbuild/linux-s390x@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz#5669af81327a398a336d7e40e320b5bbd6e6e72d" - integrity sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ== - -"@esbuild/linux-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz#b2357dd153aa49038967ddc1ffd90c68a9d2a0d4" - integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw== - -"@esbuild/netbsd-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz#53b4dfb8fe1cee93777c9e366893bd3daa6ba63d" - integrity sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw== - -"@esbuild/netbsd-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz#a0206f6314ce7dc8713b7732703d0f58de1d1e79" - integrity sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ== - -"@esbuild/openbsd-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz#2a796c87c44e8de78001d808c77d948a21ec22fd" - integrity sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw== - -"@esbuild/openbsd-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz#28d0cd8909b7fa3953af998f2b2ed34f576728f0" - integrity sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg== - -"@esbuild/sunos-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz#a28164f5b997e8247d407e36c90d3fd5ddbe0dc5" - integrity sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA== - -"@esbuild/win32-arm64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz#6eadbead38e8bd12f633a5190e45eff80e24007e" - integrity sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw== - -"@esbuild/win32-ia32@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz#bab6288005482f9ed2adb9ded7e88eba9a62cc0d" - integrity sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ== - -"@esbuild/win32-x64@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz#7fc114af5f6563f19f73324b5d5ff36ece0803d1" - integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== - -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== +"@emnapi/core@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.10.0.tgz#380ccc8f2412ea22d1d972df7f8ee23a3b9c7467" + integrity sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw== + dependencies: + "@emnapi/wasi-threads" "1.2.1" + tslib "^2.4.0" -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@emnapi/runtime@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.10.0.tgz#4b260c0d3534204e98c6110b8db1a987d26ec87c" + integrity sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz#28fed21a1ba1ce797c44a070abc94d42f3ae8548" + integrity sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w== + dependencies: + tslib "^2.4.0" "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" @@ -284,14 +69,6 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== -"@jridgewell/trace-mapping@^0.3.23": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - "@jridgewell/trace-mapping@^0.3.31": version "0.3.31" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" @@ -300,270 +77,233 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@qiwi/npm-registry-client@^8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@qiwi/npm-registry-client/-/npm-registry-client-8.9.1.tgz#1769f6501a436ec39c496ca0a9a2fab9db7718df" - integrity sha512-rZF+mG+NfijR0SHphhTLHRr4aM4gtfdwoAMY6we2VGQam8vkN1cxGG1Lg/Llrj8Dd0Mu6VjdFQRyMMRZxtZR2A== - dependencies: - concat-stream "^2.0.0" - graceful-fs "^4.2.4" - normalize-package-data "~1.0.1 || ^2.0.0 || ^3.0.0" - npm-package-arg "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^8.0.0" - once "^1.4.0" - request "^2.88.2" - retry "^0.12.0" - safe-buffer "^5.2.1" - semver "2 >=2.2.1 || 3.x || 4 || 5 || 7" - slide "^1.1.6" - ssri "^8.0.0" - optionalDependencies: - npmlog "2 || ^3.1.0 || ^4.0.0" - -"@rollup/rollup-android-arm-eabi@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz#59e7478d310f7e6a7c72453978f562483828112f" - integrity sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA== - -"@rollup/rollup-android-arm-eabi@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz#7e478b66180c5330429dd161bf84dad66b59c8eb" - integrity sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w== - -"@rollup/rollup-android-arm64@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz#a825192a0b1b2f27a5c950c439e7e37a33c5d056" - integrity sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w== - -"@rollup/rollup-android-arm64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz#2b025510c53a5e3962d3edade91fba9368c9d71c" - integrity sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w== - -"@rollup/rollup-darwin-arm64@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz#4ee37078bccd725ae3c5f30ef92efc8e1bf886f3" - integrity sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg== - -"@rollup/rollup-darwin-arm64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz#3577c38af68ccf34c03e84f476bfd526abca10a0" - integrity sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA== - -"@rollup/rollup-darwin-x64@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz#43cc08bd05bf9f388f125e7210a544e62d368d90" - integrity sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw== - -"@rollup/rollup-darwin-x64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz#2bf5f2520a1f3b551723d274b9669ba5b75ed69c" - integrity sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ== - -"@rollup/rollup-freebsd-arm64@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz#bc8e640e28abe52450baf3fc80d9b26d9bb6587d" - integrity sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ== - -"@rollup/rollup-freebsd-arm64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz#4bb9cc80252564c158efc0710153c71633f1927c" - integrity sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w== - -"@rollup/rollup-freebsd-x64@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz#e981a22e057cc8c65bb523019d344d3a66b15bbc" - integrity sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw== - -"@rollup/rollup-freebsd-x64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz#2301289094d49415a380cf942219ae9d8b127440" - integrity sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q== - -"@rollup/rollup-linux-arm-gnueabihf@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz#4036b68904f392a20f3499d63b33e055b67eb274" - integrity sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz#1d03d776f2065e09fc141df7d143476e94acca88" - integrity sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw== - -"@rollup/rollup-linux-arm-musleabihf@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz#d3b1b9589606e0ff916801c855b1ace9e733427a" - integrity sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q== - -"@rollup/rollup-linux-arm-musleabihf@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz#8623de0e040b2fd52a541c602688228f51f96701" - integrity sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg== - -"@rollup/rollup-linux-arm64-gnu@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz#cbf0943c477e3b96340136dd3448eaf144378cf2" - integrity sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg== - -"@rollup/rollup-linux-arm64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz#ce2d1999bc166277935dde0301cde3dd0417fb6e" - integrity sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w== - -"@rollup/rollup-linux-arm64-musl@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz#837f5a428020d5dce1c3b4cc049876075402cf78" - integrity sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g== - -"@rollup/rollup-linux-arm64-musl@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz#88c2523778444da952651a2219026416564a4899" - integrity sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A== - -"@rollup/rollup-linux-loong64-gnu@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz#532c214ababb32ab4bc21b4054278b9a8979e516" - integrity sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ== - -"@rollup/rollup-linux-loong64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz#578ca2220a200ac4226c536c10c8cc6e4f276714" - integrity sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g== - -"@rollup/rollup-linux-ppc64-gnu@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz#93900163b61b49cee666d10ee38257a8b1dd161a" - integrity sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g== - -"@rollup/rollup-linux-ppc64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz#aa338d3effd4168a20a5023834a74ba2c3081293" - integrity sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw== - -"@rollup/rollup-linux-riscv64-gnu@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz#f0ffdcc7066ca04bc972370c74289f35c7a7dc42" - integrity sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg== - -"@rollup/rollup-linux-riscv64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz#16ba582f9f6cff58119aa242782209b1557a1508" - integrity sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g== - -"@rollup/rollup-linux-riscv64-musl@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz#361695c39dbe96773509745d77a870a32a9f8e48" - integrity sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA== - -"@rollup/rollup-linux-riscv64-musl@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz#e404a77ebd6378483888b8064c703adb011340ab" - integrity sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A== - -"@rollup/rollup-linux-s390x-gnu@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz#09fc6cc2e266a2324e366486ae5d1bca48c43a6a" - integrity sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA== - -"@rollup/rollup-linux-s390x-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz#92ad52d306227c56bec43d96ad2164495437ffe6" - integrity sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg== - -"@rollup/rollup-linux-x64-gnu@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz#aa9d5b307c08f05d3454225bb0a2b4cc87eeb2e1" - integrity sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg== - -"@rollup/rollup-linux-x64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz#fd0dea3bb9aa07e7083579f25e1c2285a46cb9fa" - integrity sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w== - -"@rollup/rollup-linux-x64-musl@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz#26949e5b4645502a61daba2f7a8416bd17cb5382" - integrity sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw== - -"@rollup/rollup-linux-x64-musl@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz#37a3efb09f18d555f8afc490e1f0444885de8951" - integrity sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q== - -"@rollup/rollup-openharmony-arm64@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz#ef493c072f9dac7e0edb6c72d63366846b6ffcd9" - integrity sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA== - -"@rollup/rollup-openharmony-arm64@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz#c489bec9f4f8320d42c9b324cca220c90091c1f7" - integrity sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw== - -"@rollup/rollup-win32-arm64-msvc@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz#56e1aaa6a630d2202ee7ec0adddd05cf384ffd44" - integrity sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ== - -"@rollup/rollup-win32-arm64-msvc@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz#152832b5f79dc22d1606fac3db946283601b7080" - integrity sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw== - -"@rollup/rollup-win32-ia32-msvc@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz#0a44bbf933a9651c7da2b8569fa448dec0de7480" - integrity sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw== - -"@rollup/rollup-win32-ia32-msvc@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz#54d91b2bb3bf3e9f30d32b72065a4e52b3a172a5" - integrity sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA== - -"@rollup/rollup-win32-x64-gnu@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz#730e12f0b60b234a7c02d5d3179ca3ec7972033d" - integrity sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ== - -"@rollup/rollup-win32-x64-gnu@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz#df9df03e61a003873efec8decd2034e7f135c71e" - integrity sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg== - -"@rollup/rollup-win32-x64-msvc@4.52.4": - version "4.52.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz#5b2dd648a960b8fa00d76f2cc4eea2f03daa80f4" - integrity sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w== - -"@rollup/rollup-win32-x64-msvc@4.53.3": - version "4.53.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz#38ae84f4c04226c1d56a3b17296ef1e0460ecdfe" - integrity sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ== - -"@standard-schema/spec@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.0.0.tgz#f193b73dc316c4170f2e82a881da0f550d551b9c" - integrity sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA== +"@napi-rs/wasm-runtime@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz#a46bbfedc29751b7170c5d23bc1d8ee8c7e3c1e1" + integrity sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow== + dependencies: + "@tybys/wasm-util" "^0.10.1" + +"@oxc-project/types@=0.130.0": + version "0.130.0" + resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.130.0.tgz#a7825148711dc28805c46cfc21d94b63a4d41e88" + integrity sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q== + +"@rolldown/binding-android-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.1.tgz#7b250c89f16d74affd581dbe38f702e8c2c644d3" + integrity sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg== + +"@rolldown/binding-darwin-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz#cd4de96687e6522062984b0503fbffbbc9220023" + integrity sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg== + +"@rolldown/binding-darwin-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.1.tgz#5b0a631e3784d5a7741dd93097dcf6dfca029960" + integrity sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg== + +"@rolldown/binding-freebsd-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.1.tgz#d82e561079db89f796438f56ec11bb3565ee1875" + integrity sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw== + +"@rolldown/binding-linux-arm-gnueabihf@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.1.tgz#f2645afff4253c7b46b80ba14af5fd3fc18d45dc" + integrity sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ== + +"@rolldown/binding-linux-arm64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.1.tgz#a16b97f175e7b115c5ece77c7b648d0c868f4486" + integrity sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A== + +"@rolldown/binding-linux-arm64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.1.tgz#e695aec4ef2c8713c9d959b42a208059891276da" + integrity sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg== + +"@rolldown/binding-linux-ppc64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.1.tgz#4a9edf16112cbe99cdd396c60efac39cbd1758ac" + integrity sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg== + +"@rolldown/binding-linux-s390x-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.1.tgz#314aa3ec1ce8251501d865f98fb91e42a1e671e4" + integrity sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ== + +"@rolldown/binding-linux-x64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.1.tgz#7c51f13cf1141c503ee162830b4fc692d91640be" + integrity sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw== + +"@rolldown/binding-linux-x64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.1.tgz#b7213936bbc9310b02a34f71cefd25f9e71f329b" + integrity sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ== + +"@rolldown/binding-openharmony-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.1.tgz#006e88acde4f12b41a4c72292685c9dc9e6a3627" + integrity sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ== + +"@rolldown/binding-wasm32-wasi@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.1.tgz#033525c84da217418232f35be19f1ddc0af4f31e" + integrity sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ== + dependencies: + "@emnapi/core" "1.10.0" + "@emnapi/runtime" "1.10.0" + "@napi-rs/wasm-runtime" "^1.1.4" + +"@rolldown/binding-win32-arm64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.1.tgz#febbf109cf1b5837e21369f0e0d2fefca1519c39" + integrity sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw== + +"@rolldown/binding-win32-x64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.1.tgz#dfb32a67ccb0deaa3c9a57f6cb4890b5697dfa2c" + integrity sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ== + +"@rolldown/pluginutils@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz#e3fcee093fbb5ce765e1ad088ff4de2889f6f9be" + integrity sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw== + +"@rollup/rollup-android-arm-eabi@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz#3a04f01e9f01392bbef5920b94aa3b88794be7ab" + integrity sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ== + +"@rollup/rollup-android-arm64@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz#e371b653ceabc900790ae73f5548a0fd7cd63a70" + integrity sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw== + +"@rollup/rollup-darwin-arm64@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz#2a5aa70432e39816d666d79287a7324cfc3b4e72" + integrity sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA== + +"@rollup/rollup-darwin-x64@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz#c3b5b49629379cd9cdc5d841bf00ed44ebf393dd" + integrity sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg== + +"@rollup/rollup-freebsd-arm64@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz#f929d8e0462fae6602fc960beeabd7287d859283" + integrity sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g== + +"@rollup/rollup-freebsd-x64@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz#c01cb58031226f95d0900b1ec847f4fb32c6e809" + integrity sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw== + +"@rollup/rollup-linux-arm-gnueabihf@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz#f29d890c4858c8e0d3be01677eef4f6a359eed9d" + integrity sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA== + +"@rollup/rollup-linux-arm-musleabihf@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz#1ebfc8eb9f66136ed2faae5f44995add5ca3c964" + integrity sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w== + +"@rollup/rollup-linux-arm64-gnu@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz#c1fa823c2c4ce46ba7f61de1a4c3fdadd4fb4e7b" + integrity sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg== + +"@rollup/rollup-linux-arm64-musl@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz#a7f18854d0471b78bda8ea38f0891a4e059b571d" + integrity sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A== + +"@rollup/rollup-linux-loong64-gnu@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz#83658a9a4576bcce8cef85b2c78b9b649d2200c4" + integrity sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ== + +"@rollup/rollup-linux-loong64-musl@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz#fd2af677ae3417bb58d57ae37dd0d84686e40244" + integrity sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw== + +"@rollup/rollup-linux-ppc64-gnu@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz#6481647181c4cf8f1ddbd99f62c84cfc56c1a94a" + integrity sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg== + +"@rollup/rollup-linux-ppc64-musl@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz#18610a1a1550e28a5042ca916f898419540f17f4" + integrity sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A== + +"@rollup/rollup-linux-riscv64-gnu@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz#597bb80465a2621dbe0de0a41c66394a8a7e9a6e" + integrity sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA== + +"@rollup/rollup-linux-riscv64-musl@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz#a2a919a9f927ef7f24a60af77e3cb55f1ad59e4d" + integrity sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw== + +"@rollup/rollup-linux-s390x-gnu@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz#3166f6ceae7df9bbfddf9f36be1937231e13e3c6" + integrity sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ== + +"@rollup/rollup-linux-x64-gnu@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz#23c9bf79771d804fb87415eb0767569f273261e5" + integrity sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ== + +"@rollup/rollup-linux-x64-musl@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz#97941c6b94d67fe25cde0f027c10a19f2d1fdd39" + integrity sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg== + +"@rollup/rollup-openbsd-x64@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz#7aeb7d92e2cd1d399f56daf75c39040b777b6c77" + integrity sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA== + +"@rollup/rollup-openharmony-arm64@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz#925de61ae83bf99aa636e8acea87432e8c0ffaab" + integrity sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg== + +"@rollup/rollup-win32-arm64-msvc@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz#888ab83842721491044c46a7407e1f38f3235bb4" + integrity sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw== + +"@rollup/rollup-win32-ia32-msvc@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz#fa30ac24e3f0232139d2a47500560a28695764d4" + integrity sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA== + +"@rollup/rollup-win32-x64-gnu@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz#223e2bc93f86e0707568e1fadb5b537e50c976c7" + integrity sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw== + +"@rollup/rollup-win32-x64-msvc@4.60.4": + version "4.60.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz#da4f1676d87e2bdf744291b504b0ab79550c3e61" + integrity sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw== + +"@tybys/wasm-util@^0.10.1": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.2.tgz#12b3a1b33db1f9cad4ddff1f604ab7dd00bf464e" + integrity sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg== + dependencies: + tslib "^2.4.0" "@types/chai@^5.2.2": version "5.2.2" @@ -587,500 +327,161 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== -"@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - "@types/mocha@10.0.10": version "10.0.10" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== -"@types/node@24.10.1": - version "24.10.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.10.1.tgz#91e92182c93db8bd6224fca031e2370cef9a8f01" - integrity sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ== +"@types/node@25.8.0": + version "25.8.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.8.0.tgz#d13033397d1c186876bed4c9b9d7f3f962097eb3" + integrity sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ== dependencies: - undici-types "~7.16.0" - -"@types/node@^14.14.35": - version "14.18.63" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" - integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== - -"@types/parsimmon@^1.10.1": - version "1.10.9" - resolved "https://registry.yarnpkg.com/@types/parsimmon/-/parsimmon-1.10.9.tgz#14e60db223c1d213fea0e15985d480b5cfe1789a" - integrity sha512-O2M2x1w+m7gWLen8i5DOy6tWRnbRcsW6Pke3j3HAsJUrPb4g0MgjksIUm2aqUtCYxy7Qjr3CzjjwQBzhiGn46A== - -"@types/semver@^7.3.12": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + undici-types ">=7.24.0 <7.24.7" "@types/tinycolor2@^1.4.0": version "1.4.6" resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.6.tgz#670cbc0caf4e58dd61d1e3a6f26386e473087f06" integrity sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw== -"@typescript-eslint/eslint-plugin@^5.55.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.55.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0", "@typescript-eslint/types@^5.56.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0", "@typescript-eslint/typescript-estree@^5.55.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.55.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@vitest/coverage-v8@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-4.0.10.tgz#834f2d411522a6e8772bfb7ef2c9e79c648a2b4d" - integrity sha512-g+brmtoKa/sAeIohNJnnWhnHtU6GuqqVOSQ4SxDIPcgZWZyhJs5RmF5LpqXs8Kq64lANP+vnbn5JLzhLj/G56g== +"@vitest/coverage-v8@5.0.0-beta.2": + version "5.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-5.0.0-beta.2.tgz#24fac5f3cd5308aa2605735b9f24c60391a2f344" + integrity sha512-sRRGUEWDwapKSwWNPftXkajT4kNRiWYWsWoWrAjusQRet9yjXGrsdPEKBcvPL02zbQOaf8MkC7GG5vti6kw43A== dependencies: "@bcoe/v8-coverage" "^1.0.2" - "@vitest/utils" "4.0.10" - ast-v8-to-istanbul "^0.3.8" - debug "^4.4.3" + "@vitest/utils" "5.0.0-beta.2" + ast-v8-to-istanbul "^1.0.0" istanbul-lib-coverage "^3.2.2" istanbul-lib-report "^3.0.1" - istanbul-lib-source-maps "^5.0.6" istanbul-reports "^3.2.0" - magicast "^0.5.1" - std-env "^3.10.0" - tinyrainbow "^3.0.3" - -"@vitest/expect@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-4.0.10.tgz#cb97fc35d0938f2f7c62694812131fbb986fa5ce" - integrity sha512-3QkTX/lK39FBNwARCQRSQr0TP9+ywSdxSX+LgbJ2M1WmveXP72anTbnp2yl5fH+dU6SUmBzNMrDHs80G8G2DZg== - dependencies: - "@standard-schema/spec" "^1.0.0" - "@types/chai" "^5.2.2" - "@vitest/spy" "4.0.10" - "@vitest/utils" "4.0.10" - chai "^6.2.1" - tinyrainbow "^3.0.3" + magicast "^0.5.2" + obug "^2.1.1" + std-env "^4.0.0-rc.1" + tinyrainbow "^3.1.0" -"@vitest/mocker@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-4.0.10.tgz#66ea2d6f563b26f72fd3e27ee5cbb01a70640584" - integrity sha512-e2OfdexYkjkg8Hh3L9NVEfbwGXq5IZbDovkf30qW2tOh7Rh9sVtmSr2ztEXOFbymNxS4qjzLXUQIvATvN4B+lg== +"@vitest/mocker@5.0.0-beta.2": + version "5.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-5.0.0-beta.2.tgz#6f55d5d668c5a28dbd6c927a6ad0cf74bd203099" + integrity sha512-MraW8T92TOcCd0MG+1gz5YeGgIGNsfiIcxuP9Azy7qcIxUwQ3zmngU1NbfvG0HRWVY++/FLsJ/xdKFsb7vZS0w== dependencies: - "@vitest/spy" "4.0.10" + "@vitest/spy" "5.0.0-beta.2" estree-walker "^3.0.3" magic-string "^0.30.21" -"@vitest/pretty-format@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-4.0.10.tgz#1ae410f4a98b60921879828143342f59a5edfcf9" - integrity sha512-99EQbpa/zuDnvVjthwz5bH9o8iPefoQZ63WV8+bsRJZNw3qQSvSltfut8yu1Jc9mqOYi7pEbsKxYTi/rjaq6PA== +"@vitest/pretty-format@5.0.0-beta.2": + version "5.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-5.0.0-beta.2.tgz#1c2076c1b137b01fbfd9af25603e952086598e52" + integrity sha512-mMl+7McYN0g7ORBsufBB5CwpsV8e/kK/0ytiFwSWSK8181C5n0WjsxDysm9wxsNsAZ8T/EnEv0unWNa8CyOUVw== dependencies: - tinyrainbow "^3.0.3" + tinyrainbow "^3.1.0" -"@vitest/runner@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-4.0.10.tgz#c91c4c6e1bad92d2a07ca6da287ff076a0a6589f" - integrity sha512-EXU2iSkKvNwtlL8L8doCpkyclw0mc/t4t9SeOnfOFPyqLmQwuceMPA4zJBa6jw0MKsZYbw7kAn+gl7HxrlB8UQ== +"@vitest/runner@5.0.0-beta.2": + version "5.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-5.0.0-beta.2.tgz#867679b1bfb64e1b3e4674a56774d820ed4b6737" + integrity sha512-9FjC3DzggveiRcXXh0zP2ko4+D9W6GfrmpAlLjuCp/vr2nJSb8rGLKkyz3g072ZHbpx8XxLoPg411eVRnrPmvg== dependencies: - "@vitest/utils" "4.0.10" + "@vitest/utils" "5.0.0-beta.2" pathe "^2.0.3" -"@vitest/snapshot@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-4.0.10.tgz#e3d4f188105d6197e385c85c2c06a37be9732c6d" - integrity sha512-2N4X2ZZl7kZw0qeGdQ41H0KND96L3qX1RgwuCfy6oUsF2ISGD/HpSbmms+CkIOsQmg2kulwfhJ4CI0asnZlvkg== - dependencies: - "@vitest/pretty-format" "4.0.10" - magic-string "^0.30.21" - pathe "^2.0.3" +"@vitest/spy@5.0.0-beta.2": + version "5.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-5.0.0-beta.2.tgz#2b90c27e9aac075702aaee509b4801a352571aec" + integrity sha512-P5t/CesIZSAdZ5OA2AR34JEulKoLGgy4owaO5KorzzTmld8gLBgjdUAHc0oO+YTtLOgtxkc7J57xJCVZkC/6wA== -"@vitest/spy@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-4.0.10.tgz#e40f246bd0e8b5321766afd97230cdac21783157" - integrity sha512-AsY6sVS8OLb96GV5RoG8B6I35GAbNrC49AO+jNRF9YVGb/g9t+hzNm1H6kD0NDp8tt7VJLs6hb7YMkDXqu03iw== - -"@vitest/utils@4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-4.0.10.tgz#04e5cb5d5237160477fd364d2b58744c0e5695be" - integrity sha512-kOuqWnEwZNtQxMKg3WmPK1vmhZu9WcoX69iwWjVz+jvKTsF1emzsv3eoPcDr6ykA3qP2bsCQE7CwqfNtAVzsmg== +"@vitest/utils@5.0.0-beta.2": + version "5.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-5.0.0-beta.2.tgz#64efde8f9c1bb60f8029e2ff006f851a00121422" + integrity sha512-62fiZ9rgF8x8CpI10prslir65AvUIo3Fc9dI4hOVm05sjRV1Ss65U0N832kBWq4DhmuylAJFuoWqwyX+rylu5g== dependencies: - "@vitest/pretty-format" "4.0.10" - tinyrainbow "^3.0.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + "@vitest/pretty-format" "5.0.0-beta.2" + convert-source-map "^2.0.0" + tinyrainbow "^3.1.0" -acorn@^8.9.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== - -ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + string-width "^4.1.0" 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-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== +ansi-regex@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.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" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +ansi-styles@^6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: +ast-v8-to-istanbul@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -ast-v8-to-istanbul@^0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz#0a3faf070dc780dcebdf9d48af78dbd174a497a9" - integrity sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ== + resolved "https://registry.yarnpkg.com/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.0.tgz#d1e8bfc79fa9c452972ff91897633bda4e5e7577" + integrity sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg== dependencies: "@jridgewell/trace-mapping" "^0.3.31" estree-walker "^3.0.3" - js-tokens "^9.0.1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.0.tgz#d9b802e9bb9c248d7be5f7f5ef178dc3684e9dcc" - integrity sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g== - -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -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== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + js-tokens "^10.0.0" -call-bind@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +boxen@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-8.0.1.tgz#7e9fcbb45e11a2d7e6daa8fdcebfc3242fc19fe3" + integrity sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw== dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + ansi-align "^3.0.1" + camelcase "^8.0.0" + chalk "^5.3.0" + cli-boxes "^3.0.0" + string-width "^7.2.0" + type-fest "^4.21.0" + widest-line "^5.0.0" + wrap-ansi "^9.0.0" -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +camelcase@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-8.0.0.tgz#c0d36d418753fb6ad9c5e0437579745c1c14a534" + integrity sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA== -cfonts@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/cfonts/-/cfonts-3.3.0.tgz#53e80fa239c2dc8fb11b9c7c00ede2c8ceedb34c" - integrity sha512-RlVxeEw2FXWI5Bs9LD0/Ef3bsQIc9m6lK/DINN20HIW0Y0YHUO2jjy88cot9YKZITiRTCdWzTfLmTyx47HeSLA== +cfonts@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/cfonts/-/cfonts-3.3.1.tgz#38c149f0c292bb0cebcec637f8e50983e4785814" + integrity sha512-ZGEmN3W9mViWEDjsuPo4nK4h39sfh6YtoneFYp9WLPI/rw8BaSSrfQC6jkrGW3JMvV3ZnExJB/AEqXc/nHYxkw== dependencies: supports-color "^8" window-size "^1" -chai@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.1.tgz#d1e64bc42433fbee6175ad5346799682060b5b6a" - integrity sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg== +chai@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e" + integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== -chalk@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" - integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" +chalk@5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== 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== -charm@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.2.tgz#8add367153a6d9a581331052c4090991da995e35" - integrity sha512-wqW3VdPnlSWT4eRiYX+hcs+C6ViBPUWk1qTCd+37qw9kEm/a5n2qcyQDMBWvSYKN/ctqZzeXNQaeBjOetJJUkw== - dependencies: - inherits "^2.0.1" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== color-convert@^1.9.0: version "1.9.3" @@ -1089,125 +490,15 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" -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.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -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== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -commander@^2.12.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^2.0.0: +convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cross-spawn@^7.0.2: - 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" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -debug@^4.1.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - -debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" - -debug@^4.4.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== define-property@^1.0.0: version "1.0.0" @@ -1216,55 +507,21 @@ define-property@^1.0.0: dependencies: is-descriptor "^1.0.0" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" +emoji-regex@^10.3.0: + version "10.6.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d" + integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== 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== -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - env-fn@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/env-fn/-/env-fn-2.2.0.tgz#30288cd0294bcc8ac76f2ec9c71ec6ddb2736c43" @@ -1272,166 +529,10 @@ env-fn@2.2.0: dependencies: rambda "6.4.0" -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" - integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== - -esbuild@^0.25.0: - version "0.25.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.5.tgz#71075054993fdfae76c66586f9b9c1f8d7edd430" - integrity sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ== - optionalDependencies: - "@esbuild/aix-ppc64" "0.25.5" - "@esbuild/android-arm" "0.25.5" - "@esbuild/android-arm64" "0.25.5" - "@esbuild/android-x64" "0.25.5" - "@esbuild/darwin-arm64" "0.25.5" - "@esbuild/darwin-x64" "0.25.5" - "@esbuild/freebsd-arm64" "0.25.5" - "@esbuild/freebsd-x64" "0.25.5" - "@esbuild/linux-arm" "0.25.5" - "@esbuild/linux-arm64" "0.25.5" - "@esbuild/linux-ia32" "0.25.5" - "@esbuild/linux-loong64" "0.25.5" - "@esbuild/linux-mips64el" "0.25.5" - "@esbuild/linux-ppc64" "0.25.5" - "@esbuild/linux-riscv64" "0.25.5" - "@esbuild/linux-s390x" "0.25.5" - "@esbuild/linux-x64" "0.25.5" - "@esbuild/netbsd-arm64" "0.25.5" - "@esbuild/netbsd-x64" "0.25.5" - "@esbuild/openbsd-arm64" "0.25.5" - "@esbuild/openbsd-x64" "0.25.5" - "@esbuild/sunos-x64" "0.25.5" - "@esbuild/win32-arm64" "0.25.5" - "@esbuild/win32-ia32" "0.25.5" - "@esbuild/win32-x64" "0.25.5" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.17.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +es-module-lexer@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.1.0.tgz#1dfcbb5ea3bbfb63f28e1fc3676c3676d1c9624c" + integrity sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ== estree-walker@^3.0.3: version "3.0.3" @@ -1440,441 +541,93 @@ estree-walker@^3.0.3: dependencies: "@types/estree" "^1.0.0" -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -expect-type@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.2.2.tgz#c030a329fb61184126c8447585bc75a7ec6fbff3" - integrity sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA== - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0: +expect-type@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68" + integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== -fdir@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.1.1.tgz#316b58145a05223b75c8b371e80bb3bad8f1441e" - integrity sha512-QfKBVg453Dyn3mr0Q0O+Tkr1r79lOTAKSi9f/Ot4+qVEwxWhav2Z+SudrG9vQjM2aYRMQQZ2/Q1zdA8ACM1pDg== - -fdir@^6.5.0: +fdir@6.5.0, fdir@^6.5.0: version "6.5.0" resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== +fs-extra@11.3.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" + integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" - integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" +get-east-asian-width@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz#216900f91df11a8b2c198c3e1d93d6c035a776b9" + integrity sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA== get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -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-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^7.1.1, glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -gradient-string@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/gradient-string/-/gradient-string-2.0.2.tgz#a90402618990ec993ecbb72a56bd7e6598f45c0e" - integrity sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw== +gradient-string@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gradient-string/-/gradient-string-3.0.0.tgz#716d6d6f35309513fa92d38f506c6df0ce1f5ebb" + integrity sha512-frdKI4Qi8Ihp4C6wZNB565de/THpIaw3DjP5ku87M+N9rNSGmPTjfkq61SdRXB7eCaL8O1hkKDvf6CDMtOzIAg== dependencies: - chalk "^4.1.2" + chalk "^5.3.0" tinygradient "^1.1.5" -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -hasown@^2.0.0, hasown@^2.0.2: +hasown@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" -helpers-fn@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/helpers-fn/-/helpers-fn-2.0.0.tgz#edd1a4a85b7e586c445846453e040e1062e12815" - integrity sha512-P47DGf+6M+QzpYmPdRpNjS1e7GRenUvEzPliuqikpO+8lPUf8XISmN5LwLLO/zW8/WaM6OJecVmzfy+dCEHHWQ== +helpers-fn@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/helpers-fn/-/helpers-fn-2.1.1.tgz#65cf1d2ba5f134ff975a2949238e1a5f81ee4a27" + integrity sha512-BWKP+xKHyWpzrahTuzv8jjezQTUTMmWS5jxp4M3L6yReENrJUFcNCqRQGc/x/wfYMM4GKfcIQXsppPKSyjNTUg== dependencies: - cfonts "3.3.0" - chalk "4.0.0" + boxen "8.0.1" + cfonts "3.3.1" + chalk "5.6.2" env-fn "2.2.0" - fdir "6.1.1" - fs-extra "11.2.0" - gradient-string "2.0.2" - log-symbols "6.0.0" - node-os-utils "1.3.7" + fdir "6.5.0" + fs-extra "11.3.2" + gradient-string "3.0.0" + log-symbols "7.0.1" + node-os-utils "2.0.1" q-i "2.0.1" - rambdax "11.1.1" - string-fn "3.3.2" - -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" + rambdax "11.3.1" + string-fn "3.6.3" html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - is-accessor-descriptor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" @@ -1887,13 +640,6 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-core-module@^2.13.0, is-core-module@^2.5.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" - integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== - dependencies: - hasown "^2.0.2" - is-data-descriptor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" @@ -1909,30 +655,11 @@ is-descriptor@^1.0.0: is-accessor-descriptor "^1.0.1" is-data-descriptor "^1.0.1" -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@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - 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.0, is-glob@^4.0.1, is-glob@^4.0.3: - 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@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -1940,20 +667,10 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -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== - is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== is-plain-object@^2.0.4: version "2.0.4" @@ -1967,41 +684,16 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" @@ -2016,15 +708,6 @@ istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: make-dir "^4.0.0" supports-color "^7.1.0" -istanbul-lib-source-maps@^5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" - integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== - dependencies: - "@jridgewell/trace-mapping" "^0.3.23" - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - istanbul-reports@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" @@ -2033,77 +716,10 @@ istanbul-reports@^3.2.0: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== - -js-tokens@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4" - integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== - -js-yaml@^3.7.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stable-stringify@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" - integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== - dependencies: - call-bind "^1.0.5" - isarray "^2.0.5" - jsonify "^0.0.1" - object-keys "^1.1.1" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" +js-tokens@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-10.0.0.tgz#dffe7599b4a8bb7fe30aff8d0235234dffb79831" + integrity sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q== jsonfile@^6.0.1: version "6.1.0" @@ -2114,28 +730,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2143,52 +737,92 @@ kind-of@^3.0.2: dependencies: is-buffer "^1.1.5" -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-6.0.0.tgz#bb95e5f05322651cac30c0feb6404f9f2a8a9439" - integrity sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw== - dependencies: - chalk "^5.3.0" - is-unicode-supported "^1.3.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== +lightningcss-android-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968" + integrity sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg== + +lightningcss-darwin-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz#50b71871b01c8199584b649e292547faea7af9b5" + integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ== + +lightningcss-darwin-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz#35f3e97332d130b9ca181e11b568ded6aebc6d5e" + integrity sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w== + +lightningcss-freebsd-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz#9777a76472b64ed6ff94342ad64c7bafd794a575" + integrity sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig== + +lightningcss-linux-arm-gnueabihf@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz#13ae652e1ab73b9135d7b7da172f666c410ad53d" + integrity sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw== + +lightningcss-linux-arm64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz#417858795a94592f680123a1b1f9da8a0e1ef335" + integrity sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ== + +lightningcss-linux-arm64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz#6be36692e810b718040802fd809623cffe732133" + integrity sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg== + +lightningcss-linux-x64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz#0b7803af4eb21cfd38dd39fe2abbb53c7dd091f6" + integrity sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA== + +lightningcss-linux-x64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz#88dc8ba865ddddb1ac5ef04b0f161804418c163b" + integrity sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg== + +lightningcss-win32-arm64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz#4f30ba3fa5e925f5b79f945e8cc0d176c3b1ab38" + integrity sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw== + +lightningcss-win32-x64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz#141aa5605645064928902bb4af045fa7d9f4220a" + integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q== + +lightningcss@^1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.32.0.tgz#b85aae96486dcb1bf49a7c8571221273f4f1e4a9" + integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-android-arm64 "1.32.0" + lightningcss-darwin-arm64 "1.32.0" + lightningcss-darwin-x64 "1.32.0" + lightningcss-freebsd-x64 "1.32.0" + lightningcss-linux-arm-gnueabihf "1.32.0" + lightningcss-linux-arm64-gnu "1.32.0" + lightningcss-linux-arm64-musl "1.32.0" + lightningcss-linux-x64-gnu "1.32.0" + lightningcss-linux-x64-musl "1.32.0" + lightningcss-win32-arm64-msvc "1.32.0" + lightningcss-win32-x64-msvc "1.32.0" + +lodash@4.18.1: + version "4.18.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" + integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== + +log-symbols@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-7.0.1.tgz#f52e68037d96f589fc572ff2193dc424d48c195b" + integrity sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg== dependencies: - yallist "^4.0.0" + is-unicode-supported "^2.0.0" + yoctocolors "^2.1.1" magic-string@^0.30.21: version "0.30.21" @@ -2197,13 +831,13 @@ magic-string@^0.30.21: dependencies: "@jridgewell/sourcemap-codec" "^1.5.5" -magicast@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.5.1.tgz#518959aea78851cd35d4bb0da92f780db3f606d3" - integrity sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw== +magicast@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.5.3.tgz#1800f6e76dd8b0dbe7257438a2c336aefabbd905" + integrity sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw== dependencies: - "@babel/parser" "^7.28.5" - "@babel/types" "^7.28.5" + "@babel/parser" "^7.29.3" + "@babel/types" "^7.29.0" source-map-js "^1.2.1" make-dir@^4.0.0: @@ -2213,297 +847,50 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^3.0.0, minipass@^3.1.1: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -"mkdirp@>=0.5 0", mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - nanoid@^3.3.11: version "3.3.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -node-os-utils@1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/node-os-utils/-/node-os-utils-1.3.7.tgz#77cc341ae39584e12d3aadf6046fe420ff4c9340" - integrity sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q== - -"normalize-package-data@~1.0.1 || ^2.0.0 || ^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -"npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^8.0.0": - version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" - integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== - dependencies: - hosted-git-info "^4.0.1" - semver "^7.3.4" - validate-npm-package-name "^3.0.0" - -"npmlog@2 || ^3.1.0 || ^4.0.0": - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parsimmon@^1.13.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/parsimmon/-/parsimmon-1.18.1.tgz#d8dd9c28745647d02fc6566f217690897eed7709" - integrity sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -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-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +node-os-utils@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-os-utils/-/node-os-utils-2.0.1.tgz#a0ea8b30861396c0dab4e2733fa92bdba5257a00" + integrity sha512-rH2N3qHZETLhdgTGhMMCE8zU3gsWO4we1MFtrSiAI7tYWrnJRc6dk2PseV4co3Lb0v/MbRONLQI2biHQYbpTpg== -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +obug@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/obug/-/obug-2.1.1.tgz#2cba74ff241beb77d63055ddf4cd1e9f90b538be" + integrity sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ== pathe@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - picomatch@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== -postcss@^8.5.6: - version "8.5.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" - integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== +picomatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" + integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== + +postcss@^8.5.14: + version "8.5.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.14.tgz#a66c2d7808fadf69ebb5b84a03f8bafd76c4919c" + integrity sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg== dependencies: nanoid "^3.3.11" picocolors "^1.1.1" source-map-js "^1.2.1" -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - q-i@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/q-i/-/q-i-2.0.1.tgz#fec7e3f0e713f3467358bb5ac80bcc4c115187d6" @@ -2513,16 +900,6 @@ q-i@2.0.1: is-plain-object "^2.0.4" stringify-object "^3.2.0" -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - radashi@13.0.0-beta.ffa4778: version "13.0.0-beta.ffa4778" resolved "https://registry.yarnpkg.com/radashi/-/radashi-13.0.0-beta.ffa4778.tgz#9208595544e77cad5add33dcd1fb4e45212a0788" @@ -2533,362 +910,117 @@ rambda@6.4.0: resolved "https://registry.yarnpkg.com/rambda/-/rambda-6.4.0.tgz#bf080047b03d8d2c72e3ce5c17c603517a65749a" integrity sha512-aBoE7YrGQP1xnxjyg5fhupfS+FTrDVjZMtwpezl15RKLNnKLOYDfjx/0xDE+8GyWbbZfODRkAOZmnpvxrAONbQ== -rambdax@11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/rambdax/-/rambdax-11.1.1.tgz#082ea9820e5d8cae99efe623306173bc3b1129de" - integrity sha512-q6DRSOMRwg/yEWUvempmAxKSXeo4+qPmwVhQOxozW2W43rJ/yFF8F8lG7FTSpmBlH0CkFMqld1tuCcxbmpmwQw== +rambdax@11.3.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/rambdax/-/rambdax-11.3.0.tgz#1439408c310d674efbb853262033927303584733" + integrity sha512-3zj6gv1qXMlr/p90pV2psu+bK68lG+2JS0WoH0mHbPU8RZnLrCq9rsRq/gezsTYpbvhM+A3pfX0/5eSr1C0pFQ== rambdax@11.3.1: version "11.3.1" resolved "https://registry.yarnpkg.com/rambdax/-/rambdax-11.3.1.tgz#b8136ca8a0eb96d0ea2c7f7723593b16d6b0e36d" integrity sha512-ecsDpTQZuzZD16hPGpkja3klaho4I0tRp5IkjmUUrR7tNnw5RP9K/eiPfHev4HrRNr4OoUetIL/OOWFmeYls7A== -rambdax@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/rambdax/-/rambdax-7.0.1.tgz#6a1b3184abcf4cf6df5dffc27fc0d71100aa21ec" - integrity sha512-Xrrp45dg1PLt40LMcjfNyVDcPBndzpR2t+AXGAcc9iqU9lD9bnk/b1B+n4W5tFXoSKDmZmgckcA8ajgVzbtxGA== - ramda@0.32.0: version "0.32.0" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.32.0.tgz#b2116807b59b6b177af7a2ad19b14a3653570e96" integrity sha512-GQWAHhxhxWBWA8oIBr1XahFVjQ9Fic6MK9ikijfd4TZHfE2+urfk+irVlR5VOn48uwMgM+loRRBJd6Yjsbc0zQ== -readable-stream@^2.0.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -remeda@2.32.0: - version "2.32.0" - resolved "https://registry.yarnpkg.com/remeda/-/remeda-2.32.0.tgz#51eafec73c6ee80c44689d44bb0233255c41b724" - integrity sha512-BZx9DsT4FAgXDTOdgJIc5eY6ECIXMwtlSPQoPglF20ycSWigttDDe88AozEsPPT4OWk5NujroGSBC1phw5uU+w== - dependencies: - type-fest "^4.41.0" - -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@^1.3.2: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" +remeda@2.34.1: + version "2.34.1" + resolved "https://registry.yarnpkg.com/remeda/-/remeda-2.34.1.tgz#4c2038ea90d31716ca735ac05210331238bf96ef" + integrity sha512-k5iIF3lHm2NQ+2bNGDvZTD5jZl/JZkCS6AQOfGjYBd7V4rbb3K5whHvab0/O7CqPI43vYzbnIVCQXQJqmOyI6w== -rollup@4.53.3: - version "4.53.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.53.3.tgz#dbc8cd8743b38710019fb8297e8d7a76e3faa406" - integrity sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA== +rolldown@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.0.1.tgz#2e2e839106dc47951e42dbba414f0f0ecf97ac68" + integrity sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ== dependencies: - "@types/estree" "1.0.8" + "@oxc-project/types" "=0.130.0" + "@rolldown/pluginutils" "^1.0.0" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.53.3" - "@rollup/rollup-android-arm64" "4.53.3" - "@rollup/rollup-darwin-arm64" "4.53.3" - "@rollup/rollup-darwin-x64" "4.53.3" - "@rollup/rollup-freebsd-arm64" "4.53.3" - "@rollup/rollup-freebsd-x64" "4.53.3" - "@rollup/rollup-linux-arm-gnueabihf" "4.53.3" - "@rollup/rollup-linux-arm-musleabihf" "4.53.3" - "@rollup/rollup-linux-arm64-gnu" "4.53.3" - "@rollup/rollup-linux-arm64-musl" "4.53.3" - "@rollup/rollup-linux-loong64-gnu" "4.53.3" - "@rollup/rollup-linux-ppc64-gnu" "4.53.3" - "@rollup/rollup-linux-riscv64-gnu" "4.53.3" - "@rollup/rollup-linux-riscv64-musl" "4.53.3" - "@rollup/rollup-linux-s390x-gnu" "4.53.3" - "@rollup/rollup-linux-x64-gnu" "4.53.3" - "@rollup/rollup-linux-x64-musl" "4.53.3" - "@rollup/rollup-openharmony-arm64" "4.53.3" - "@rollup/rollup-win32-arm64-msvc" "4.53.3" - "@rollup/rollup-win32-ia32-msvc" "4.53.3" - "@rollup/rollup-win32-x64-gnu" "4.53.3" - "@rollup/rollup-win32-x64-msvc" "4.53.3" - fsevents "~2.3.2" - -rollup@^4.43.0: - version "4.52.4" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.4.tgz#71e64cce96a865fcbaa6bb62c6e82807f4e378a1" - integrity sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ== + "@rolldown/binding-android-arm64" "1.0.1" + "@rolldown/binding-darwin-arm64" "1.0.1" + "@rolldown/binding-darwin-x64" "1.0.1" + "@rolldown/binding-freebsd-x64" "1.0.1" + "@rolldown/binding-linux-arm-gnueabihf" "1.0.1" + "@rolldown/binding-linux-arm64-gnu" "1.0.1" + "@rolldown/binding-linux-arm64-musl" "1.0.1" + "@rolldown/binding-linux-ppc64-gnu" "1.0.1" + "@rolldown/binding-linux-s390x-gnu" "1.0.1" + "@rolldown/binding-linux-x64-gnu" "1.0.1" + "@rolldown/binding-linux-x64-musl" "1.0.1" + "@rolldown/binding-openharmony-arm64" "1.0.1" + "@rolldown/binding-wasm32-wasi" "1.0.1" + "@rolldown/binding-win32-arm64-msvc" "1.0.1" + "@rolldown/binding-win32-x64-msvc" "1.0.1" + +rollup@4.60.4: + version "4.60.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.60.4.tgz#ca3814f5900da3ac3981d2e0c61944b7e6e0cb09" + integrity sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.52.4" - "@rollup/rollup-android-arm64" "4.52.4" - "@rollup/rollup-darwin-arm64" "4.52.4" - "@rollup/rollup-darwin-x64" "4.52.4" - "@rollup/rollup-freebsd-arm64" "4.52.4" - "@rollup/rollup-freebsd-x64" "4.52.4" - "@rollup/rollup-linux-arm-gnueabihf" "4.52.4" - "@rollup/rollup-linux-arm-musleabihf" "4.52.4" - "@rollup/rollup-linux-arm64-gnu" "4.52.4" - "@rollup/rollup-linux-arm64-musl" "4.52.4" - "@rollup/rollup-linux-loong64-gnu" "4.52.4" - "@rollup/rollup-linux-ppc64-gnu" "4.52.4" - "@rollup/rollup-linux-riscv64-gnu" "4.52.4" - "@rollup/rollup-linux-riscv64-musl" "4.52.4" - "@rollup/rollup-linux-s390x-gnu" "4.52.4" - "@rollup/rollup-linux-x64-gnu" "4.52.4" - "@rollup/rollup-linux-x64-musl" "4.52.4" - "@rollup/rollup-openharmony-arm64" "4.52.4" - "@rollup/rollup-win32-arm64-msvc" "4.52.4" - "@rollup/rollup-win32-ia32-msvc" "4.52.4" - "@rollup/rollup-win32-x64-gnu" "4.52.4" - "@rollup/rollup-win32-x64-msvc" "4.52.4" + "@rollup/rollup-android-arm-eabi" "4.60.4" + "@rollup/rollup-android-arm64" "4.60.4" + "@rollup/rollup-darwin-arm64" "4.60.4" + "@rollup/rollup-darwin-x64" "4.60.4" + "@rollup/rollup-freebsd-arm64" "4.60.4" + "@rollup/rollup-freebsd-x64" "4.60.4" + "@rollup/rollup-linux-arm-gnueabihf" "4.60.4" + "@rollup/rollup-linux-arm-musleabihf" "4.60.4" + "@rollup/rollup-linux-arm64-gnu" "4.60.4" + "@rollup/rollup-linux-arm64-musl" "4.60.4" + "@rollup/rollup-linux-loong64-gnu" "4.60.4" + "@rollup/rollup-linux-loong64-musl" "4.60.4" + "@rollup/rollup-linux-ppc64-gnu" "4.60.4" + "@rollup/rollup-linux-ppc64-musl" "4.60.4" + "@rollup/rollup-linux-riscv64-gnu" "4.60.4" + "@rollup/rollup-linux-riscv64-musl" "4.60.4" + "@rollup/rollup-linux-s390x-gnu" "4.60.4" + "@rollup/rollup-linux-x64-gnu" "4.60.4" + "@rollup/rollup-linux-x64-musl" "4.60.4" + "@rollup/rollup-openbsd-x64" "4.60.4" + "@rollup/rollup-openharmony-arm64" "4.60.4" + "@rollup/rollup-win32-arm64-msvc" "4.60.4" + "@rollup/rollup-win32-ia32-msvc" "4.60.4" + "@rollup/rollup-win32-x64-gnu" "4.60.4" + "@rollup/rollup-win32-x64-msvc" "4.60.4" fsevents "~2.3.2" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -"semver@2 >=2.2.1 || 3.x || 4 || 5 || 7", semver@^7.3.4, semver@^7.3.7, semver@^7.5.2: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^5.3.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - semver@^7.5.3: version "7.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -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== - siginfo@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slide@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== - source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.18" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" - integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sshpk@^1.7.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" - integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - stackback@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -std-env@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" - integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== - -string-fn@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/string-fn/-/string-fn-3.3.2.tgz#9a25c320bdfc470a73cbb3df0f01f4f5e59828ae" - integrity sha512-gttgF9WBDgd7+fjzjNiIaQjne4KwcU2F+h7OscDdfB3IB8ag70eJbcf8Bc2kmGISjEMwlcV6uHlZHSIYcBwDGw== - dependencies: - rambdax "7.0.1" +std-env@^4.0.0-rc.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-4.1.0.tgz#45899abc590d86d682e87f0acd1033a75084cd3f" + integrity sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ== -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== +string-fn@3.6.3: + version "3.6.3" + resolved "https://registry.yarnpkg.com/string-fn/-/string-fn-3.6.3.tgz#952203a4c512f013fb419fe3bcf52e3715075068" + integrity sha512-TOuTWUnWZt3EYPIyRJ7DWByKpxgZv1CIP/hLjT+8c3kIAS/14MAypz2olew9XmVNSDE98X/QYiMt8PKGZ9mDXQ== dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" + rambdax "11.3.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, 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== @@ -2897,19 +1029,14 @@ string-width@^1.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +string-width@^7.0.0, string-width@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== dependencies: - safe-buffer "~5.1.0" + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" stringify-object@^3.2.0: version "3.3.0" @@ -2920,41 +1047,19 @@ stringify-object@^3.2.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +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-json-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== +strip-ansi@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== dependencies: - has-flag "^3.0.0" + ansi-regex "^6.2.2" supports-color@^7.1.0: version "7.2.0" @@ -2970,39 +1075,6 @@ supports-color@^8: dependencies: has-flag "^4.0.0" -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.1.11: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - tinybench@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" @@ -3013,10 +1085,10 @@ tinycolor2@^1.0.0: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== -tinyexec@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" - integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== +tinyexec@^1.0.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.1.2.tgz#11feef204b706d4668ca4013db29f3bd64f5c4dc" + integrity sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA== tinyglobby@^0.2.15: version "0.2.15" @@ -3026,6 +1098,14 @@ tinyglobby@^0.2.15: fdir "^6.5.0" picomatch "^4.0.3" +tinyglobby@^0.2.16: + version "0.2.16" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.16.tgz#1c3b7eb953fce42b226bc5a1ee06428281aff3d6" + integrity sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.4" + tinygradient@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/tinygradient/-/tinygradient-1.1.5.tgz#0fb855ceb18d96b21ba780b51a8012033b2530ef" @@ -3034,108 +1114,26 @@ tinygradient@^1.1.5: "@types/tinycolor2" "^1.4.0" tinycolor2 "^1.0.0" -tinyrainbow@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.0.3.tgz#984a5b1c1b25854a9b6bccbe77964d0593d1ea42" - integrity sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q== - -tmp@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - -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" - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" +tinyrainbow@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.1.0.tgz#1d8a623893f95cf0a2ddb9e5d11150e191409421" + integrity sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw== ts-toolbelt@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== -tslib@^1.8.0, tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslint@5.14.0: - version "5.14.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.14.0.tgz#be62637135ac244fc9b37ed6ea5252c9eba1616e" - integrity sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ== - dependencies: - babel-code-frame "^6.22.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.7.0" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^4.41.0: +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +type-fest@^4.21.0: version "4.41.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - types-ramda@0.31.0: version "0.31.0" resolved "https://registry.yarnpkg.com/types-ramda/-/types-ramda-0.31.0.tgz#7cb72d1133107679855aab1e57a0cbffff3ea8b1" @@ -3143,119 +1141,60 @@ types-ramda@0.31.0: dependencies: ts-toolbelt "^9.6.0" -typescript@6.0.0-dev.20251119: - version "6.0.0-dev.20251119" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.0-dev.20251119.tgz#0b89469276f58969cfee6285de2dddac9431aa03" - integrity sha512-bP8dUqiG7IzMxPqKQRc7MSdmKvt/7eUeHgRp0Cbv7ta5x4Q0sV4OSzB/6PrTbLdpXpKVD+Cw4vobCcBPNeejUg== +typescript@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.3.tgz#90251dc007916e972786cb94d74d15b185577d21" + integrity sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw== -undici-types@~7.16.0: - version "7.16.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" - integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +"undici-types@>=7.24.0 <7.24.7": + version "7.24.6" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.24.6.tgz#61275b485d7fd4e9d269c7cf04ec2873c9cc0f91" + integrity sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg== universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== - dependencies: - builtins "^1.0.3" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -"vite@^6.0.0 || ^7.0.0": - version "7.1.10" - resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.10.tgz#47c9970f3b0fe9057bfbcfeff8cd370edd7bd41b" - integrity sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA== +"vite@^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.0.13" + resolved "https://registry.yarnpkg.com/vite/-/vite-8.0.13.tgz#d75fb40aeee761051b0eb4620993da625c7719ab" + integrity sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw== dependencies: - esbuild "^0.25.0" - fdir "^6.5.0" - picomatch "^4.0.3" - postcss "^8.5.6" - rollup "^4.43.0" - tinyglobby "^0.2.15" + lightningcss "^1.32.0" + picomatch "^4.0.4" + postcss "^8.5.14" + rolldown "1.0.1" + tinyglobby "^0.2.16" optionalDependencies: fsevents "~2.3.3" -vitest@4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-4.0.10.tgz#587e3d5594444c5ae2e02310f1b1df891b04a0b7" - integrity sha512-2Fqty3MM9CDwOVet/jaQalYlbcjATZwPYGcqpiYQqgQ/dLC7GuHdISKgTYIVF/kaishKxLzleKWWfbSDklyIKg== - dependencies: - "@vitest/expect" "4.0.10" - "@vitest/mocker" "4.0.10" - "@vitest/pretty-format" "4.0.10" - "@vitest/runner" "4.0.10" - "@vitest/snapshot" "4.0.10" - "@vitest/spy" "4.0.10" - "@vitest/utils" "4.0.10" - debug "^4.4.3" - es-module-lexer "^1.7.0" - expect-type "^1.2.2" +vitest@5.0.0-beta.2: + version "5.0.0-beta.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-5.0.0-beta.2.tgz#812eaae0240e9027df6ec636cd8b570f1426ffeb" + integrity sha512-HnM/uQfbToilHYwWW2tdaPM0GYZCdDx5Moxzgfq4wjlpF3MTUP8T7XGgXIE/S90y4BX8pLoc4xD9jqDvHbY2qA== + dependencies: + "@types/chai" "^5.2.2" + "@vitest/mocker" "5.0.0-beta.2" + "@vitest/pretty-format" "5.0.0-beta.2" + "@vitest/runner" "5.0.0-beta.2" + "@vitest/spy" "5.0.0-beta.2" + "@vitest/utils" "5.0.0-beta.2" + chai "^6.2.2" + es-module-lexer "^2.0.0" + expect-type "^1.3.0" magic-string "^0.30.21" + obug "^2.1.1" pathe "^2.0.3" picomatch "^4.0.3" - std-env "^3.10.0" + std-env "^4.0.0-rc.1" tinybench "^2.9.0" - tinyexec "^0.3.2" + tinyexec "^1.0.2" tinyglobby "^0.2.15" - tinyrainbow "^3.0.3" - vite "^6.0.0 || ^7.0.0" + tinyrainbow "^3.1.0" + vite "^6.0.0 || ^7.0.0 || ^8.0.0" why-is-node-running "^2.3.0" -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -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" - why-is-node-running@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" @@ -3264,12 +1203,12 @@ why-is-node-running@^2.3.0: siginfo "^2.0.0" stackback "0.0.2" -wide-align@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== +widest-line@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-5.0.0.tgz#b74826a1e480783345f0cd9061b49753c9da70d0" + integrity sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA== dependencies: - string-width "^1.0.2 || 2 || 3 || 4" + string-width "^7.0.0" window-size@^1: version "1.1.1" @@ -3279,61 +1218,16 @@ window-size@^1: define-property "^1.0.0" is-number "^3.0.0" -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== +wrap-ansi@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98" + integrity sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^15.1.0, yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.2.tgz#d795f54d173494e7d8db93150cec0ed7f678c83a" + integrity sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==