import * as errors from 'balena-errors'; import type { Expand, Filter, ODataOptionsWithoutCount, Resource, ResourceExpand } from 'pinejs-client-core'; import type { StringKeyof } from '../../typings/utils'; export interface BalenaUtils { mergePineOptions: typeof mergePineOptions; } export declare const notImplemented: () => never; export declare const onlyIf: (condition: boolean) => any>(fn: T) => (() => never) | T; export declare const isId: (v?: unknown) => v is number; export declare const isFullUuid: (v?: unknown) => v is string & { length: 32 | 62; }; export declare const withSupervisorLockedError: (fn: () => Promise) => Promise; export declare const isUnauthorizedResponse: (err: Error) => err is errors.BalenaRequestError; export declare const isNotFoundResponse: (err: Error) => err is errors.BalenaRequestError; export type AsArray = T extends string ? [T] : T extends readonly string[] ? T : []; export type Concat = [...A, ...B]; export type OverrideProp = K extends keyof E ? E[K] : K extends keyof D ? D[K] : undefined; export type ExtraKeys = '$select' | '$orderby' | '$skip' | '$top' | '$filter' | '$expand'; export type MergeSelect>, TExtra extends Readonly>> = TExtra extends { $select: infer ESelect; } ? ESelect extends StringKeyof | ReadonlyArray> ? TDefault extends { $select: infer DSelect; } ? DSelect extends StringKeyof | ReadonlyArray> ? Concat, AsArray> : AsArray : AsArray : never : TDefault extends { $select: infer DSelect; } ? DSelect extends StringKeyof | ReadonlyArray> ? AsArray : undefined : undefined; export type MergeFilter>, TExtra extends Readonly>> = TExtra extends { $filter: infer EFilter; } ? EFilter extends Filter ? TDefault extends { $filter: infer DFilter; } ? DFilter extends Filter ? { $and: [DFilter, EFilter]; } : EFilter : EFilter : never : TDefault extends { $filter: infer DFilter; } ? DFilter extends Filter ? DFilter : undefined : undefined; export type ToResourceExpand> = E extends ResourceExpand ? E : E extends Array> | ReadonlyArray> ? { [K in E[number]]: {}; } : E extends Array> ? E[number] : never; export type EnsureODataOptionsWithoutCount = T extends Readonly> ? T : never; export type ExtractNavigationResource = R[K] extends Array ? U extends Resource['Read'] ? U : never : never; export type SafeMergePineOptions = MergePineOptions, EnsureODataOptionsWithoutCount>; export type MergeExpandedOptions, _EExpand extends Expand, DExpand extends ToResourceExpand = ToResourceExpand, EExpand extends ToResourceExpand = ToResourceExpand, AllKeys extends StringKeyof | StringKeyof = StringKeyof | StringKeyof> = { [K in AllKeys]: K extends StringKeyof ? K extends StringKeyof ? SafeMergePineOptions, DExpand[K], EExpand[K]> : DExpand[K] : K extends StringKeyof ? EExpand[K] : undefined; }; export type MergeExpand>, TExtra extends Readonly>> = TExtra extends { $expand: infer EExpand; } ? EExpand extends Expand ? TDefault extends { $expand: infer DExpand; } ? DExpand extends Expand ? MergeExpandedOptions : EExpand : EExpand : never : TDefault extends { $expand: infer DExpand; } ? DExpand extends Expand ? DExpand : undefined : undefined; export type AliasResourceRead = { [key: string]: any; }; export type MergePineOptions>, TExtra extends Readonly>> = { [K in Extract]: K extends '$select' ? MergeSelect : K extends '$top' | '$skip' | '$orderby' ? OverrideProp : K extends '$filter' ? MergeFilter : K extends '$expand' ? MergeExpand : never; }; export declare function mergePineOptions>, TExtra extends Readonly>>(defaults: TDefault, extras?: TExtra): MergePineOptions; /** * Useful when you want to avoid having to manually parse the key * or when need order guarantees while iterating the keys. * @private */ export declare const groupByMap: (entries: V[], iteratee: (item: V) => K) => Map; export declare function delay(ms: number): Promise; export declare const limitedMap: (arr: T[], fn: (currentValue: T, index: number, array: T[]) => Promise, { concurrency, }?: { concurrency?: number; }) => Promise; export declare const once: any>(fn: T) => T; export declare const chunk: (arr: T[], size: number) => T[][];