Saving progress

This commit is contained in:
Justin Dalrymple 2025-11-16 14:50:41 -05:00
parent d8b7d1a072
commit e4bb95cdb3
3 changed files with 53 additions and 22 deletions

View File

@ -27,6 +27,11 @@ export interface AsAdmin<A extends boolean = false> {
}
export type BaseRequestOptions<E extends boolean = false> = Sudo &
ShowExpanded<E> & {
[key: string]: RequesterBodyType
};
export type RequesterBaseRequestOptions<E extends boolean = false> = Sudo &
ShowExpanded<E> & {
body?: RequesterBodyType;
searchParams?: Record<string, string>;
@ -34,7 +39,7 @@ export type BaseRequestOptions<E extends boolean = false> = Sudo &
export type PaginationTypes = 'keyset' | 'offset';
export interface KeysetPaginationRequestSearchParams {
export interface KeysetPaginationRequestParams {
pagination: 'keyset';
perPage?: number | string;
orderBy: string;
@ -44,7 +49,7 @@ export interface KeysetPaginationRequestSearchParams {
cursor?: string;
}
export interface OffsetPaginationRequestSearchParams {
export interface OffsetPaginationRequestParams {
page?: number | string;
perPage?: number | string;
}
@ -54,10 +59,15 @@ export interface BasePaginationRequestOptions {
}
export type PaginationRequestSearchParams<P extends PaginationTypes | void> = P extends 'keyset'
? KeysetPaginationRequestSearchParams
: OffsetPaginationRequestSearchParams;
? KeysetPaginationRequestParams
: P extends 'offset'
? OffsetPaginationRequestParams
: OffsetPaginationRequestParams;
export type PaginationRequestOptions<P extends PaginationTypes | void = void> =
BasePaginationRequestOptions & PaginationRequestSearchParams<P>;
export type RequesterPaginationRequestOptions<P extends PaginationTypes | void = void> =
BasePaginationRequestOptions & {
searchParams?: PaginationRequestSearchParams<P>;
};
@ -65,7 +75,7 @@ export type PaginationRequestOptions<P extends PaginationTypes | void = void> =
// Response Formats
export type CamelizedResponse<T, C> = C extends true ? Camelize<T> : T;
export interface OffsetPagination {
export interface OffsetPaginationResponseParams {
total: number;
next: number | null;
current: number;
@ -74,8 +84,9 @@ export interface OffsetPagination {
totalPages: number;
}
export interface KeysetPagination {
idAfter: number;
export interface KeysetPaginationResponseParams {
idAfter?: number;
cursor?: string;
perPage: number;
orderBy: string;
sort: 'asc' | 'desc';
@ -89,7 +100,7 @@ export interface ExpandedResponse<T> {
export type PaginatedResponse<T, P extends PaginationTypes = PaginationTypes> = {
[U in P]: {
paginationInfo: P extends 'keyset' ? KeysetPagination : OffsetPagination;
paginationInfo: P extends 'keyset' ? KeysetPaginationResponseParams : OffsetPaginationResponseParams;
data: T;
};
}[P];
@ -183,7 +194,7 @@ async function getManyMore<
getFn: (ep: string, op: DefaultRequesterOptions) => Promise<FormattedResponse<T>>,
endpoint: string,
response: FormattedResponse<T>,
requestOptions: PaginationRequestOptions<P> & BaseRequestOptions<E>,
requestOptions: RequesterPaginationRequestOptions<P> & RequesterBaseRequestOptions<E>,
acc?: T,
): Promise<PaginatedResponse<T, P> | T> {
const { sudo, showExpanded, maxPages, searchParams } = requestOptions;
@ -296,7 +307,7 @@ export function get<
return async <C extends boolean, E extends boolean, P extends 'keyset' | 'offset' | void>(
service: BaseResource<C>,
endpoint: string,
options?: PaginationRequestOptions<P> & BaseRequestOptions<E> & AsStream,
options?: RequesterPaginationRequestOptions<P> & RequesterBaseRequestOptions<E> & AsStream,
): Promise<any> => {
const { asStream, sudo, showExpanded, searchParams } = options || {};
const signal = service.queryTimeout ? AbortSignal.timeout(service.queryTimeout) : undefined;
@ -334,7 +345,7 @@ export function post<T extends ResponseBodyTypes>() {
return async <C extends boolean = false, E extends boolean = false>(
service: BaseResource<C>,
endpoint: string,
options?: BaseRequestOptions<E>,
options?: RequesterBaseRequestOptions<E>,
): Promise<GitlabAPIResponse<T, C, E, void>> => {
const { body, searchParams, sudo, showExpanded } = options || {};
@ -356,7 +367,7 @@ export function put<T extends ResponseBodyTypes>() {
return async <C extends boolean = false, E extends boolean = false>(
service: BaseResource<C>,
endpoint: string,
options?: BaseRequestOptions<E>,
options?: RequesterBaseRequestOptions<E>,
): Promise<GitlabAPIResponse<T, C, E, void>> => {
const { body, searchParams, sudo, showExpanded } = options || {};
@ -378,7 +389,7 @@ export function patch<T extends ResponseBodyTypes>() {
return async <C extends boolean = false, E extends boolean = false>(
service: BaseResource<C>,
endpoint: string,
options?: BaseRequestOptions<E>,
options?: RequesterBaseRequestOptions<E>,
): Promise<GitlabAPIResponse<T, C, E, void>> => {
const { body, searchParams, sudo, showExpanded } = options || {};
@ -400,7 +411,7 @@ export function del<T extends ResponseBodyTypes = void>() {
return async <C extends boolean = false, E extends boolean = false>(
service: BaseResource<C>,
endpoint: string,
options?: BaseRequestOptions<E>,
options?: RequesterBaseRequestOptions<E>,
): Promise<GitlabAPIResponse<T, C, E, void>> => {
const { body, searchParams, sudo, showExpanded } = options || {};

View File

@ -1,5 +1,5 @@
import { BaseResource } from '@gitbeaker/requester-utils';
import { RequestHelper, endpoint } from '../infrastructure';
import { RequestHelper, createFormData, endpoint } from '../infrastructure';
import type {
GitlabAPIResponse,
PaginationRequestOptions,
@ -23,10 +23,18 @@ export class AlertManagement<C extends boolean = false> extends BaseResource<C>
alertIId: number,
options?: PaginationRequestOptions<P> & Sudo & ShowExpanded<E>,
): Promise<GitlabAPIResponse<MetricImageSchema[], C, E, P>> {
const { sudo, showExpanded, maxPages, ...qp } = options || {};
const requestOptions = options ? {
sudo: sudo,
showExpanded: showExpanded,
maxPages: maxPages,
searchParams: qp,
} : undefined;
return RequestHelper.get<MetricImageSchema[]>()(
this,
endpoint`projects/${projectId}/alert_management_alerts/${alertIId}/metric_images`,
options,
requestOptions,
);
}
@ -39,7 +47,14 @@ export class AlertManagement<C extends boolean = false> extends BaseResource<C>
return RequestHelper.put<MetricImageSchema>()(
this,
endpoint`projects/${projectId}/alert_management_alerts/${alertIId}/metric_images/${imageId}`,
options,
{
sudo: options?.sudo,
showExpanded: options?.showExpanded,
body: {
url: options?.url,
urlText: options?.urlText,
},
},
);
}
@ -66,9 +81,12 @@ export class AlertManagement<C extends boolean = false> extends BaseResource<C>
this,
endpoint`projects/${projectId}/alert_management_alerts/${alertIId}/metric_images`,
{
isForm: true,
file: [metricImage.content, metricImage.filename],
...options,
body: createFormData({
file: [metricImage.content, metricImage.filename],
url: options?.url,
urlText: options?.urlText,
}),
},
);
}

View File

@ -37,7 +37,10 @@ describe('Agents.editMetricImage', () => {
service,
'projects/1/alert_management_alerts/2/metric_images/3',
{
url: 'url',
body: {
url: 'url',
urlText: undefined,
},
},
);
});
@ -66,8 +69,7 @@ describe('Agents.uploadMetricImage', () => {
service,
'projects/1/alert_management_alerts/2/metric_images',
{
isForm: true,
file: [image.content, image.filename],
body: expect.any(FormData),
urlText: 'text',
},
);