@mittwald/api-client-commons 4.1.2-alpha.4 → 4.1.3-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/index.d.mts +45 -0
  2. package/dist/index.d.ts +45 -0
  3. package/dist/index.mjs +22 -0
  4. package/dist/react/index.d.mts +19 -0
  5. package/dist/react/index.d.ts +19 -0
  6. package/dist/react/index.mjs +49 -0
  7. package/dist/shared/api-client-commons.2a6e3962.mjs +128 -0
  8. package/dist/shared/api-client-commons.5e434015.d.mts +71 -0
  9. package/dist/shared/api-client-commons.5e434015.d.ts +71 -0
  10. package/package.json +51 -57
  11. package/dist/cjs/axios.d.ts +0 -1
  12. package/dist/cjs/axios.js +0 -17
  13. package/dist/cjs/core/ApiClientBase.d.ts +0 -9
  14. package/dist/cjs/core/ApiClientBase.js +0 -42
  15. package/dist/cjs/core/ApiClientError.d.ts +0 -7
  16. package/dist/cjs/core/ApiClientError.js +0 -16
  17. package/dist/cjs/core/OpenAPIPath.d.ts +0 -9
  18. package/dist/cjs/core/OpenAPIPath.js +0 -22
  19. package/dist/cjs/core/Request.d.ts +0 -13
  20. package/dist/cjs/core/Request.js +0 -80
  21. package/dist/cjs/core/Request.test.d.ts +0 -1
  22. package/dist/cjs/core/Request.test.js +0 -58
  23. package/dist/cjs/core/index.d.ts +0 -4
  24. package/dist/cjs/core/index.js +0 -20
  25. package/dist/cjs/index.d.ts +0 -3
  26. package/dist/cjs/index.js +0 -19
  27. package/dist/cjs/react/ApiCallAsyncResourceFactory.d.ts +0 -12
  28. package/dist/cjs/react/ApiCallAsyncResourceFactory.js +0 -52
  29. package/dist/cjs/react/ApiCallAsyncResourceFactory.test-types.d.ts +0 -1
  30. package/dist/cjs/react/ApiCallAsyncResourceFactory.test-types.js +0 -38
  31. package/dist/cjs/react/ApiCallAsyncResourceFactory.test.d.ts +0 -1
  32. package/dist/cjs/react/ApiCallAsyncResourceFactory.test.js +0 -57
  33. package/dist/cjs/react/index.d.ts +0 -1
  34. package/dist/cjs/react/index.js +0 -17
  35. package/dist/cjs/react/types.d.ts +0 -3
  36. package/dist/cjs/react/types.js +0 -2
  37. package/dist/cjs/types/NullableOnNoRequiredKeysDeep.d.ts +0 -6
  38. package/dist/cjs/types/NullableOnNoRequiredKeysDeep.js +0 -2
  39. package/dist/cjs/types/OpenAPIOperation.d.ts +0 -16
  40. package/dist/cjs/types/OpenAPIOperation.js +0 -2
  41. package/dist/cjs/types/RequestFunction.d.ts +0 -11
  42. package/dist/cjs/types/RequestFunction.js +0 -2
  43. package/dist/cjs/types/RequestFunction.test-types.d.ts +0 -1
  44. package/dist/cjs/types/RequestFunction.test-types.js +0 -30
  45. package/dist/cjs/types/RequestType.d.ts +0 -21
  46. package/dist/cjs/types/RequestType.js +0 -2
  47. package/dist/cjs/types/RequestType.test-types.d.ts +0 -1
  48. package/dist/cjs/types/RequestType.test-types.js +0 -148
  49. package/dist/cjs/types/Response.d.ts +0 -7
  50. package/dist/cjs/types/Response.js +0 -2
  51. package/dist/cjs/types/Response.test-types.d.ts +0 -1
  52. package/dist/cjs/types/Response.test-types.js +0 -43
  53. package/dist/cjs/types/assertStatus.d.ts +0 -5
  54. package/dist/cjs/types/assertStatus.js +0 -14
  55. package/dist/cjs/types/assertStatus.test-types.d.ts +0 -1
  56. package/dist/cjs/types/assertStatus.test-types.js +0 -13
  57. package/dist/cjs/types/http.d.ts +0 -13
  58. package/dist/cjs/types/http.js +0 -2
  59. package/dist/cjs/types/index.d.ts +0 -8
  60. package/dist/cjs/types/index.js +0 -24
  61. package/dist/cjs/types/simplify.d.ts +0 -3
  62. package/dist/cjs/types/simplify.js +0 -2
  63. package/dist/esm/axios.d.ts +0 -1
  64. package/dist/esm/axios.js +0 -1
  65. package/dist/esm/core/ApiClientBase.d.ts +0 -9
  66. package/dist/esm/core/ApiClientBase.js +0 -13
  67. package/dist/esm/core/ApiClientError.d.ts +0 -7
  68. package/dist/esm/core/ApiClientError.js +0 -12
  69. package/dist/esm/core/OpenAPIPath.d.ts +0 -9
  70. package/dist/esm/core/OpenAPIPath.js +0 -20
  71. package/dist/esm/core/Request.d.ts +0 -13
  72. package/dist/esm/core/Request.js +0 -76
  73. package/dist/esm/core/Request.test.d.ts +0 -1
  74. package/dist/esm/core/Request.test.js +0 -53
  75. package/dist/esm/core/index.d.ts +0 -4
  76. package/dist/esm/core/index.js +0 -4
  77. package/dist/esm/index.d.ts +0 -3
  78. package/dist/esm/index.js +0 -3
  79. package/dist/esm/react/ApiCallAsyncResourceFactory.d.ts +0 -12
  80. package/dist/esm/react/ApiCallAsyncResourceFactory.js +0 -35
  81. package/dist/esm/react/ApiCallAsyncResourceFactory.test-types.d.ts +0 -1
  82. package/dist/esm/react/ApiCallAsyncResourceFactory.test-types.js +0 -36
  83. package/dist/esm/react/ApiCallAsyncResourceFactory.test.d.ts +0 -1
  84. package/dist/esm/react/ApiCallAsyncResourceFactory.test.js +0 -46
  85. package/dist/esm/react/index.d.ts +0 -1
  86. package/dist/esm/react/index.js +0 -1
  87. package/dist/esm/react/types.d.ts +0 -3
  88. package/dist/esm/react/types.js +0 -1
  89. package/dist/esm/types/NullableOnNoRequiredKeysDeep.d.ts +0 -6
  90. package/dist/esm/types/NullableOnNoRequiredKeysDeep.js +0 -1
  91. package/dist/esm/types/OpenAPIOperation.d.ts +0 -16
  92. package/dist/esm/types/OpenAPIOperation.js +0 -1
  93. package/dist/esm/types/RequestFunction.d.ts +0 -11
  94. package/dist/esm/types/RequestFunction.js +0 -1
  95. package/dist/esm/types/RequestFunction.test-types.d.ts +0 -1
  96. package/dist/esm/types/RequestFunction.test-types.js +0 -29
  97. package/dist/esm/types/RequestType.d.ts +0 -21
  98. package/dist/esm/types/RequestType.js +0 -1
  99. package/dist/esm/types/RequestType.test-types.d.ts +0 -1
  100. package/dist/esm/types/RequestType.test-types.js +0 -146
  101. package/dist/esm/types/Response.d.ts +0 -7
  102. package/dist/esm/types/Response.js +0 -1
  103. package/dist/esm/types/Response.test-types.d.ts +0 -1
  104. package/dist/esm/types/Response.test-types.js +0 -70
  105. package/dist/esm/types/assertStatus.d.ts +0 -5
  106. package/dist/esm/types/assertStatus.js +0 -7
  107. package/dist/esm/types/assertStatus.test-types.d.ts +0 -1
  108. package/dist/esm/types/assertStatus.test-types.js +0 -8
  109. package/dist/esm/types/http.d.ts +0 -13
  110. package/dist/esm/types/http.js +0 -1
  111. package/dist/esm/types/index.d.ts +0 -8
  112. package/dist/esm/types/index.js +0 -8
  113. package/dist/esm/types/simplify.d.ts +0 -3
  114. package/dist/esm/types/simplify.js +0 -1
