Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
99677d1
lazy.js: delete useless array constructor overload
djcsdy Jun 27, 2024
7e60b6c
lazy.js: improve type of array constructor
djcsdy Jun 27, 2024
008af7f
lazy.js: delete useless object constructor
djcsdy Jun 27, 2024
b1870fa
lazy.js: improve type of object constructor
djcsdy Jun 27, 2024
4cf058b
lazy.js: delete on function
djcsdy Jun 27, 2024
e49831f
lazy.js: correct Iterator constructor type
djcsdy Jun 27, 2024
7cc90bc
lazy.js: correct type of first function
djcsdy Jun 27, 2024
fb8250b
lazy.js: correct type of indexOf function
djcsdy Jun 27, 2024
1b27a44
lazy.js: correct type of last function
djcsdy Jun 27, 2024
55c17fd
lazy.js: correct type of lastIndexOf function
djcsdy Jun 27, 2024
75c4945
lazy.js: delete obsolete comment
djcsdy Jun 27, 2024
212f73b
lazy.js: correct type of async function
djcsdy Jun 27, 2024
fe3049a
lazy.js: correct type of countBy function
djcsdy Jun 27, 2024
a7f2eba
lazy.js: correct type of find function
djcsdy Jun 27, 2024
6661622
lazy.js: improve type of findWhere function
djcsdy Jun 27, 2024
460306b
lazy.js: correct type of invoke function
djcsdy Jun 27, 2024
05a39af
lazy.js: correct type of pluck function
djcsdy Jun 27, 2024
c41cd23
lazy.js: correct type of reduce function
djcsdy Jun 27, 2024
4a5b2bb
lazy.js: correct type of reduceRight function
djcsdy Jun 27, 2024
72ab7fd
lazy.js: correct type of toObject function
djcsdy Jun 27, 2024
a2108ed
lazy.js: correct type of where function
djcsdy Jun 28, 2024
1235408
lazy.js: correct type of get function
djcsdy Jun 28, 2024
f9d4131
lazy.js: correct type of async function
djcsdy Jun 28, 2024
209947c
lazy.js: correct type of defaults function
djcsdy Jun 28, 2024
dec779e
lazy.js: correct type of functions function
djcsdy Jun 28, 2024
e57ffd6
lazy.js: correct type of pairs function
djcsdy Jun 29, 2024
1a996d6
lazy.js: correct type of watch function
djcsdy Jun 29, 2024
ccca703
lazy.js: correct type of concat function
djcsdy Jun 29, 2024
cd6b150
lazy.js: correct type of groupBy function
djcsdy Jun 29, 2024
0389d73
lazy.js: add type guard overload for filter function
djcsdy Jun 29, 2024
fc36f06
lazy.js: apply code formatter
djcsdy Jun 29, 2024
0d0f327
lazy.js: enable strict null checks
djcsdy Jun 29, 2024
339d8d2
lazy.js: improve type of constructor function
djcsdy Jun 29, 2024
6d590ad
lazy.js: improve type of concat function
djcsdy Jun 30, 2024
6d71174
lazy.js: add overload of union function
djcsdy Jun 30, 2024
857aed5
lazy.js: add overload of uniq function
djcsdy Jul 1, 2024
5aad60b
lazy.js: delete Iterator constructor
djcsdy Jul 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 39 additions & 37 deletions types/lazy.js/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
declare namespace LazyJS {
interface LazyStatic {
(value: string): StringLikeSequence;
<T>(value: T[]): ArrayLikeSequence<T>;
(value: any[]): ArrayLikeSequence<any>;
<T>(value: any): ObjectLikeSequence<T>;
(value: any): ObjectLikeSequence<any>;
<T>(value: readonly T[]): ArrayLikeSequence<T>;
<T, K extends string | number = string | number>(value: Readonly<Record<K, T>>): ObjectLikeSequence<T>;

strict(): LazyStatic;

Expand All @@ -18,8 +16,6 @@ declare namespace LazyJS {

repeat<T>(value: T, count?: number): GeneratedSequence<T>;

on<T>(eventType: string): Sequence<T>;

readFile(path: string): StringLikeSequence;
makeHttpRequest(path: string): StringLikeSequence;
}
Expand Down Expand Up @@ -76,7 +72,6 @@ declare namespace LazyJS {
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

interface Iterator<T> {
new(sequence: Sequence<T>): Iterator<T>;
current(): T;
moveNext(): boolean;
}
Expand Down Expand Up @@ -109,13 +104,13 @@ declare namespace LazyJS {
}

interface SequenceBase<T> extends SequenceBaser<T> {
first(): any;
first(): T | undefined;
first(count: number): Sequence<T>;
indexOf(value: any, startIndex?: number): number;
indexOf(value: T, equalityFn?: (a: T, b: T) => boolean): number;

last(): any;
last(): T | undefined;
last(count: number): Sequence<T>;
lastIndexOf(value: any): number;
lastIndexOf(value: T, equalityFn?: (a: T, b: T) => boolean): number;

reverse(): Sequence<T>;
}
Expand Down Expand Up @@ -152,35 +147,39 @@ declare namespace LazyJS {
];

interface SequenceBaser<T> {
// TODO improve define() (needs ugly overload)
async(interval: number): AsyncSequence<T>;
async(interval?: number): AsyncSequence<T>;
chunk<N extends number>(size: N): Sequence<Tuple<T, N>>;
compact(): Sequence<T>;
concat(var_args: T[]): Sequence<T>;
concat(...var_args: Array<T | T[] | SequenceBaser<T>>): Sequence<T>;
consecutive(length: number): Sequence<T>;
contains(value: T): boolean;
countBy(keyFn: GetKeyCallback<T>): ObjectLikeSequence<T>;
countBy(propertyName: string): ObjectLikeSequence<T>;
countBy(keyFn: GetKeyCallback<T>): ObjectLikeSequence<number>;
countBy(propertyName: keyof T): ObjectLikeSequence<number>;
dropWhile(predicateFn: TestCallback<T, string | number>): Sequence<T>;
every(predicateFn: TestCallback<T, string | number>): boolean;
filter<U extends T>(predicateFn: (value: T, index: string | number) => value is U): Sequence<U>;
filter(predicateFn: TestCallback<T, string | number>): Sequence<T>;
find(predicateFn: TestCallback<T, string | number>): T;
findWhere(properties: any): T;
find(predicateFn: TestCallback<T, string | number>): T | undefined;
findWhere(properties: Partial<T>): T;
flatten(shallow: true): Sequence<Flatten<T, true>>;
flatten(shallow?: false): Sequence<Flatten<T, false>>;
groupBy(keyFn: GetKeyCallback<T>): ObjectLikeSequence<T>;
groupBy(keyFn: GetKeyCallback<T>): ObjectLikeSequence<T[]>;
initial(count?: number): Sequence<T>;
intersection(var_args: T[]): Sequence<T>;
invoke(methodName: string): Sequence<T>;
invoke(methodName: string): Sequence<unknown>;
isEmpty(): boolean;
join(delimiter?: string): string;
map<U>(mapFn: MapCallback<T, U>): Sequence<U>;
max(valueFn?: NumberCallback<T>): T;
min(valueFn?: NumberCallback<T>): T;
none(valueFn?: TestCallback<T, string | number>): boolean;
pluck(propertyName: string): Sequence<any>;
reduce<U>(aggregatorFn: MemoCallback<T, U>, memo?: U): U;
pluck<K extends keyof T>(propertyName: K): Sequence<T[K]>;
reduce(aggregatorFn: (memo: T, value: T) => T): T | undefined;
reduce<U>(aggregatorFn: MemoCallback<T, U>, memo: U): U;
reduce<U>(aggregatorFn: (memo: T | U, value: T) => U): T | U | undefined;
reduceRight(aggregatorFn: (memo: T, value: T) => T): T | undefined;
reduceRight<U>(aggregatorFn: MemoCallback<T, U>, memo: U): U;
reduceRight<U>(aggregatorFn: (memo: T | U, value: T) => U): T | U | undefined;
reject(predicateFn: TestCallback<T, string | number>): Sequence<T>;
rest(count?: number): Sequence<T>;
shuffle(): Sequence<T>;
Expand All @@ -194,9 +193,10 @@ declare namespace LazyJS {
takeWhile(predicateFn: TestCallback<T, string | number>): Sequence<T>;
toArray(): T[];
toObject(): any;
union(var_args: T[]): Sequence<T>;
union(var_args: T | T[] | SequenceBaser<T>): Sequence<T>;
uniq(key: (value: T) => unknown): Sequence<T>;
uniq(key?: keyof T): Sequence<T>;
where(properties: any): Sequence<T>;
where(properties: Partial<T>): Sequence<T>;
without(...var_args: T[]): Sequence<T>;
without(var_args: T[]): Sequence<T>;
zip(var_args: T[]): Sequence<T>;
Expand All @@ -210,10 +210,10 @@ declare namespace LazyJS {

interface ArrayLikeSequence<T> extends Sequence<T> {
// define()X;
concat(var_args: T[]): ArrayLikeSequence<T>;
first(): T;
concat(...var_args: Array<T | T[] | SequenceBaser<T>>): ArrayLikeSequence<T>;
first(): T | undefined;
first(count?: number): ArrayLikeSequence<T>;
get(index: number): T;
get(index: number): T | undefined;
length(): number;
map<U>(mapFn: MapCallback<T, U>): ArrayLikeSequence<U>;
pop(): ArrayLikeSequence<T>;
Expand All @@ -226,8 +226,9 @@ declare namespace LazyJS {

dropWhile(predicateFn: TestCallback<T, number>): Sequence<T>;
every(predicateFn: TestCallback<T, number>): boolean;
filter<U extends T>(predicateFn: (value: T, index: number) => value is U): Sequence<U>;
filter(predicateFn: TestCallback<T, number>): Sequence<T>;
find(predicateFn: TestCallback<T, number>): T;
find(predicateFn: TestCallback<T, number>): T | undefined;
none(valueFn?: TestCallback<T, number>): boolean;
reject(predicateFn: TestCallback<T, number>): Sequence<T>;
some(predicateFn?: TestCallback<T, number>): boolean;
Expand All @@ -242,26 +243,26 @@ declare namespace LazyJS {

interface ObjectLikeSequence<T> extends Sequence<T> {
assign(other: any): ObjectLikeSequence<T>;
// throws error
// async(): X;
defaults(defaults: any): ObjectLikeSequence<T>;
functions(): Sequence<T>;
get(property: string): any;
async(): never;
defaults<U>(defaults: U): ObjectLikeSequence<T | U>;
functions(): Sequence<keyof T>;
get(property: string): T | undefined;
invert(): ObjectLikeSequence<T>;
keys(): Sequence<string>;
merge(others: any | ObjectLikeSequence<T>, mergeFn?: Function): ObjectLikeSequence<T>;
omit(properties: string[]): ObjectLikeSequence<T>;
pairs(): Sequence<T>;
pairs(): Sequence<[string, T]>;
pick(properties: string[]): ObjectLikeSequence<T>;
toArray(): T[];
toObject(): any;
toObject(): Record<string, T>;
values(): Sequence<T>;
watch(propertyNames: string | string[]): Sequence<{ property: string; value: any }>;
watch(propertyNames: string | string[]): Sequence<{ property: string; value: T }>;

dropWhile(predicateFn: TestCallback<T, string>): Sequence<T>;
every(predicateFn: TestCallback<T, string>): boolean;
filter<U extends T>(predicateFn: (value: T, index: string) => value is U): Sequence<U>;
filter(predicateFn: TestCallback<T, string>): Sequence<T>;
find(predicateFn: TestCallback<T, string>): T;
find(predicateFn: TestCallback<T, string>): T | undefined;
none(valueFn?: TestCallback<T, string>): boolean;
reject(predicateFn: TestCallback<T, string>): Sequence<T>;
some(predicateFn?: TestCallback<T, string>): boolean;
Expand Down Expand Up @@ -297,6 +298,7 @@ declare namespace LazyJS {

dropWhile(predicateFn: TestCallback<string, number>): Sequence<string>;
every(predicateFn: TestCallback<string, number>): boolean;
filter<U extends string>(predicateFn: (value: string, index: number) => value is U): Sequence<U>;
filter(predicateFn: TestCallback<string, number>): Sequence<string>;
find(predicateFn: TestCallback<string, number>): string;
none(valueFn?: TestCallback<string, number>): boolean;
Expand Down
98 changes: 57 additions & 41 deletions types/lazy.js/lazy.js-tests.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

interface Foo {
key: string;
foo(): string;
}
interface Bar {
Expand All @@ -9,39 +10,41 @@ interface Bar {

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

var foo: Foo;
var bar: Bar;
declare var foo: Foo;
declare var bar: Bar;

var fooArr: Foo[];
var barArr: Bar[];
declare var fooArr: Foo[];
declare var barArr: Bar[];

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

var fooSequence: LazyJS.Sequence<Foo>;
var fooTupleSequence: LazyJS.Sequence<readonly [Foo, Foo, Foo, Foo, Foo]>;
var fooArrSequence: LazyJS.Sequence<Foo[]>;
var barSequence: LazyJS.Sequence<Bar>;
var fooArraySeq: LazyJS.ArrayLikeSequence<Foo>;
var barArraySeq: LazyJS.ArrayLikeSequence<Bar>;
var fooObjectSeq: LazyJS.ObjectLikeSequence<Foo>;
var anyObjectSeq: LazyJS.ObjectLikeSequence<any>;
var fooAsyncSeq: LazyJS.AsyncSequence<Foo>;

var strSequence: LazyJS.Sequence<string>;
var anySequence: LazyJS.Sequence<any>;
var unknownSequence: LazyJS.Sequence<unknown>;
var stringSeq: LazyJS.StringLikeSequence;

var obj: Object;
var bool: boolean;
var num: number;
var const5: 5;
var str: string;
declare var fooSequence: LazyJS.Sequence<Foo>;
declare var fooTupleSequence: LazyJS.Sequence<readonly [Foo, Foo, Foo, Foo, Foo]>;
declare var fooArrSequence: LazyJS.Sequence<Foo[]>;
declare var barSequence: LazyJS.Sequence<Bar>;
declare var fooArraySeq: LazyJS.ArrayLikeSequence<Foo>;
declare var barArraySeq: LazyJS.ArrayLikeSequence<Bar>;
declare var numObjectSeq: LazyJS.ObjectLikeSequence<number>;
declare var fooObjectSeq: LazyJS.ObjectLikeSequence<Foo>;
declare var fooBarObjectSeq: LazyJS.ObjectLikeSequence<Foo | Bar>;
declare var anyObjectSeq: LazyJS.ObjectLikeSequence<any>;
declare var fooAsyncSeq: LazyJS.AsyncSequence<Foo>;

declare var strSequence: LazyJS.Sequence<string>;
declare var unknownSequence: LazyJS.Sequence<unknown>;
declare var stringSeq: LazyJS.StringLikeSequence;

declare var obj: Object;
declare var bool: boolean;
declare var num: number;
declare var const5: 5;
declare var str: string;
var x: any = null;
var arr: any[];
var exp: RegExp;
var strArr: string[];
var numArr: string[];
declare var arr: any[];
declare var exp: RegExp;
declare var strArr: string[];
declare var numArr: string[];
declare var fooByNumber: Record<number, Foo>;

function fnCallback(): void {
}
Expand Down Expand Up @@ -89,6 +92,8 @@ function fnGeneratorCallback(index: number): Foo {
fooArraySeq = Lazy(fooArr);
fooObjectSeq = Lazy<Foo>({ a: foo, b: foo });
anyObjectSeq = Lazy<any>({ a: num, b: str });
// $ExpectType ObjectLikeSequence<Foo>
Lazy(fooByNumber);
stringSeq = Lazy(str);

// Strict
Expand All @@ -106,30 +111,34 @@ fooSequence = fooSequence.compact();
fooSequence = fooSequence.concat(arr);
fooSequence = fooSequence.consecutive(num);
bool = fooSequence.contains(foo);
fooSequence = fooSequence.countBy(str);
fooObjectSeq = fooSequence.countBy(fnGetKeyCallback);
numObjectSeq = fooSequence.countBy("key");
numObjectSeq = fooSequence.countBy(fnGetKeyCallback);
fooSequence = fooSequence.dropWhile(fnTestCallback);
fooSequence = fooSequence.each(fnValueCallback);
bool = fooSequence.every(fnTestCallback);
fooSequence = fooSequence.filter(fnTestCallback);
foo = fooSequence.find(fnTestCallback);
// $ExpectType Foo | undefined
fooSequence.find(fnTestCallback);
foo = fooSequence.findWhere(obj);

x = fooSequence.first();
fooSequence = fooSequence.first(num);

fooSequence = fooSequence.flatten();
fooObjectSeq = fooSequence.groupBy(fnGetKeyCallback);
// $ExpectType ObjectLikeSequence<Foo[]>
fooSequence.groupBy(fnGetKeyCallback);
num = fooSequence.indexOf(x);
fooSequence = fooSequence.initial();
fooSequence = fooSequence.initial(num);
fooSequence = fooSequence.intersection(arr);
fooSequence = fooSequence.invoke(str);
// $ExpectType Sequence<unknown>
fooSequence.invoke(str);
bool = fooSequence.isEmpty();
str = fooSequence.join();
str = fooSequence.join(str);

foo = fooSequence.last();
// $ExpectType Foo | undefined
fooSequence.last();
fooSequence = fooSequence.last(num);

num = fooSequence.lastIndexOf(foo);
Expand All @@ -138,9 +147,12 @@ foo = fooSequence.max();
foo = fooSequence.max(fnNumberCallback);
foo = fooSequence.min();
foo = fooSequence.min(fnNumberCallback);
anySequence = fooSequence.pluck(str);
bar = fooSequence.reduce(fnMemoCallback);
strSequence = fooSequence.pluck("key");
// $ExpectType Foo | Bar | undefined
fooSequence.reduce(() => bar);
bar = fooSequence.reduce(fnMemoCallback, bar);
// $ExpectType Foo | Bar | undefined
fooSequence.reduceRight(() => bar);
bar = fooSequence.reduceRight(fnMemoCallback, bar);
fooSequence = fooSequence.reject(fnTestCallback);
fooSequence = fooSequence.rest(num);
Expand Down Expand Up @@ -174,7 +186,8 @@ obj = fooSequence.toObject();
fooArraySeq = fooArraySeq.concat(fooArr);
x = fooArraySeq.first();
fooArraySeq = fooArraySeq.first(num);
foo = fooArraySeq.get(num);
// $ExpectType Foo | undefined
fooArraySeq.get(num);
num = fooArraySeq.length();
barArraySeq = fooArraySeq.map(fnMapCallback);
fooArraySeq = fooArraySeq.pop();
Expand All @@ -187,13 +200,16 @@ fooArraySeq = fooArraySeq.slice(num, num);

// ObjectLikeSequence

fooObjectSeq = fooObjectSeq.defaults(obj);
fooSequence = fooObjectSeq.functions();
fooObjectSeq = fooObjectSeq.defaults(foo);
fooBarObjectSeq = fooObjectSeq.defaults(bar);
// $ExpectType Sequence<keyof Foo>
fooObjectSeq.functions();
x = fooObjectSeq.get(str);
fooObjectSeq = fooObjectSeq.invert();
strSequence = fooObjectSeq.keys();
fooObjectSeq = fooObjectSeq.omit(strArr);
fooSequence = fooObjectSeq.pairs();
// $ExpectType Sequence<[string, Foo]>
fooObjectSeq.pairs();
fooObjectSeq = fooObjectSeq.pick(strArr);
arr = fooObjectSeq.toArray();
obj = fooObjectSeq.toObject();
Expand Down Expand Up @@ -231,6 +247,6 @@ stringSeq = stringSeq.toLowerCase();
stringSeq = stringSeq.toUpperCase();

// flatten
var fooSeqSeqSequence: LazyJS.Sequence<LazyJS.Sequence<LazyJS.Sequence<Foo>>>;
declare var fooSeqSeqSequence: LazyJS.Sequence<LazyJS.Sequence<LazyJS.Sequence<Foo>>>;
fooSequence = fooSeqSeqSequence.flatten();
fooSequence = fooSeqSeqSequence.flatten(true).flatten(true);
2 changes: 1 addition & 1 deletion types/lazy.js/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": false,
"strictNullChecks": true,
"strictFunctionTypes": true,
"types": [],
"noEmit": true,
Expand Down