@mittwald/api-client-commons 1.0.3 → 2.0.0

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.
@@ -0,0 +1,4 @@
1
+ export * from "./ApiClientBase.js";
2
+ export * from "./ApiClientError.js";
3
+ export * from "./OpenAPIPath.js";
4
+ export * from "./Request.js";
@@ -0,0 +1,4 @@
1
+ export * from "./ApiClientBase.js";
2
+ export * from "./ApiClientError.js";
3
+ export * from "./OpenAPIPath.js";
4
+ export * from "./Request.js";
@@ -0,0 +1,6 @@
1
+ export * from "./Request.js";
2
+ export * from "./RequestFunction.js";
3
+ export * from "./Response.js";
4
+ export * from "./OpenAPIOperation.js";
5
+ export * from "./http.js";
6
+ export { Simplify } from "type-fest";
@@ -0,0 +1,5 @@
1
+ export * from "./Request.js";
2
+ export * from "./RequestFunction.js";
3
+ export * from "./Response.js";
4
+ export * from "./OpenAPIOperation.js";
5
+ export * from "./http.js";
@@ -0,0 +1 @@
1
+ export * from "axios";
@@ -0,0 +1,17 @@
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("axios"), exports);
@@ -0,0 +1,9 @@
1
+ import { AxiosInstance, CreateAxiosDefaults } from "axios";
2
+ import { RequestFunction } from "../types/RequestFunction.js";
3
+ import { OpenAPIOperation } from "../types/OpenAPIOperation.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;
@@ -0,0 +1,42 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.ApiClientBase = void 0;
30
+ const axios_1 = __importStar(require("axios"));
31
+ const Request_js_1 = __importDefault(require("./Request.js"));
32
+ class ApiClientBase {
33
+ constructor(axiosConfig = axios_1.default) {
34
+ this.axios =
35
+ axiosConfig instanceof axios_1.Axios ? axiosConfig : axios_1.default.create(axiosConfig);
36
+ }
37
+ requestFunctionFactory(operation) {
38
+ return (conf) => new Request_js_1.default(this.axios, operation, conf).execute();
39
+ }
40
+ }
41
+ exports.ApiClientBase = ApiClientBase;
42
+ exports.default = ApiClientBase;
@@ -0,0 +1,7 @@
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;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiClientError = void 0;
4
+ const axios_1 = require("axios");
5
+ class ApiClientError extends axios_1.AxiosError {
6
+ constructor(message, code, config, request, response) {
7
+ super(message, code, config, request, response);
8
+ Object.setPrototypeOf(this, ApiClientError.prototype);
9
+ this.name = "ApiClientError";
10
+ }
11
+ static fromResponse(message, response) {
12
+ return new ApiClientError(message, undefined, response.config, response.request, response);
13
+ }
14
+ }
15
+ exports.ApiClientError = ApiClientError;
16
+ exports.default = ApiClientError;
@@ -0,0 +1,9 @@
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;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenAPIPath = void 0;
4
+ class OpenAPIPath {
5
+ constructor(rawPath, params) {
6
+ this.rawPath = rawPath;
7
+ this.params = params;
8
+ }
9
+ buildUrl() {
10
+ return OpenAPIPath.setPathParams(this.rawPath, this.params);
11
+ }
12
+ static setPathParams(path, params) {
13
+ const asEntries = Object.entries(params !== null && params !== void 0 ? params : {});
14
+ const finalPath = asEntries.reduce((path, entry) => {
15
+ const [key, value] = entry;
16
+ return path.replace(`{${key}}`, encodeURIComponent(value));
17
+ }, path);
18
+ return finalPath.startsWith("/") ? finalPath.substring(1) : finalPath;
19
+ }
20
+ }
21
+ exports.OpenAPIPath = OpenAPIPath;
22
+ exports.default = OpenAPIPath;
@@ -0,0 +1,12 @@
1
+ import { OpenAPIOperation } from "../types/OpenAPIOperation.js";
2
+ import { RequestConfig, ResponsePromise } from "../types/RequestFunction.js";
3
+ import { AxiosInstance } from "axios";
4
+ export declare class Request<TOp extends OpenAPIOperation> {
5
+ private readonly axios;
6
+ private readonly operationDescriptor;
7
+ private readonly config?;
8
+ constructor(axiosInstance: AxiosInstance, operationDescriptor: TOp, config?: RequestConfig<TOp>);
9
+ execute(): ResponsePromise<TOp>;
10
+ private buildAxiosConfig;
11
+ }
12
+ export default Request;
@@ -0,0 +1,37 @@
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.Request = void 0;
7
+ const OpenAPIPath_js_1 = __importDefault(require("./OpenAPIPath.js"));
8
+ class Request {
9
+ constructor(axiosInstance, operationDescriptor, config) {
10
+ this.axios = axiosInstance;
11
+ this.operationDescriptor = operationDescriptor;
12
+ this.config = config;
13
+ }
14
+ execute() {
15
+ return this.axios.request(this.buildAxiosConfig());
16
+ }
17
+ buildAxiosConfig() {
18
+ const { method, path } = this.operationDescriptor;
19
+ const pathParameters = this.config &&
20
+ "pathParameters" in this.config &&
21
+ this.config.pathParameters !== null
22
+ ? this.config.pathParameters
23
+ : undefined;
24
+ const openApiPath = new OpenAPIPath_js_1.default(path, pathParameters);
25
+ const data = this.config && "data" in this.config ? this.config.data : undefined;
26
+ const headers = this.config && "headers" in this.config ? this.config.headers : undefined;
27
+ return {
28
+ url: openApiPath.buildUrl(),
29
+ method,
30
+ headers,
31
+ data,
32
+ validateStatus: () => true,
33
+ };
34
+ }
35
+ }
36
+ exports.Request = Request;
37
+ exports.default = Request;
@@ -0,0 +1,4 @@
1
+ export * from "./ApiClientBase.js";
2
+ export * from "./ApiClientError.js";
3
+ export * from "./OpenAPIPath.js";
4
+ export * from "./Request.js";
@@ -0,0 +1,20 @@
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("./ApiClientBase.js"), exports);
18
+ __exportStar(require("./ApiClientError.js"), exports);
19
+ __exportStar(require("./OpenAPIPath.js"), exports);
20
+ __exportStar(require("./Request.js"), exports);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { HasRequiredKeys, PartialOnUndefinedDeep } from "type-fest";
2
+ type PartialOnNoRequiredKeysDeep<T> = PartialOnUndefinedDeep<{
3
+ [TKey in keyof T]: HasRequiredKeys<PartialOnNoRequiredKeysDeep<T[TKey]>> extends true ? T[TKey] : T[TKey] | undefined;
4
+ }>;
5
+ export type NullableOnNoRequiredKeysDeep<T> = HasRequiredKeys<PartialOnNoRequiredKeysDeep<T>> extends true ? PartialOnNoRequiredKeysDeep<T> : PartialOnNoRequiredKeysDeep<T> | null;
6
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,10 @@
1
+ import { AnyResponse, Response } from "./Response.js";
2
+ import { AnyRequest, Request } from "./Request.js";
3
+ import { HttpMethod } from "./http.js";
4
+ export interface OpenAPIOperation<TIgnoredRequest extends AnyRequest = Request, IgnoredResponse extends AnyResponse = Response> {
5
+ operationId: string;
6
+ path: string;
7
+ method: HttpMethod;
8
+ }
9
+ export type InferredRequestType<TOp> = TOp extends OpenAPIOperation<infer TReq> ? TReq : never;
10
+ export type InferredResponseType<TOp> = TOp extends OpenAPIOperation<Request, infer TRes> ? TRes : never;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ import { HttpHeaders, HttpPayload, PathParameters } from "./http.js";
2
+ type RequestWithData<TData> = TData extends null ? object : {
3
+ data: TData;
4
+ };
5
+ type RequestWithPathParameters<TPathParameters> = TPathParameters extends null ? object : {
6
+ pathParameters: TPathParameters;
7
+ };
8
+ type RequestWithHeaders<THeaders> = THeaders extends null ? object : {
9
+ headers: THeaders;
10
+ };
11
+ type EmptyRequest = Record<string, never>;
12
+ export type Request<TData extends HttpPayload = null, TPathParameters extends PathParameters | null = null, THeader extends HttpHeaders | null = null> = TData | TPathParameters | THeader extends null ? EmptyRequest : RequestWithData<TData> & RequestWithPathParameters<TPathParameters> & RequestWithHeaders<THeader>;
13
+ export type AnyRequest = Request<any, any, any>;
14
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ import { OpenAPIOperation, InferredRequestType, InferredResponseType } from "./OpenAPIOperation.js";
2
+ import { NullableOnNoRequiredKeysDeep } from "./NullableOnNoRequiredKeysDeep.js";
3
+ export type RequestConfig<TOp extends OpenAPIOperation> = NullableOnNoRequiredKeysDeep<InferredRequestType<TOp>>;
4
+ export type ResponsePromise<TOp extends OpenAPIOperation> = Promise<InferredResponseType<TOp>>;
5
+ type RequestFunctionWithOptionalRequest<TOp extends OpenAPIOperation> = (request?: RequestConfig<TOp>) => ResponsePromise<TOp>;
6
+ type RequestFunctionWithRequiredRequest<TOp extends OpenAPIOperation> = (request: RequestConfig<TOp>) => ResponsePromise<TOp>;
7
+ export type RequestFunction<TOp extends OpenAPIOperation> = null extends RequestConfig<TOp> ? RequestFunctionWithOptionalRequest<TOp> : RequestFunctionWithRequiredRequest<TOp>;
8
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
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>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
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 {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ export * from "./Request.js";
2
+ export * from "./RequestFunction.js";
3
+ export * from "./Response.js";
4
+ export * from "./OpenAPIOperation.js";
5
+ export * from "./http.js";
6
+ export { Simplify } from "type-fest";
@@ -0,0 +1,21 @@
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("./Request.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);
package/package.json CHANGED
@@ -1,16 +1,37 @@
1
1
  {
2
2
  "name": "@mittwald/api-client-commons",
3
+ "version": "2.0.0",
3
4
  "description": "Common types and utilities for mittwald API clients",
4
- "version": "1.0.3",
5
5
  "license": "MIT",
6
6
  "repository": "https://github.com/mittwald/api-client-js.git",
7
- "homepage": "https://developer.mittwald.de",
8
- "bugs": "https://github.com/mittwald/api-client-js/issues",
9
- "type": "module",
10
7
  "author": {
11
8
  "name": "Mittwald CM Service GmbH & Co. KG",
12
9
  "email": "opensource@mittwald.de"
13
10
  },
11
+ "homepage": "https://developer.mittwald.de",
12
+ "bugs": "https://github.com/mittwald/api-client-js/issues",
13
+ "type": "module",
14
+ "exports": {
15
+ ".": {
16
+ "import": "./dist/core/index.js",
17
+ "default": "./dist-cjs/core/index.js"
18
+ },
19
+ "./axios": {
20
+ "import": "./dist/axios.js",
21
+ "default": "./dist-cjs/axios.js"
22
+ },
23
+ "./types": {
24
+ "import": "./dist/types/index.js",
25
+ "default": "./dist-cjs/types/index.js"
26
+ }
27
+ },
28
+ "scripts": {
29
+ "test": "yarn test:tsd",
30
+ "test:tsd": "pnpify run tsd"
31
+ },
32
+ "files": [
33
+ "{dist,dist-cjs}/**/*.{js,d.ts}"
34
+ ],
14
35
  "keywords": [
15
36
  "mittwald",
16
37
  "api",
@@ -18,13 +39,6 @@
18
39
  "sdk",
19
40
  "rest"
20
41
  ],
21
- "scripts": {
22
- "test": "yarn test:tsd",
23
- "test:tsd": "pnpify run tsd"
24
- },
25
- "files": [
26
- "dist/**/*.{js,d.ts}"
27
- ],
28
42
  "dependencies": {
29
43
  "@types/parse-path": "^7.0.0",
30
44
  "axios": "^1.4.0",
@@ -1 +0,0 @@
1
- export * from "type-fest";
package/dist/type-fest.js DELETED
@@ -1 +0,0 @@
1
- export * from "type-fest";