@@ -67475,6 +67475,295 @@ export class Api<
67475
67475
"
67476
67476
`;
67477
67477
67478
+ exports[`extended > 'issue-1057' 1`] = `
67479
+ "/* eslint-disable */
67480
+ /* tslint:disable */
67481
+ // @ts-nocheck
67482
+ /*
67483
+ * ---------------------------------------------------------------
67484
+ * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
67485
+ * ## ##
67486
+ * ## AUTHOR: acacode ##
67487
+ * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
67488
+ * ---------------------------------------------------------------
67489
+ */
67490
+
67491
+ export interface MySchema {
67492
+ not_working?: MySchemaNotWorkingEnum;
67493
+ working?: MySchemaWorkingEnum;
67494
+ }
67495
+
67496
+ export enum MySchemaNotWorkingEnum {
67497
+ PhoneNumber = "phone_number",
67498
+ }
67499
+
67500
+ export enum MySchemaWorkingEnum {
67501
+ EmailAddress = "email_address",
67502
+ }
67503
+
67504
+ export type QueryParamsType = Record<string | number, any>;
67505
+ export type ResponseFormat = keyof Omit<Body, "body" | "bodyUsed">;
67506
+
67507
+ export interface FullRequestParams extends Omit<RequestInit, "body"> {
67508
+ /** set parameter to \`true\` for call \`securityWorker\` for this request */
67509
+ secure?: boolean;
67510
+ /** request path */
67511
+ path: string;
67512
+ /** content type of request body */
67513
+ type?: ContentType;
67514
+ /** query params */
67515
+ query?: QueryParamsType;
67516
+ /** format of response (i.e. response.json() -> format: "json") */
67517
+ format?: ResponseFormat;
67518
+ /** request body */
67519
+ body?: unknown;
67520
+ /** base url */
67521
+ baseUrl?: string;
67522
+ /** request cancellation token */
67523
+ cancelToken?: CancelToken;
67524
+ }
67525
+
67526
+ export type RequestParams = Omit<
67527
+ FullRequestParams,
67528
+ "body" | "method" | "query" | "path"
67529
+ >;
67530
+
67531
+ export interface ApiConfig<SecurityDataType = unknown> {
67532
+ baseUrl?: string;
67533
+ baseApiParams?: Omit<RequestParams, "baseUrl" | "cancelToken" | "signal">;
67534
+ securityWorker?: (
67535
+ securityData: SecurityDataType | null,
67536
+ ) => Promise<RequestParams | void> | RequestParams | void;
67537
+ customFetch?: typeof fetch;
67538
+ }
67539
+
67540
+ export interface HttpResponse<D extends unknown, E extends unknown = unknown>
67541
+ extends Response {
67542
+ data: D;
67543
+ error: E;
67544
+ }
67545
+
67546
+ type CancelToken = Symbol | string | number;
67547
+
67548
+ export enum ContentType {
67549
+ Json = "application/json",
67550
+ JsonApi = "application/vnd.api+json",
67551
+ FormData = "multipart/form-data",
67552
+ UrlEncoded = "application/x-www-form-urlencoded",
67553
+ Text = "text/plain",
67554
+ }
67555
+
67556
+ export class HttpClient<SecurityDataType = unknown> {
67557
+ public baseUrl: string = "";
67558
+ private securityData: SecurityDataType | null = null;
67559
+ private securityWorker?: ApiConfig<SecurityDataType>["securityWorker"];
67560
+ private abortControllers = new Map<CancelToken, AbortController>();
67561
+ private customFetch = (...fetchParams: Parameters<typeof fetch>) =>
67562
+ fetch(...fetchParams);
67563
+
67564
+ private baseApiParams: RequestParams = {
67565
+ credentials: "same-origin",
67566
+ headers: {},
67567
+ redirect: "follow",
67568
+ referrerPolicy: "no-referrer",
67569
+ };
67570
+
67571
+ constructor(apiConfig: ApiConfig<SecurityDataType> = {}) {
67572
+ Object.assign(this, apiConfig);
67573
+ }
67574
+
67575
+ public setSecurityData = (data: SecurityDataType | null) => {
67576
+ this.securityData = data;
67577
+ };
67578
+
67579
+ protected encodeQueryParam(key: string, value: any) {
67580
+ const encodedKey = encodeURIComponent(key);
67581
+ return \`\${encodedKey}=\${encodeURIComponent(typeof value === "number" ? value : \`\${value}\`)}\`;
67582
+ }
67583
+
67584
+ protected addQueryParam(query: QueryParamsType, key: string) {
67585
+ return this.encodeQueryParam(key, query[key]);
67586
+ }
67587
+
67588
+ protected addArrayQueryParam(query: QueryParamsType, key: string) {
67589
+ const value = query[key];
67590
+ return value.map((v: any) => this.encodeQueryParam(key, v)).join("&");
67591
+ }
67592
+
67593
+ protected toQueryString(rawQuery?: QueryParamsType): string {
67594
+ const query = rawQuery || {};
67595
+ const keys = Object.keys(query).filter(
67596
+ (key) => "undefined" !== typeof query[key],
67597
+ );
67598
+ return keys
67599
+ .map((key) =>
67600
+ Array.isArray(query[key])
67601
+ ? this.addArrayQueryParam(query, key)
67602
+ : this.addQueryParam(query, key),
67603
+ )
67604
+ .join("&");
67605
+ }
67606
+
67607
+ protected addQueryParams(rawQuery?: QueryParamsType): string {
67608
+ const queryString = this.toQueryString(rawQuery);
67609
+ return queryString ? \`?\${queryString}\` : "";
67610
+ }
67611
+
67612
+ private contentFormatters: Record<ContentType, (input: any) => any> = {
67613
+ [ContentType.Json]: (input: any) =>
67614
+ input !== null && (typeof input === "object" || typeof input === "string")
67615
+ ? JSON.stringify(input)
67616
+ : input,
67617
+ [ContentType.JsonApi]: (input: any) =>
67618
+ input !== null && (typeof input === "object" || typeof input === "string")
67619
+ ? JSON.stringify(input)
67620
+ : input,
67621
+ [ContentType.Text]: (input: any) =>
67622
+ input !== null && typeof input !== "string"
67623
+ ? JSON.stringify(input)
67624
+ : input,
67625
+ [ContentType.FormData]: (input: any) => {
67626
+ if (input instanceof FormData) {
67627
+ return input;
67628
+ }
67629
+
67630
+ return Object.keys(input || {}).reduce((formData, key) => {
67631
+ const property = input[key];
67632
+ formData.append(
67633
+ key,
67634
+ property instanceof Blob
67635
+ ? property
67636
+ : typeof property === "object" && property !== null
67637
+ ? JSON.stringify(property)
67638
+ : \`\${property}\`,
67639
+ );
67640
+ return formData;
67641
+ }, new FormData());
67642
+ },
67643
+ [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),
67644
+ };
67645
+
67646
+ protected mergeRequestParams(
67647
+ params1: RequestParams,
67648
+ params2?: RequestParams,
67649
+ ): RequestParams {
67650
+ return {
67651
+ ...this.baseApiParams,
67652
+ ...params1,
67653
+ ...(params2 || {}),
67654
+ headers: {
67655
+ ...(this.baseApiParams.headers || {}),
67656
+ ...(params1.headers || {}),
67657
+ ...((params2 && params2.headers) || {}),
67658
+ },
67659
+ };
67660
+ }
67661
+
67662
+ protected createAbortSignal = (
67663
+ cancelToken: CancelToken,
67664
+ ): AbortSignal | undefined => {
67665
+ if (this.abortControllers.has(cancelToken)) {
67666
+ const abortController = this.abortControllers.get(cancelToken);
67667
+ if (abortController) {
67668
+ return abortController.signal;
67669
+ }
67670
+ return void 0;
67671
+ }
67672
+
67673
+ const abortController = new AbortController();
67674
+ this.abortControllers.set(cancelToken, abortController);
67675
+ return abortController.signal;
67676
+ };
67677
+
67678
+ public abortRequest = (cancelToken: CancelToken) => {
67679
+ const abortController = this.abortControllers.get(cancelToken);
67680
+
67681
+ if (abortController) {
67682
+ abortController.abort();
67683
+ this.abortControllers.delete(cancelToken);
67684
+ }
67685
+ };
67686
+
67687
+ public request = async <T = any, E = any>({
67688
+ body,
67689
+ secure,
67690
+ path,
67691
+ type,
67692
+ query,
67693
+ format,
67694
+ baseUrl,
67695
+ cancelToken,
67696
+ ...params
67697
+ }: FullRequestParams): Promise<HttpResponse<T, E>> => {
67698
+ const secureParams =
67699
+ ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) &&
67700
+ this.securityWorker &&
67701
+ (await this.securityWorker(this.securityData))) ||
67702
+ {};
67703
+ const requestParams = this.mergeRequestParams(params, secureParams);
67704
+ const queryString = query && this.toQueryString(query);
67705
+ const payloadFormatter = this.contentFormatters[type || ContentType.Json];
67706
+ const responseFormat = format || requestParams.format;
67707
+
67708
+ return this.customFetch(
67709
+ \`\${baseUrl || this.baseUrl || ""}\${path}\${queryString ? \`?\${queryString}\` : ""}\`,
67710
+ {
67711
+ ...requestParams,
67712
+ headers: {
67713
+ ...(requestParams.headers || {}),
67714
+ ...(type && type !== ContentType.FormData
67715
+ ? { "Content-Type": type }
67716
+ : {}),
67717
+ },
67718
+ signal:
67719
+ (cancelToken
67720
+ ? this.createAbortSignal(cancelToken)
67721
+ : requestParams.signal) || null,
67722
+ body:
67723
+ typeof body === "undefined" || body === null
67724
+ ? null
67725
+ : payloadFormatter(body),
67726
+ },
67727
+ ).then(async (response) => {
67728
+ const r = response.clone() as HttpResponse<T, E>;
67729
+ r.data = null as unknown as T;
67730
+ r.error = null as unknown as E;
67731
+
67732
+ const data = !responseFormat
67733
+ ? r
67734
+ : await response[responseFormat]()
67735
+ .then((data) => {
67736
+ if (r.ok) {
67737
+ r.data = data;
67738
+ } else {
67739
+ r.error = data;
67740
+ }
67741
+ return r;
67742
+ })
67743
+ .catch((e) => {
67744
+ r.error = e;
67745
+ return r;
67746
+ });
67747
+
67748
+ if (cancelToken) {
67749
+ this.abortControllers.delete(cancelToken);
67750
+ }
67751
+
67752
+ if (!response.ok) throw data;
67753
+ return data;
67754
+ });
67755
+ };
67756
+ }
67757
+
67758
+ /**
67759
+ * @title No title
67760
+ */
67761
+ export class Api<
67762
+ SecurityDataType extends unknown,
67763
+ > extends HttpClient<SecurityDataType> {}
67764
+ "
67765
+ `;
67766
+
67478
67767
exports[`extended > 'link-example' 1`] = `
67479
67768
"/* eslint-disable */
67480
67769
/* tslint:disable */
0 commit comments