apache-arrow
Version:
Apache Arrow columnar in-memory format
357 lines (338 loc) • 17.7 kB
text/typescript
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
import * as type from './type.js';
import type { Type } from './enum.js';
import type { DataType } from './type.js';
import type { Builder } from './builder.js';
import type { BuilderOptions } from './builder.js';
import type { BoolBuilder } from './builder/bool.js';
import type { NullBuilder } from './builder/null.js';
import type { DateBuilder, DateDayBuilder, DateMillisecondBuilder } from './builder/date.js';
import type { DecimalBuilder } from './builder/decimal.js';
import type { DictionaryBuilder } from './builder/dictionary.js';
import type { FixedSizeBinaryBuilder } from './builder/fixedsizebinary.js';
import type { FloatBuilder, Float16Builder, Float32Builder, Float64Builder } from './builder/float.js';
import type { IntBuilder, Int8Builder, Int16Builder, Int32Builder, Int64Builder, Uint8Builder, Uint16Builder, Uint32Builder, Uint64Builder } from './builder/int.js';
import type { TimeBuilder, TimeSecondBuilder, TimeMillisecondBuilder, TimeMicrosecondBuilder, TimeNanosecondBuilder } from './builder/time.js';
import type { TimestampBuilder, TimestampSecondBuilder, TimestampMillisecondBuilder, TimestampMicrosecondBuilder, TimestampNanosecondBuilder } from './builder/timestamp.js';
import type { IntervalBuilder, IntervalDayTimeBuilder, IntervalYearMonthBuilder } from './builder/interval.js';
import type { DurationBuilder, DurationSecondBuilder, DurationMillisecondBuilder, DurationMicrosecondBuilder, DurationNanosecondBuilder } from './builder/duration.js';
import type { Utf8Builder } from './builder/utf8.js';
import type { LargeUtf8Builder } from './builder/largeutf8.js';
import type { BinaryBuilder } from './builder/binary.js';
import type { LargeBinaryBuilder } from './builder/largebinary.js';
import type { ListBuilder } from './builder/list.js';
import type { FixedSizeListBuilder } from './builder/fixedsizelist.js';
import type { MapBuilder } from './builder/map.js';
import type { StructBuilder } from './builder/struct.js';
import type { UnionBuilder, SparseUnionBuilder, DenseUnionBuilder } from './builder/union.js';
/** @ignore */ type FloatArray = Float32Array | Float64Array;
/** @ignore */ type IntArray = Int8Array | Int16Array | Int32Array;
/** @ignore */ type UintArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray;
/** @ignore */
export type TypedArray = FloatArray | IntArray | UintArray;
/** @ignore */
export type BigIntArray = BigInt64Array | BigUint64Array;
/** @ignore */
export interface TypedArrayConstructor<T extends TypedArray> {
readonly prototype: T;
new(length?: number): T;
new(array: Iterable<number>): T;
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): T;
/**
* The size in bytes of each element in the array.
*/
readonly BYTES_PER_ELEMENT: number;
/**
* Returns a new array from a set of elements.
* @param items A set of elements to include in the new array object.
*/
of(...items: number[]): T;
/**
* Creates an array from an array-like or iterable object.
* @param arrayLike An array-like or iterable object to convert to an array.
* @param mapfn A mapping function to call on every element of the array.
* @param thisArg Value of 'this' used to invoke the mapfn.
*/
from(arrayLike: ArrayLike<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): T;
from<U>(arrayLike: ArrayLike<U>, mapfn: (v: U, k: number) => number, thisArg?: any): T;
}
/** @ignore */
export interface BigIntArrayConstructor<T extends BigIntArray> {
readonly prototype: T;
new(length?: number): T;
new(array: Iterable<bigint>): T;
new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): T;
/**
* The size in bytes of each element in the array.
*/
readonly BYTES_PER_ELEMENT: number;
/**
* Returns a new array from a set of elements.
* @param items A set of elements to include in the new array object.
*/
of(...items: bigint[]): T;
/**
* Creates an array from an array-like or iterable object.
* @param arrayLike An array-like or iterable object to convert to an array.
* @param mapfn A mapping function to call on every element of the array.
* @param thisArg Value of 'this' used to invoke the mapfn.
*/
from(arrayLike: ArrayLike<bigint>, mapfn?: (v: bigint, k: number) => bigint, thisArg?: any): T;
from<U>(arrayLike: ArrayLike<U>, mapfn: (v: U, k: number) => bigint, thisArg?: any): T;
}
/** @ignore */
export type ArrayCtor<T extends TypedArray | BigIntArray> =
T extends TypedArray ? TypedArrayConstructor<T> :
T extends BigIntArray ? BigIntArrayConstructor<T> :
any;
/** @ignore */
export type BuilderCtorArgs<
T extends BuilderType<R, any>,
R extends DataType = any,
TArgs extends any[] = any[],
TCtor extends new (type: R, ...args: TArgs) => T =
new (type: R, ...args: TArgs) => T
> = TCtor extends new (type: R, ...args: infer TArgs) => T ? TArgs : never;
/**
* Obtain the constructor function of an instance type
* @ignore
*/
export type ConstructorType<
T,
TCtor extends new (...args: any[]) => T =
new (...args: any[]) => T
> = TCtor extends new (...args: any[]) => T ? TCtor : never;
/** @ignore */
export type BuilderCtorType<
T extends BuilderType<R, any>,
R extends DataType = any,
TCtor extends new (options: BuilderOptions<R, any>) => T =
new (options: BuilderOptions<R, any>) => T
> = TCtor extends new (options: BuilderOptions<R, any>) => T ? TCtor : never;
/** @ignore */
export type BuilderType<T extends Type | DataType = any, TNull = any> =
T extends Type ? TypeToBuilder<T, TNull> :
T extends DataType ? DataTypeToBuilder<T, TNull> :
Builder<any, TNull>
;
/** @ignore */
export type BuilderCtor<T extends Type | DataType = any> =
T extends Type ? BuilderCtorType<BuilderType<T>> :
T extends DataType ? BuilderCtorType<BuilderType<T>> :
BuilderCtorType<Builder>
;
/** @ignore */
export type DataTypeCtor<T extends Type | DataType = any> =
T extends DataType ? ConstructorType<T> :
T extends Type ? ConstructorType<TypeToDataType<T>> :
never
;
/** @ignore */
export type TypedArrayDataType<T extends TypedArray | BigIntArray> =
T extends Int8Array ? type.Int8 :
T extends Int16Array ? type.Int16 :
T extends Int32Array ? type.Int32 :
T extends BigInt64Array ? type.Int64 :
T extends Uint8Array ? type.Uint8 :
T extends Uint8ClampedArray ? type.Uint8 :
T extends Uint16Array ? type.Uint16 :
T extends Uint32Array ? type.Uint32 :
T extends BigUint64Array ? type.Uint64 :
T extends Float32Array ? type.Float32 :
T extends Float64Array ? type.Float64 :
never;
/** @ignore */
export type JavaScriptDataType<T> = JavaScriptArrayDataType<T[]>;
/** @ignore */
export type JavaScriptArrayDataType<T extends readonly unknown[]> =
T extends readonly (null | undefined)[] ? type.Null :
T extends readonly (null | undefined | boolean)[] ? type.Bool :
T extends readonly (null | undefined | string)[] ? type.Dictionary<type.Utf8, type.Int32> :
T extends readonly (null | undefined | Date)[] ? type.Date_ :
T extends readonly (null | undefined | bigint)[] ? type.Int64 :
T extends readonly (null | undefined | number)[] ? type.Float64 :
T extends readonly (null | undefined | readonly (infer U)[])[] ? type.List<JavaScriptDataType<U>> :
T extends readonly (null | undefined | Record<string, unknown>)[] ? T extends readonly (null | undefined | infer U)[] ? type.Struct<{ [P in keyof U]: JavaScriptDataType<U[P]> }> : never :
never;
/** @ignore */
export type ArrayDataType<T> =
T extends TypedArray | BigIntArray ? TypedArrayDataType<T> :
T extends readonly unknown[] ? JavaScriptArrayDataType<T> :
never;
/** @ignore */
export type TypeToDataType<T extends Type> = {
[ ]: type.DataType;
[ ]: type.Null;
[ ]: type.Bool;
[ ]: type.Int;
[ ]: type.Int16;
[ ]: type.Int32;
[ ]: type.Int64;
[ ]: type.Uint8;
[ ]: type.Uint16;
[ ]: type.Uint32;
[ ]: type.Uint64;
[ ]: type.Int8;
[ ]: type.Float16;
[ ]: type.Float32;
[ ]: type.Float64;
[ ]: type.Float;
[ ]: type.Utf8;
[ ]: type.LargeUtf8;
[ ]: type.Binary;
[ ]: type.LargeBinary;
[ ]: type.FixedSizeBinary;
[ ]: type.Date_;
[ ]: type.DateDay;
[ ]: type.DateMillisecond;
[ ]: type.Timestamp;
[ ]: type.TimestampSecond;
[ ]: type.TimestampMillisecond;
[ ]: type.TimestampMicrosecond;
[ ]: type.TimestampNanosecond;
[ ]: type.Time;
[ ]: type.TimeSecond;
[ ]: type.TimeMillisecond;
[ ]: type.TimeMicrosecond;
[ ]: type.TimeNanosecond;
[ ]: type.Decimal;
[ ]: type.Union;
[ ]: type.DenseUnion;
[ ]: type.SparseUnion;
[ ]: type.Interval;
[ ]: type.IntervalDayTime;
[ ]: type.IntervalYearMonth;
[ ]: type.Duration;
[ ]: type.DurationSecond;
[ ]: type.DurationMillisecond;
[ ]: type.DurationMicrosecond;
[ ]: type.DurationNanosecond;
[ ]: type.Map_;
[ ]: type.List;
[ ]: type.Struct;
[ ]: type.Dictionary;
[ ]: type.FixedSizeList;
}[T];
/** @ignore */
type TypeToBuilder<T extends Type = any, TNull = any> = {
[ ]: Builder;
[ ]: NullBuilder<TNull>;
[ ]: BoolBuilder<TNull>;
[ ]: Int8Builder<TNull>;
[ ]: Int16Builder<TNull>;
[ ]: Int32Builder<TNull>;
[ ]: Int64Builder<TNull>;
[ ]: Uint8Builder<TNull>;
[ ]: Uint16Builder<TNull>;
[ ]: Uint32Builder<TNull>;
[ ]: Uint64Builder<TNull>;
[ ]: IntBuilder<any, TNull>;
[ ]: Float16Builder<TNull>;
[ ]: Float32Builder<TNull>;
[ ]: Float64Builder<TNull>;
[ ]: FloatBuilder<any, TNull>;
[ ]: Utf8Builder<TNull>;
[ ]: LargeUtf8Builder<TNull>;
[ ]: BinaryBuilder<TNull>;
[ ]: LargeBinaryBuilder<TNull>;
[ ]: FixedSizeBinaryBuilder<TNull>;
[ ]: DateBuilder<any, TNull>;
[ ]: DateDayBuilder<TNull>;
[ ]: DateMillisecondBuilder<TNull>;
[ ]: TimestampBuilder<any, TNull>;
[ ]: TimestampSecondBuilder<TNull>;
[ ]: TimestampMillisecondBuilder<TNull>;
[ ]: TimestampMicrosecondBuilder<TNull>;
[ ]: TimestampNanosecondBuilder<TNull>;
[ ]: TimeBuilder<any, TNull>;
[ ]: TimeSecondBuilder<TNull>;
[ ]: TimeMillisecondBuilder<TNull>;
[ ]: TimeMicrosecondBuilder<TNull>;
[ ]: TimeNanosecondBuilder<TNull>;
[ ]: DecimalBuilder<TNull>;
[ ]: UnionBuilder<any, TNull>;
[ ]: DenseUnionBuilder<any, TNull>;
[ ]: SparseUnionBuilder<any, TNull>;
[ ]: IntervalBuilder<any, TNull>;
[ ]: IntervalDayTimeBuilder<TNull>;
[ ]: IntervalYearMonthBuilder<TNull>;
[ ]: DurationBuilder<any, TNull>;
[ ]: DurationBuilder<any, TNull>;
[ ]: DurationMillisecondBuilder<TNull>;
[ ]: DurationMicrosecondBuilder<TNull>;
[ ]: DurationNanosecondBuilder<TNull>;
[ ]: MapBuilder<any, any, TNull>;
[ ]: ListBuilder<any, TNull>;
[ ]: StructBuilder<any, TNull>;
[ ]: DictionaryBuilder<any, TNull>;
[ ]: FixedSizeListBuilder<any, TNull>;
}[T];
/** @ignore */
type DataTypeToBuilder<T extends DataType = any, TNull = any> = {
[ ]: Builder<any, TNull>;
[ ]: T extends type.Null ? NullBuilder<TNull> : never;
[ ]: T extends type.Bool ? BoolBuilder<TNull> : never;
[ ]: T extends type.Int8 ? Int8Builder<TNull> : never;
[ ]: T extends type.Int16 ? Int16Builder<TNull> : never;
[ ]: T extends type.Int32 ? Int32Builder<TNull> : never;
[ ]: T extends type.Int64 ? Int64Builder<TNull> : never;
[ ]: T extends type.Uint8 ? Uint8Builder<TNull> : never;
[ ]: T extends type.Uint16 ? Uint16Builder<TNull> : never;
[ ]: T extends type.Uint32 ? Uint32Builder<TNull> : never;
[ ]: T extends type.Uint64 ? Uint64Builder<TNull> : never;
[ ]: T extends type.Int ? IntBuilder<T, TNull> : never;
[ ]: T extends type.Float16 ? Float16Builder<TNull> : never;
[ ]: T extends type.Float32 ? Float32Builder<TNull> : never;
[ ]: T extends type.Float64 ? Float64Builder<TNull> : never;
[ ]: T extends type.Float ? FloatBuilder<T, TNull> : never;
[ ]: T extends type.Utf8 ? Utf8Builder<TNull> : never;
[ ]: T extends type.LargeUtf8 ? LargeUtf8Builder<TNull> : never;
[ ]: T extends type.Binary ? BinaryBuilder<TNull> : never;
[ ]: T extends type.LargeBinary ? LargeBinaryBuilder<TNull> : never;
[ ]: T extends type.FixedSizeBinary ? FixedSizeBinaryBuilder<TNull> : never;
[ ]: T extends type.Date_ ? DateBuilder<T, TNull> : never;
[ ]: T extends type.DateDay ? DateDayBuilder<TNull> : never;
[ ]: T extends type.DateMillisecond ? DateMillisecondBuilder<TNull> : never;
[ ]: T extends type.Timestamp ? TimestampBuilder<T, TNull> : never;
[ ]: T extends type.TimestampSecond ? TimestampSecondBuilder<TNull> : never;
[ ]: T extends type.TimestampMillisecond ? TimestampMillisecondBuilder<TNull> : never;
[ ]: T extends type.TimestampMicrosecond ? TimestampMicrosecondBuilder<TNull> : never;
[ ]: T extends type.TimestampNanosecond ? TimestampNanosecondBuilder<TNull> : never;
[ ]: T extends type.Time ? TimeBuilder<T, TNull> : never;
[ ]: T extends type.TimeSecond ? TimeSecondBuilder<TNull> : never;
[ ]: T extends type.TimeMillisecond ? TimeMillisecondBuilder<TNull> : never;
[ ]: T extends type.TimeMicrosecond ? TimeMicrosecondBuilder<TNull> : never;
[ ]: T extends type.TimeNanosecond ? TimeNanosecondBuilder<TNull> : never;
[ ]: T extends type.Decimal ? DecimalBuilder<TNull> : never;
[ ]: T extends type.Union ? UnionBuilder<T, TNull> : never;
[ ]: T extends type.DenseUnion ? DenseUnionBuilder<T, TNull> : never;
[ ]: T extends type.SparseUnion ? SparseUnionBuilder<T, TNull> : never;
[ ]: T extends type.Interval ? IntervalBuilder<T, TNull> : never;
[ ]: T extends type.IntervalDayTime ? IntervalDayTimeBuilder<TNull> : never;
[ ]: T extends type.IntervalYearMonth ? IntervalYearMonthBuilder<TNull> : never;
[ ]: T extends type.Duration ? DurationBuilder<T, TNull> : never;
[ ]: T extends type.DurationSecond ? DurationSecondBuilder<TNull> : never;
[ ]: T extends type.DurationMillisecond ? DurationMillisecondBuilder<TNull> : never;
[ ]: T extends type.DurationMicrosecond ? DurationMicrosecondBuilder<TNull> : never;
[ ]: T extends type.DurationNanosecond ? DurationNanosecondBuilder<TNull> : never;
[ ]: T extends type.Map_ ? MapBuilder<T['keyType'], T['valueType'], TNull> : never;
[ ]: T extends type.List ? ListBuilder<T['valueType'], TNull> : never;
[ ]: T extends type.Struct ? StructBuilder<T['dataTypes'], TNull> : never;
[ ]: T extends type.Dictionary ? DictionaryBuilder<T, TNull> : never;
[ ]: T extends type.FixedSizeList ? FixedSizeListBuilder<T['valueType'], TNull> : never;
}[T['TType']];