gensequence
Advanced tools
Comparing version 0.2.2 to 0.2.3
@@ -19,3 +19,4 @@ export declare type Maybe<T> = T | undefined; | ||
take(n: number): Sequence<T>; | ||
first(fnFilter?: (t: T) => boolean): Maybe<T>; | ||
first(fnFilter?: (t: T) => boolean, defaultValue?: T): Maybe<T>; | ||
first(fnFilter: (t: T) => boolean, defaultValue: T): T; | ||
toArray(): T[]; | ||
@@ -32,3 +33,7 @@ toIterable(): IterableIterator<T>; | ||
export declare function genSequence<T>(i: GenIterable<T>): Sequence<T>; | ||
export declare const GenSequence: typeof genSequence; | ||
export declare const GenSequence: { | ||
genSequence: <T>(i: GenIterable<T>) => Sequence<T>; | ||
sequenceFromRegExpMatch: (pattern: RegExp, text: string) => Sequence<RegExpExecArray>; | ||
sequenceFromObject: <T>(t: T) => Sequence<[keyof T, T[keyof T]]>; | ||
}; | ||
export declare function filter<T>(fnFilter: (t: T) => boolean, i: Iterable<T>): IterableIterator<T>; | ||
@@ -57,3 +62,3 @@ export declare function reduce<T, U>(fnReduce: (prevValue: U, curValue: T, curIndex: number) => U, initialValue: U, i: Iterable<T>): U; | ||
export declare function concatMap<T, U>(fn: (t: T) => Iterable<U>, i: Iterable<T>): IterableIterator<U>; | ||
export declare function first<T>(fn: Maybe<(t: T) => boolean>, i: Iterable<T>): Maybe<T>; | ||
export declare function first<T>(fn: Maybe<(t: T) => boolean>, defaultValue: Maybe<T>, i: Iterable<T>): Maybe<T>; | ||
export declare function toIterator<T>(i: Iterable<T>): IterableIterator<T>; | ||
@@ -63,2 +68,4 @@ export declare type KeyValuePair<T> = [keyof T, T[keyof T]]; | ||
export declare function objectToSequence<T>(t: T): Sequence<KeyValuePair<T>>; | ||
export declare function sequenceFromObject<T>(t: T): Sequence<KeyValuePair<T>>; | ||
export declare function sequenceFromRegExpMatch(pattern: RegExp, text: string): Sequence<RegExpExecArray>; | ||
export default genSequence; |
@@ -32,4 +32,4 @@ "use strict"; | ||
}, | ||
first: (fnFilter) => { | ||
return first(fnFilter, i); | ||
first: (fnFilter, defaultValue) => { | ||
return first(fnFilter, defaultValue, i); | ||
}, | ||
@@ -43,4 +43,8 @@ toArray: () => [...i[Symbol.iterator]()], | ||
exports.genSequence = genSequence; | ||
// Naming Compatibility | ||
exports.GenSequence = genSequence; | ||
// Collection of entry points into GenSequence | ||
exports.GenSequence = { | ||
genSequence, | ||
sequenceFromRegExpMatch, | ||
sequenceFromObject, | ||
}; | ||
function* filter(fnFilter, i) { | ||
@@ -167,3 +171,3 @@ for (const v of i) { | ||
exports.concatMap = concatMap; | ||
function first(fn, i) { | ||
function first(fn, defaultValue, i) { | ||
fn = fn || (t => true); | ||
@@ -175,3 +179,3 @@ for (const t of i) { | ||
} | ||
return undefined; | ||
return defaultValue; | ||
} | ||
@@ -193,7 +197,28 @@ exports.first = first; | ||
function objectToSequence(t) { | ||
return sequenceFromObject(t); | ||
} | ||
exports.objectToSequence = objectToSequence; | ||
function sequenceFromObject(t) { | ||
return genSequence(objectIterator(t)); | ||
} | ||
exports.objectToSequence = objectToSequence; | ||
exports.sequenceFromObject = sequenceFromObject; | ||
function sequenceFromRegExpMatch(pattern, text) { | ||
function* doMatch() { | ||
const regex = new RegExp(pattern); | ||
let match; | ||
let lastIndex = undefined; | ||
while (match = regex.exec(text)) { | ||
// Make sure it stops if the index does not move forward. | ||
if (match.index === lastIndex) { | ||
break; | ||
} | ||
lastIndex = match.index; | ||
yield match; | ||
} | ||
} | ||
return genSequence(doMatch()); | ||
} | ||
exports.sequenceFromRegExpMatch = sequenceFromRegExpMatch; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.default = genSequence; | ||
//# sourceMappingURL=GenSequence.js.map |
{ | ||
"name": "gensequence", | ||
"version": "0.2.2", | ||
"version": "0.2.3", | ||
"description": "Small library to simplify working with Generators and Iterators in Javascript / Typescript", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -1,2 +0,2 @@ | ||
import { genSequence, objectToSequence } from './GenSequence'; | ||
import { genSequence, sequenceFromObject, sequenceFromRegExpMatch } from './GenSequence'; | ||
import { expect } from 'chai'; | ||
@@ -137,2 +137,4 @@ | ||
expect(genSequence(values).first(a => a > 3.5)).to.be.equal(4); | ||
expect(genSequence(values).first(a => a > 100)).to.be.undefined; | ||
expect(genSequence(values).first(a => a > 100, -1)).to.be.equal(-1); | ||
}); | ||
@@ -147,5 +149,5 @@ | ||
} | ||
const i = objectToSequence(person); | ||
const i = sequenceFromObject(person); | ||
expect(i.map(kvp => kvp[0]).toArray().sort()).to.be.deep.equal(Object.keys(person).sort()); | ||
const j = objectToSequence(person); | ||
const j = sequenceFromObject(person); | ||
expect(j.map(kvp => kvp[1]).toArray().sort()).to.be.deep.equal(Object.keys(person).map(k => person[k]).sort()); | ||
@@ -161,3 +163,3 @@ }); | ||
} | ||
const i = objectToSequence(person); | ||
const i = sequenceFromObject(person); | ||
const j = genSequence(i); | ||
@@ -176,2 +178,18 @@ const values0 = j.toArray(); | ||
}); | ||
it('tests sequenceFromRegExpMatch', () => { | ||
const tests: [RegExp, string, string[]][] = [ | ||
[/a/, 'aaaa', ['a']], | ||
[/a/g, 'aaaa', ['a', 'a', 'a', 'a']], | ||
[/a/g, 'AAAA', []], | ||
[/a/gi, 'AAAA', ['A', 'A', 'A', 'A']], | ||
[/a/gi, 'AB\nA\nCA\nDA\n', ['A', 'A', 'A', 'A']], | ||
[/^.?a.?$/gim, 'AB\nA\nCA\nDA\n', ['AB', 'A', 'CA', 'DA']], | ||
] | ||
tests.forEach(test => { | ||
const [reg, str, expected] = test; | ||
const result = sequenceFromRegExpMatch(reg, str).map(a => a[0]).toArray(); | ||
expect(result, test.toString()).to.deep.equal(expected); | ||
}); | ||
}); | ||
}); |
@@ -21,3 +21,4 @@ | ||
take(n: number): Sequence<T>; | ||
first(fnFilter?: (t: T)=> boolean): Maybe<T>; | ||
first(fnFilter?: (t: T)=> boolean, defaultValue?: T): Maybe<T>; | ||
first(fnFilter: (t: T)=> boolean, defaultValue: T): T; | ||
toArray(): T[]; | ||
@@ -66,4 +67,4 @@ toIterable(): IterableIterator<T>; | ||
}, | ||
first: (fnFilter?: (t: T) => boolean) => { | ||
return first(fnFilter, i); | ||
first: (fnFilter: (t: T) => boolean, defaultValue: T): T => { | ||
return first(fnFilter, defaultValue, i) as T; | ||
}, | ||
@@ -77,4 +78,8 @@ toArray: () => [...i[Symbol.iterator]()], | ||
// Naming Compatibility | ||
export const GenSequence = genSequence; | ||
// Collection of entry points into GenSequence | ||
export const GenSequence = { | ||
genSequence, | ||
sequenceFromRegExpMatch, | ||
sequenceFromObject, | ||
}; | ||
@@ -218,3 +223,4 @@ export function* filter<T>(fnFilter: (t: T) => boolean, i: Iterable<T>) { | ||
export function first<T>(fn: Maybe<(t: T) => boolean>, i: Iterable<T>): Maybe<T> { | ||
export function first<T>(fn: Maybe<(t: T) => boolean>, defaultValue: Maybe<T>, i: Iterable<T>): Maybe<T>; | ||
export function first<T>(fn: (t: T) => boolean, defaultValue: T, i: Iterable<T>): T { | ||
fn = fn || (t => true); | ||
@@ -226,3 +232,3 @@ for (const t of i) { | ||
} | ||
return undefined; | ||
return defaultValue; | ||
} | ||
@@ -247,5 +253,28 @@ | ||
export function objectToSequence<T>(t: T): Sequence<KeyValuePair<T>> { | ||
return sequenceFromObject<T>(t); | ||
} | ||
export function sequenceFromObject<T>(t: T): Sequence<KeyValuePair<T>> { | ||
return genSequence(objectIterator(t)); | ||
} | ||
export function sequenceFromRegExpMatch(pattern: RegExp, text: string): Sequence<RegExpExecArray> { | ||
function* doMatch() { | ||
const regex = new RegExp(pattern); | ||
let match: RegExpExecArray | null; | ||
let lastIndex: number | undefined = undefined; | ||
while ( match = regex.exec(text) ) { | ||
// Make sure it stops if the index does not move forward. | ||
if (match.index === lastIndex) { | ||
break; | ||
} | ||
lastIndex = match.index; | ||
yield match; | ||
} | ||
} | ||
return genSequence(doMatch()); | ||
} | ||
export default genSequence; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
59077
874