@@ -1,148 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tsd_1 = require("tsd");
4
- function ignoredTestEmptyRequestTypes() {
5
- (0, tsd_1.expectAssignable)({});
6
- // @ts-expect-error Not assignable
7
- (0, tsd_1.expectAssignable)({ extra: true });
8
- // @ts-expect-error Not assignable
9
- (0, tsd_1.expectAssignable)({ data: {} });
10
- // @ts-expect-error Not assignable
11
- (0, tsd_1.expectAssignable)({ data: null });
12
- // @ts-expect-error Not assignable
13
- (0, tsd_1.expectAssignable)({ pathParameters: {} });
14
- }
15
- function ignoredTestRequestTypesWithDataType() {
16
- (0, tsd_1.expectAssignable)({ data: { foo: "" } });
17
- // @ts-expect-error Not assignable
18
- (0, tsd_1.expectAssignable)({});
19
- (0, tsd_1.expectAssignable)({
20
- // @ts-expect-error Not assignable
21
- data: { foo: "", extra: "" },
22
- });
23
- // @ts-expect-error Not assignable
24
- (0, tsd_1.expectAssignable)({ data: { noFoo: "" } });
25
- }
26
- function ignoredTestRequestTypesWithPathParameters() {
27
- (0, tsd_1.expectAssignable)({
28
- data: { foo: "" },
29
- pathParameters: { bar: "" },
30
- });
31
- (0, tsd_1.expectAssignable)({
32
- pathParameters: { bar: "" },
33
- });
34
- // @ts-expect-error Not assignable
35
- (0, tsd_1.expectAssignable)({});
36
- (0, tsd_1.expectAssignable)({
37
- // @ts-expect-error Not assignable
38
- pathParameters: {},
39
- });
40
- (0, tsd_1.expectAssignable)({
41
- // @ts-expect-error Not assignable
42
- pathParameters: { foo: "", extra: "" },
43
- });
44
- }
45
- function ignoredTestRequestTypesWithHeader() {
46
- (0, tsd_1.expectAssignable)({
47
- data: {
48
- foo: "",
49
- },
50
- pathParameters: { bar: "" },
51
- headers: { baz: "" },
52
- });
53
- (0, tsd_1.expectAssignable)({
54
- pathParameters: { bar: "" },
55
- headers: { baz: "" },
56
- });
57
- (0, tsd_1.expectAssignable)({
58
- headers: { baz: "" },
59
- });
60
- // @ts-expect-error Not assignable
61
- (0, tsd_1.expectAssignable)({});
62
- (0, tsd_1.expectAssignable)({
63
- headers: {
64
- // @ts-expect-error Not assignable
65
- baz: 42,
66
- },
67
- });
68
- (0, tsd_1.expectAssignable)({
69
- // @ts-expect-error Not assignable
70
- headers: {},
71
- });
72
- (0, tsd_1.expectAssignable)({
73
- // @ts-expect-error Not assignable
74
- data: {},
75
- headers: {
76
- baz: "",
77
- },
78
- });
79
- (0, tsd_1.expectAssignable)({
80
- // @ts-expect-error Not assignable
81
- pathParameters: {},
82
- headers: {
83
- baz: "",
84
- },
85
- });
86
- }
87
- function ignoredTestRequestTypesWithQuery() {
88
- (0, tsd_1.expectAssignable)({
89
- data: {
90
- foo: "",
91
- },
92
- pathParameters: { bar: "" },
93
- headers: { baz: "" },
94
- queryParameters: {
95
- whut: "",
96
- },
97
- });
98
- (0, tsd_1.expectAssignable)({
99
- pathParameters: { bar: "" },
100
- headers: { baz: "" },
101
- queryParameters: {
102
- whut: "",
103
- },
104
- });
105
- (0, tsd_1.expectAssignable)({
106
- queryParameters: {
107
- whut: "",
108
- },
109
- });
110
- // @ts-expect-error Not assignable
111
- (0, tsd_1.expectAssignable)({});
112
- (0, tsd_1.expectAssignable)({
113
- queryParameters: {
114
- // @ts-expect-error Not assignable
115
- whut: 42,
116
- },
117
- });
118
- (0, tsd_1.expectAssignable)({
119
- // @ts-expect-error Not assignable
120
- queryParameters: {},
121
- });
122
- }
123
- function ignoredTestAdditionalHeadersCanAlwaysBeSet() {
124
- (0, tsd_1.expectAssignable)({
125
- headers: { extra: true },
126
- });
127
- (0, tsd_1.expectAssignable)({
128
- headers: { extra: true },
129
- });
130
- (0, tsd_1.expectAssignable)({
131
- headers: { extra: true },
132
- });
133
- (0, tsd_1.expectAssignable)({
134
- data: {
135
- foo: "",
136
- },
137
- headers: { extra: true },
138
- });
139
- (0, tsd_1.expectAssignable)({
140
- pathParameters: {
141
- bar: "",
142
- },
143
- headers: { extra: true },
144
- });
145
- (0, tsd_1.expectAssignable)({
146
- headers: { extra: true, baz: "" },
147
- });
148
- }
@@ -1,7 +0,0 @@
1
- import { HttpMediaType, HttpPayload, HttpStatus } from "./http.js";
2
- import { AxiosResponse } from "axios";
3
- export type Response<TContent extends HttpPayload = HttpPayload, TStatus extends HttpStatus = HttpStatus, TMediaType extends HttpMediaType | null = HttpMediaType> = AxiosResponse<TContent> & {
4
- status: TStatus;
5
- mediaType: TMediaType;
6
- };
7
- export type AnyResponse = Response<any, any, any>;
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +0,0 @@
1
- export {};
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tsd_1 = require("tsd");
4
- const additionalAxiosResponseData = {
5
- statusText: "",
6
- headers: {},
7
- config: {},
8
- mediaType: "application/json",
9
- };
10
- (0, tsd_1.expectAssignable)(Object.assign({ data: { a: "" }, status: 200 }, additionalAxiosResponseData));
11
- (0, tsd_1.expectNotAssignable)(Object.assign({ data: { a: "", extra: "!" }, status: 200 }, additionalAxiosResponseData));
12
- (0, tsd_1.expectAssignable)(Object.assign({ data: {
13
- b: "",
14
- }, status: 201 }, additionalAxiosResponseData));
15
- (0, tsd_1.expectAssignable)(Object.assign({ data: null, status: 400 }, additionalAxiosResponseData));
16
- (0, tsd_1.expectNotAssignable)(Object.assign({ data: null, status: 42 }, additionalAxiosResponseData));
17
- (0, tsd_1.expectNotAssignable)(Object.assign({ data: null, status: 42, extra: "!" }, additionalAxiosResponseData));
18
- (0, tsd_1.expectNotAssignable)(Object.assign({ data: { extraContent: "" }, status: 400 }, additionalAxiosResponseData));
19
- function ignoredTestRequestTypesWithDataPathParameters() {
20
- const someResponse = {};
21
- (0, tsd_1.expectType)(someResponse.status);
22
- if (someResponse.status === 200) {
23
- // @ts-expect-error > a is not in data
24
- someResponse.data.a;
25
- // @ts-expect-error > b is not in data
26
- someResponse.data.b;
27
- if (someResponse.mediaType === "text/plain") {
28
- // @ts-expect-error > a is not in data
29
- someResponse.data.a;
30
- (0, tsd_1.expectType)(someResponse.data.text);
31
- }
32
- else {
33
- // @ts-expect-error > text is not in data
34
- someResponse.data.text;
35
- (0, tsd_1.expectType)(someResponse.data.a);
36
- }
37
- }
38
- else if (someResponse.status === 201) {
39
- (0, tsd_1.expectType)(someResponse.data.b);
40
- // @ts-expect-error > a is not in data
41
- someResponse.data.a;
42
- }
43
- }
@@ -1,5 +0,0 @@
1
- import { Response } from "./Response.js";
2
- export declare function assertStatus<T extends Response, S extends T["status"]>(response: T, expectedStatus: S): asserts response is T & {
3
- status: S;
4
- };
5
- export default assertStatus;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.assertStatus = void 0;
7
- const ApiClientError_js_1 = __importDefault(require("../core/ApiClientError.js"));
8
- function assertStatus(response, expectedStatus) {
9
- if (response.status !== expectedStatus) {
10
- throw ApiClientError_js_1.default.fromResponse(`Unexpected response status (expected ${expectedStatus}, got: ${response.status})`, response);
11
- }
12
- }
13
- exports.assertStatus = assertStatus;
14
- exports.default = assertStatus;
@@ -1 +0,0 @@
1
- export {};
@@ -1,13 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const tsd_1 = require("tsd");
7
- const assertStatus_js_1 = __importDefault(require("./assertStatus.js"));
8
- function ignoredTestAssertStatusAssertsAlsoTheCorrectResponseType() {
9
- (0, assertStatus_js_1.default)(someResponse, 200);
10
- (0, tsd_1.expectAssignable)(someResponse);
11
- // @ts-expect-error Not assignable
12
- (0, tsd_1.expectAssignable)(someResponse);
13
- }
@@ -1,13 +0,0 @@
1
- export type HttpPayload = unknown;
2
- export type HttpStatus = number | "default";
3
- export type HttpMediaType = string;
4
- type SafeHttpMethod = "GET" | "HEAD" | "OPTIONS";
5
- type UnsafeHttpMethod = "PUT" | "DELETE" | "POST" | "PATCH";
6
- export type HttpMethod = SafeHttpMethod | UnsafeHttpMethod;
7
- type HeaderValue = string | number | boolean;
8
- export type HttpHeaders = Partial<{
9
- [TKey: string]: HeaderValue | HeaderValue[];
10
- }>;
11
- export type PathParameters = Record<string, string | number>;
12
- export type QueryParameters = Record<string, unknown>;
13
- export {};
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,8 +0,0 @@
1
- export * from "./RequestType.js";
2
- export * from "./RequestFunction.js";
3
- export * from "./Response.js";
4
- export * from "./OpenAPIOperation.js";
5
- export * from "./http.js";
6
- export * from "./assertStatus.js";
7
- export * from "./simplify.js";
8
- export * from "./assertStatus.js";
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./RequestType.js"), exports);
18
- __exportStar(require("./RequestFunction.js"), exports);
19
- __exportStar(require("./Response.js"), exports);
20
- __exportStar(require("./OpenAPIOperation.js"), exports);
21
- __exportStar(require("./http.js"), exports);
22
- __exportStar(require("./assertStatus.js"), exports);
23
- __exportStar(require("./simplify.js"), exports);
24
- __exportStar(require("./assertStatus.js"), exports);
@@ -1,3 +0,0 @@
1
- export type Simplify<T> = {
2
- [KeyType in keyof T]: T[KeyType];
3
- } & {};
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +0,0 @@
1
- export * from "axios";
package/dist/esm/axios.js DELETED
@@ -1 +0,0 @@
1
- export * from "axios";
@@ -1,9 +0,0 @@
1
- import { AxiosInstance, CreateAxiosDefaults } from "axios";
2
- import { RequestFunction } from "../types/index.js";
3
- import { OpenAPIOperation } from "../types/index.js";
4
- export declare abstract class ApiClientBase {
5
- axios: AxiosInstance;
6
- constructor(axiosConfig?: AxiosInstance | CreateAxiosDefaults);
7
- protected requestFunctionFactory<TOp extends OpenAPIOperation>(operation: TOp): RequestFunction<TOp>;
8
- }
9
- export default ApiClientBase;
@@ -1,13 +0,0 @@
1
- import axios, { Axios } from "axios";
2
- import Request from "./Request.js";
3
- export class ApiClientBase {
4
- axios;
5
- constructor(axiosConfig = axios) {
6
- this.axios =
7
- axiosConfig instanceof Axios ? axiosConfig : axios.create(axiosConfig);
8
- }
9
- requestFunctionFactory(operation) {
10
- return (conf) => new Request(operation, conf).execute(this.axios);
11
- }
12
- }
13
- export default ApiClientBase;
@@ -1,7 +0,0 @@
1
- import { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from "axios";
2
- import { AnyResponse } from "../types/Response.js";
3
- export declare class ApiClientError<T = unknown, D = unknown> extends AxiosError<T, D> {
4
- constructor(message?: string, code?: string, config?: InternalAxiosRequestConfig<D>, request?: unknown, response?: AxiosResponse<T, D>);
5
- static fromResponse(message: string, response: AnyResponse): ApiClientError;
6
- }
7
- export default ApiClientError;
@@ -1,12 +0,0 @@
1
- import { AxiosError } from "axios";
2
- export class ApiClientError extends AxiosError {
3
- constructor(message, code, config, request, response) {
4
- super(message, code, config, request, response);
5
- Object.setPrototypeOf(this, ApiClientError.prototype);
6
- this.name = "ApiClientError";
7
- }
8
- static fromResponse(message, response) {
9
- return new ApiClientError(message, undefined, response.config, response.request, response);
10
- }
11
- }
12
- export default ApiClientError;
@@ -1,9 +0,0 @@
1
- import { PathParameters } from "../types/http.js";
2
- export declare class OpenAPIPath {
3
- private readonly rawPath;
4
- private readonly params?;
5
- constructor(rawPath: string, params?: PathParameters);
6
- buildUrl(): string;
7
- private static setPathParams;
8
- }
9
- export default OpenAPIPath;
@@ -1,20 +0,0 @@
1
- export class OpenAPIPath {
2
- rawPath;
3
- params;
4
- constructor(rawPath, params) {
5
- this.rawPath = rawPath;
6
- this.params = params;
7
- }
8
- buildUrl() {
9
- return OpenAPIPath.setPathParams(this.rawPath, this.params);
10
- }
11
- static setPathParams(path, params) {
12
- const asEntries = Object.entries(params ?? {});
13
- const finalPath = asEntries.reduce((path, entry) => {
14
- const [key, value] = entry;
15
- return path.replace(`{${key}}`, encodeURIComponent(value));
16
- }, path);
17
- return finalPath.startsWith("/") ? finalPath.substring(1) : finalPath;
18
- }
19
- }
20
- export default OpenAPIPath;
@@ -1,13 +0,0 @@
1
- import { OpenAPIOperation, RequestObject, ResponsePromise } from "../types/index.js";
2
- import { AxiosInstance, AxiosRequestConfig } from "axios";
3
- export declare class Request<TOp extends OpenAPIOperation> {
4
- private readonly operationDescriptor;
5
- private readonly requestObject?;
6
- readonly requestConfig: AxiosRequestConfig;
7
- constructor(operationDescriptor: TOp, requestObject?: RequestObject<TOp>);
8
- execute(axios: AxiosInstance): ResponsePromise<TOp>;
9
- private buildAxiosConfig;
10
- private makeAxiosHeaders;
11
- private convertQueryToUrlSearchParams;
12
- }
13
- export default Request;
@@ -1,76 +0,0 @@
1
- import OpenAPIPath from "./OpenAPIPath.js";
2
- export class Request {
3
- operationDescriptor;
4
- requestObject;
5
- requestConfig;
6
- constructor(operationDescriptor, requestObject) {
7
- this.operationDescriptor = operationDescriptor;
8
- this.requestObject = requestObject;
9
- this.requestConfig = Object.freeze(this.buildAxiosConfig());
10
- }
11
- execute(axios) {
12
- return axios.request(this.requestConfig);
13
- }
14
- buildAxiosConfig() {
15
- const { method, path } = this.operationDescriptor;
16
- const pathParameters = this.requestObject;
17
- const openApiPath = new OpenAPIPath(path, pathParameters);
18
- const url = openApiPath.buildUrl();
19
- const data = this.requestObject && "data" in this.requestObject
20
- ? this.requestObject.data
21
- : undefined;
22
- const headersConfig = this.requestObject && "headers" in this.requestObject
23
- ? this.requestObject.headers
24
- : undefined;
25
- const headers = headersConfig
26
- ? this.makeAxiosHeaders(headersConfig)
27
- : undefined;
28
- const queryParametersConfig = this.requestObject && "queryParameters" in this.requestObject
29
- ? this.requestObject.queryParameters
30
- : undefined;
31
- const params = this.convertQueryToUrlSearchParams(queryParametersConfig);
32
- return {
33
- url,
34
- method,
35
- headers,
36
- // Must be a plain object or an URLSearchParams object
37
- params,
38
- data,
39
- validateStatus: () => true,
40
- };
41
- }
42
- makeAxiosHeaders(headers) {
43
- return Object.fromEntries(Object.entries(headers).map(([key, value]) => [key, value?.toString()]));
44
- }
45
- convertQueryToUrlSearchParams(query) {
46
- if (query === undefined || query === null) {
47
- return undefined;
48
- }
49
- if (query instanceof URLSearchParams) {
50
- return query;
51
- }
52
- if (typeof query === "string") {
53
- return new URLSearchParams(query);
54
- }
55
- if (typeof query === "object") {
56
- const searchParams = new URLSearchParams();
57
- for (const [key, value] of Object.entries(query)) {
58
- if (Array.isArray(value)) {
59
- for (const arrayItem of value) {
60
- searchParams.append(key, arrayItem);
61
- }
62
- }
63
- else {
64
- searchParams.append(key, typeof value === "string" ||
65
- typeof value === "number" ||
66
- typeof value === "boolean"
67
- ? value.toString()
68
- : JSON.stringify(value));
69
- }
70
- }
71
- return searchParams;
72
- }
73
- throw new Error(`Unexpected query parameter type (${typeof query})`);
74
- }
75
- }
76
- export default Request;
@@ -1 +0,0 @@
1
- export {};
@@ -1,53 +0,0 @@
1
- import Request from "./Request.js";
2
- import { jest } from "@jest/globals";
3
- const requestFn = jest.fn();
4
- const mockedAxios = {
5
- request: requestFn,
6
- };
7
- beforeEach(() => {
8
- jest.resetAllMocks();
9
- });
10
- describe("query parameters", () => {
11
- const op = {
12
- path: "/",
13
- operationId: "test",
14
- method: "GET",
15
- };
16
- const executeRequest = (query) => {
17
- const request = new Request(op, { queryParameters: query });
18
- request.execute(mockedAxios);
19
- const requestConfig = requestFn.mock.calls[0][0];
20
- return requestConfig.params.toString();
21
- };
22
- test("Empty query", () => {
23
- const query = executeRequest({});
24
- expect(query).toBe("");
25
- });
26
- test("Simple parameter", () => {
27
- const query = executeRequest({
28
- foo: "bar",
29
- });
30
- expect(query).toBe("foo=bar");
31
- });
32
- test("Two parameters", () => {
33
- const query = executeRequest({
34
- foo: "bar",
35
- bam: "baz",
36
- });
37
- expect(query).toBe("foo=bar&bam=baz");
38
- });
39
- test("Array parameters", () => {
40
- const query = executeRequest({
41
- foo: ["bar", "bam"],
42
- });
43
- expect(query).toBe("foo=bar&foo=bam");
44
- });
45
- test("Number, boolean, JSON", () => {
46
- const query = executeRequest({
47
- foo: 1,
48
- bar: true,
49
- baz: { some: "value" },
50
- });
51
- expect(query).toBe("foo=1&bar=true&baz=%7B%22some%22%3A%22value%22%7D");
52
- });
53
- });
@@ -1,4 +0,0 @@
1
- export * from "./ApiClientBase.js";
2
- export * from "./ApiClientError.js";
3
- export * from "./OpenAPIPath.js";
4
- export * from "./Request.js";
@@ -1,4 +0,0 @@
1
- export * from "./ApiClientBase.js";
2
- export * from "./ApiClientError.js";
3
- export * from "./OpenAPIPath.js";
4
- export * from "./Request.js";
@@ -1,3 +0,0 @@
1
- export * from "./core/index.js";
2
- export * from "./types/index.js";
3
- export * from "./axios.js";
package/dist/esm/index.js DELETED
@@ -1,3 +0,0 @@
1
- export * from "./core/index.js";
2
- export * from "./types/index.js";
3
- export * from "./axios.js";
@@ -1,12 +0,0 @@
1
- import { OpenAPIOperation, RequestFunction } from "../types/index.js";
2
- import { GetApiResourceFn } from "./types.js";
3
- export declare class ApiCallAsyncResourceFactory<TOp extends OpenAPIOperation> {
4
- private static namespace;
5
- private readonly operation;
6
- private readonly requestFn;
7
- constructor(operation: TOp, requestFn: RequestFunction<TOp>);
8
- private getAsyncResourceId;
9
- private getAsyncResourceTags;
10
- private executeRequest;
11
- getApiResource: GetApiResourceFn<TOp>;
12
- }
@@ -1,35 +0,0 @@
1
- import { getAsyncResource } from "@mittwald/react-use-promise";
2
- import { assertStatus, } from "../types/index.js";
3
- import Request from "../core/Request.js";
4
- export class ApiCallAsyncResourceFactory {
5
- static namespace = "@mittwald/api-client";
6
- operation;
7
- requestFn;
8
- constructor(operation, requestFn) {
9
- this.operation = operation;
10
- this.requestFn = requestFn;
11
- }
12
- getAsyncResourceId() {
13
- return `${ApiCallAsyncResourceFactory.namespace}/${this.operation.operationId}`;
14
- }
15
- getAsyncResourceTags(request) {
16
- const url = request.requestConfig.url ?? "";
17
- return [
18
- this.getAsyncResourceId(),
19
- `${ApiCallAsyncResourceFactory.namespace}/${this.operation.method}`,
20
- `${ApiCallAsyncResourceFactory.namespace}/${url}`,
21
- ];
22
- }
23
- async executeRequest(requestObj) {
24
- const response = await this.requestFn(requestObj);
25
- assertStatus(response, 200);
26
- return response.data;
27
- }
28
- getApiResource = ((requestObj) => {
29
- const request = new Request(this.operation, requestObj);
30
- return getAsyncResource((requestObj) => this.executeRequest(requestObj), [requestObj], {
31
- tags: this.getAsyncResourceTags(request),
32
- loaderId: this.getAsyncResourceId(),
33
- });
34
- });
35
- }
@@ -1,36 +0,0 @@
1
- import { ApiCallAsyncResourceFactory } from "./ApiCallAsyncResourceFactory.js";
2
- const getStuff = new ApiCallAsyncResourceFactory({
3
- operationId: "getStuff",
4
- path: "/stuff",
5
- method: "GET",
6
- }, {});
7
- function ignoredCheckRequestType() {
8
- getStuff.getApiResource({
9
- data: {
10
- // @ts-expect-error Not matching request type
11
- foo: "",
12
- },
13
- });
14
- getStuff.getApiResource({
15
- data: {
16
- requestString: "",
17
- },
18
- });
19
- }
20
- function ignoredCheckResponseType() {
21
- const stuff = getStuff
22
- .getApiResource({
23
- data: {
24
- requestString: "",
25
- },
26
- })
27
- .watch();
28
- // @ts-expect-error Accessing unknown prop
29
- stuff.foo;
30
- (function (ignored) {
31
- // @ts-expect-error is a number
32
- })(stuff.responseData);
33
- (function (ignored) {
34
- // is number
35
- })(stuff.responseData);
36
- }
@@ -1 +0,0 @@
1
- export {};