@unshared/client 0.2.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.
- package/LICENSE.md +21 -0
- package/dist/chunks/8BFCFxqa.d.ts +1559 -0
- package/dist/chunks/B0duX_ls.d.ts +204 -0
- package/dist/chunks/BIx2AaJH.d.ts +188 -0
- package/dist/chunks/BzqHK4CV.cjs +71 -0
- package/dist/chunks/BzqHK4CV.cjs.map +1 -0
- package/dist/chunks/C3RyfPUw.cjs +103 -0
- package/dist/chunks/C3RyfPUw.cjs.map +1 -0
- package/dist/chunks/CRISqhP7.js +72 -0
- package/dist/chunks/CRISqhP7.js.map +1 -0
- package/dist/chunks/wF9C7mO0.js +104 -0
- package/dist/chunks/wF9C7mO0.js.map +1 -0
- package/dist/createClient.cjs +27 -0
- package/dist/createClient.cjs.map +1 -0
- package/dist/createClient.d.ts +37 -0
- package/dist/createClient.js +29 -0
- package/dist/createClient.js.map +1 -0
- package/dist/fetch.cjs +8 -0
- package/dist/fetch.cjs.map +1 -0
- package/dist/fetch.d.ts +12 -0
- package/dist/fetch.js +9 -0
- package/dist/fetch.js.map +1 -0
- package/dist/index.cjs +27 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +625 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/openapi.cjs +9 -0
- package/dist/openapi.cjs.map +1 -0
- package/dist/openapi.d.ts +123 -0
- package/dist/openapi.js +10 -0
- package/dist/openapi.js.map +1 -0
- package/dist/utils.cjs +13 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.ts +93 -0
- package/dist/utils.js +14 -0
- package/dist/utils.js.map +1 -0
- package/package.json +62 -0
package/dist/openapi.cjs
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
"use strict";
|
2
|
+
var index = require("./chunks/BzqHK4CV.cjs");
|
3
|
+
exports.getBaseUrl = index.getBaseUrl;
|
4
|
+
exports.getOperationById = index.getOperationById;
|
5
|
+
exports.getOperationByRoute = index.getOperationByRoute;
|
6
|
+
exports.isReferenceObject = index.isReferenceObject;
|
7
|
+
exports.resolveDocument = index.resolveDocument;
|
8
|
+
exports.resolveReference = index.resolveReference;
|
9
|
+
//# sourceMappingURL=openapi.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"openapi.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
@@ -0,0 +1,123 @@
|
|
1
|
+
import { OpenAPI, OpenAPIV2 as OpenAPIV2$1, OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';
|
2
|
+
import { O as OpenAPIV2 } from './chunks/BIx2AaJH.js';
|
3
|
+
export { a as OpenAPIV3 } from './chunks/BIx2AaJH.js';
|
4
|
+
import { StringReplace, WriteableDeep, StringJoin } from '@unshared/types';
|
5
|
+
import './chunks/8BFCFxqa.js';
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Given an OpenAPI specification, get the first base URL.
|
9
|
+
*
|
10
|
+
* @param specification The OpenAPI specification.
|
11
|
+
* @returns The first base URL.
|
12
|
+
* @example getBaseUrl(specification) // 'https://api.example.com/v1'
|
13
|
+
*/
|
14
|
+
declare function getBaseUrl(specification: OpenAPI.Document): string;
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Given an OpenAPI specification, find an operation by its operationId.
|
18
|
+
*
|
19
|
+
* @param specification The OpenAPI specification.
|
20
|
+
* @param operationId The operationId of the operation to resolve.
|
21
|
+
* @returns The resolved operation.
|
22
|
+
* @example openapiGetOperation(specification, 'getUser') // { method: 'get', path: '/users/{username}', ... }
|
23
|
+
*/
|
24
|
+
declare function getOperationById<T, U extends OpenAPIV2.OperationId<T>>(specification: T, operationId: U): OpenAPIV2.OperationById<T, U>;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Given an OpenAPI specification, find a route by its name.
|
28
|
+
*
|
29
|
+
* @param specification The OpenAPI specification.
|
30
|
+
* @param name The name of the route to resolve.
|
31
|
+
* @returns The resolved route.
|
32
|
+
* @example getOperationByRoute(specification, 'GET /users') // { method: 'get', path: '/users', ... }
|
33
|
+
*/
|
34
|
+
declare function getOperationByRoute<T extends object, U extends OpenAPIV2.Route<T>>(specification: Readonly<T>, name: U): OpenAPIV2.OperationByRoute<T, U>;
|
35
|
+
|
36
|
+
type OpenAPIReference = OpenAPIV2$1.ReferenceObject | OpenAPIV3.ReferenceObject | OpenAPIV3_1.ReferenceObject;
|
37
|
+
/**
|
38
|
+
* Check if a value is an {@linkcode OpenAPIReference}.
|
39
|
+
*
|
40
|
+
* @param value The value to check.
|
41
|
+
* @returns `true` if the value is a reference object.
|
42
|
+
* @example isReferenceObject({ $ref: '#/components/schemas/MySchema' }) // true
|
43
|
+
*/
|
44
|
+
declare function isReferenceObject<T extends OpenAPIReference>(value: unknown): value is T;
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Decode an OpenAPI reference path by replacing the encoded characters with
|
48
|
+
* their original values. This function will replace `~0` with `~` and `~1`
|
49
|
+
* with `/`.
|
50
|
+
*
|
51
|
+
* @example DecodeReference<'#/foo~1bar~0baz'> // '#/foo/bar~baz'
|
52
|
+
*/
|
53
|
+
type OpenAPIReferenceDecoded<T extends string> = StringReplace<StringReplace<T, '~0', '~'>, '~1', '/'>;
|
54
|
+
/**
|
55
|
+
* Extract the parts of a reference path as a tuple.
|
56
|
+
*
|
57
|
+
* @example OpenAPIV3ReferencePath<'#/paths/~1users~1{username}'> // ['paths', '/users/{username}']
|
58
|
+
*/
|
59
|
+
type OpenAPIReferencePath<T extends string> = T extends `#/${infer P}/${infer Rest}` ? [P, ...OpenAPIReferencePath<Rest>] : T extends `#/${infer P}` ? [P] : T extends `${infer P}/${infer Rest}` ? [P, ...OpenAPIReferencePath<Rest>] : T extends `${infer P}` ? [P] : [];
|
60
|
+
/**
|
61
|
+
* Resolve a type to the type it references. If the source is not a reference,
|
62
|
+
* the source will be returned.
|
63
|
+
*
|
64
|
+
* @template T The type to resolve.
|
65
|
+
* @returns The result type.
|
66
|
+
* @example Resolved<{ $ref: '#/info' }, { info: { title: string } }> // { title: string }
|
67
|
+
*/
|
68
|
+
type OpenAPIReferenceResolved<T extends OpenAPIReference, D extends object> = D extends object ? T extends {
|
69
|
+
$ref: infer R extends string;
|
70
|
+
} ? OpenAPIReferencePath<R> extends [infer P extends string] ? OpenAPIReferenceDecoded<P> extends keyof D ? D[OpenAPIReferenceDecoded<P>] extends object ? WriteableDeep<Omit<D[OpenAPIReferenceDecoded<P>], keyof T>> : never : never : OpenAPIReferencePath<R> extends [infer P extends string, ...infer Rest extends string[]] ? OpenAPIReferenceDecoded<P> extends keyof D ? D[OpenAPIReferenceDecoded<P>] extends object ? OpenAPIReferenceResolved<{
|
71
|
+
$ref: StringJoin<Rest, '/'>;
|
72
|
+
}, D[OpenAPIReferenceDecoded<P>]> : never : never : never : never : never;
|
73
|
+
/**
|
74
|
+
* Resolve an OpenAPI `ReferenceObject` to the component it references. If the
|
75
|
+
* source is not a reference, the source will be returned.
|
76
|
+
*
|
77
|
+
* @private
|
78
|
+
* @param reference The reference object to resolve.
|
79
|
+
* @param document The OpenAPI document to resolve the reference from.
|
80
|
+
* @returns The result component.
|
81
|
+
* @example resolveReference({ $ref: '#/components/schemas/User' }, document)
|
82
|
+
*/
|
83
|
+
declare function resolveReference<T extends OpenAPIReference, D extends object>(reference: Readonly<T>, document: Readonly<D>): OpenAPIReferenceResolved<T, D>;
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Resolve a type to the type it references. If the source is not a reference,
|
87
|
+
* the source will be returned.
|
88
|
+
*
|
89
|
+
* @template T The type to resolve.
|
90
|
+
* @returns The resolved type.
|
91
|
+
* @example
|
92
|
+
* type Resolved = OpenAPIResolved<{
|
93
|
+
* ...
|
94
|
+
* paths: {
|
95
|
+
* '/users': {
|
96
|
+
* get: { $ref: '#/components/routes/getUsers' }
|
97
|
+
* }
|
98
|
+
* }
|
99
|
+
* }>
|
100
|
+
*/
|
101
|
+
type OpenAPIResolved<T, D = T> = T extends OpenAPIReference ? D extends object ? OpenAPIResolved<OpenAPIReferenceResolved<T, D>, D> : never : T extends object ? {
|
102
|
+
-readonly [K in keyof T]: OpenAPIResolved<T[K], D>;
|
103
|
+
} : T;
|
104
|
+
/**
|
105
|
+
* Recursively resolve all references in an OpenAPI specification. This function
|
106
|
+
* will return a `Proxy` object that will resolve references on the fly.
|
107
|
+
*
|
108
|
+
* @param value The OpenAPI specification.
|
109
|
+
* @returns The resolved OpenAPI specification.
|
110
|
+
* @example
|
111
|
+
* const resolved = resolveReferences({
|
112
|
+
* ...
|
113
|
+
* paths: {
|
114
|
+
* '/users': {
|
115
|
+
* get: { $ref: '#/components/routes/getUsers' },
|
116
|
+
* },
|
117
|
+
* },
|
118
|
+
* })
|
119
|
+
*/
|
120
|
+
declare function resolveDocument<T extends object>(value: Readonly<T>): OpenAPIResolved<T>;
|
121
|
+
declare function resolveDocument<T extends object, D>(value: Readonly<T>, document: Readonly<D>): OpenAPIResolved<T, D>;
|
122
|
+
|
123
|
+
export { type OpenAPIReference, type OpenAPIReferenceDecoded, type OpenAPIReferencePath, type OpenAPIReferenceResolved, type OpenAPIResolved, OpenAPIV2, getBaseUrl, getOperationById, getOperationByRoute, isReferenceObject, resolveDocument, resolveReference };
|
package/dist/openapi.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"openapi.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/dist/utils.cjs
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
var parseRequest = require("./chunks/C3RyfPUw.cjs");
|
3
|
+
exports.isFormDataLike = parseRequest.isFormDataLike;
|
4
|
+
exports.isObjectLike = parseRequest.isObjectLike;
|
5
|
+
exports.parseRequest = parseRequest.parseRequest;
|
6
|
+
exports.parseRequestBody = parseRequest.parseRequestBody;
|
7
|
+
exports.parseRequestHeaders = parseRequest.parseRequestHeaders;
|
8
|
+
exports.parseRequestParameters = parseRequest.parseRequestParameters;
|
9
|
+
exports.parseRequestQuery = parseRequest.parseRequestQuery;
|
10
|
+
exports.parseRequestUrl = parseRequest.parseRequestUrl;
|
11
|
+
exports.toFormData = parseRequest.toFormData;
|
12
|
+
exports.toSearchParams = parseRequest.toSearchParams;
|
13
|
+
//# sourceMappingURL=utils.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/dist/utils.d.ts
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
import { a as RequestOptions, b as RequestContext } from './chunks/B0duX_ls.js';
|
2
|
+
export { R as RequestHeaders, c as SearchArrayFormat, S as SearchParamsObject, T as ToSearchParamsOptions, p as parseRequest, t as toSearchParams } from './chunks/B0duX_ls.js';
|
3
|
+
import '@unshared/types';
|
4
|
+
import './chunks/8BFCFxqa.js';
|
5
|
+
|
6
|
+
/**
|
7
|
+
* A type that represents a FormData-like object, which is a plain object with
|
8
|
+
* nested Blob, File, or FileList values. Or a FormData instance.
|
9
|
+
*/
|
10
|
+
type FormDataLike = FormData | Record<string, Blob | File | FileList>;
|
11
|
+
/**
|
12
|
+
* Predicate to check if a value is FormData-like, meaning it is a plain object
|
13
|
+
* with nested Blob, File, or FileList values.
|
14
|
+
*
|
15
|
+
* @param value The value to check.
|
16
|
+
* @returns `true` if the value is FormData-like, `false` otherwise.
|
17
|
+
* @example isFormDataLike({ file: new File(['test'], 'test.txt') }) // true
|
18
|
+
*/
|
19
|
+
declare function isFormDataLike(value: unknown): value is FormDataLike;
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Predicate to check if a value is an object-like value.
|
23
|
+
*
|
24
|
+
* @param value The value to check.
|
25
|
+
* @returns `true` if the value is an object-like value, `false` otherwise.
|
26
|
+
* @example isObjectLike({}) // true
|
27
|
+
*/
|
28
|
+
declare function isObjectLike(value: unknown): value is Record<string, unknown>;
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Parse the request body based on the provided data and options.
|
32
|
+
*
|
33
|
+
* @param route The route path.
|
34
|
+
* @param options The request options.
|
35
|
+
* @param context The request context.
|
36
|
+
*/
|
37
|
+
declare function parseRequestBody(route: string, options: Pick<RequestOptions, 'body' | 'data'>, context: RequestContext): void;
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Parse the request headers based on the provided data and options.
|
41
|
+
*
|
42
|
+
* @param route The route path.
|
43
|
+
* @param options The request options.
|
44
|
+
* @param context The request context.
|
45
|
+
*/
|
46
|
+
declare function parseRequestHeaders(route: string, options: Pick<RequestOptions, 'headers'>, context: RequestContext): void;
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Parse the request parameters from the request data. This function will append
|
50
|
+
* the path parameters to the URL based on the method and the data provided.
|
51
|
+
*
|
52
|
+
* @param route The name of the route to fetch. (ignored)
|
53
|
+
* @param options The options to pass to the request.
|
54
|
+
* @param context The request context to modify.
|
55
|
+
* @example
|
56
|
+
* // Using `express` style path parameters.
|
57
|
+
* parseRequestParameters('GET /users/:id', { data: { id: 1 } }, context)
|
58
|
+
*
|
59
|
+
* // Using `OpenAPI` style path parameters.
|
60
|
+
* parseRequestParameters('GET /users/{id}', { data: { id: 1 } }, context)
|
61
|
+
*/
|
62
|
+
declare function parseRequestParameters(route: string, options: Pick<RequestOptions, 'data' | 'parameters'>, context: RequestContext): void;
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Parse the query parameters from the request data. This function will append
|
66
|
+
* the query parameters to the URL based on the method and the data provided.
|
67
|
+
*
|
68
|
+
* @param route The name of the route to fetch. (ignored)
|
69
|
+
* @param options The options to pass to the request.
|
70
|
+
* @param context The request context to modify.
|
71
|
+
*/
|
72
|
+
declare function parseRequestQuery(route: string, options: Pick<RequestOptions, 'data' | 'query' | 'searchArrayFormat'>, context: RequestContext): void;
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Parses the route name to extract the URL and method. It allows the url and method to be
|
76
|
+
* provided in the route name, or in the options object. The method will default to 'get'.
|
77
|
+
*
|
78
|
+
* @param route The name of the route to fetch.
|
79
|
+
* @param options The options to pass to the request.
|
80
|
+
* @param context The request context to modify.
|
81
|
+
* @example parseRequestUrl('GET /users', { baseUrl: 'https://api.example.com' }, context)
|
82
|
+
*/
|
83
|
+
declare function parseRequestUrl(route: string, options: Pick<RequestOptions, 'baseUrl' | 'method'>, context: RequestContext): void;
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Casts an object that may contain `Blob`, `File`, or `FileList` values to a `FormData` object.
|
87
|
+
*
|
88
|
+
* @param object The object to cast to a `FormData` object.
|
89
|
+
* @returns The `FormData` object.
|
90
|
+
*/
|
91
|
+
declare function toFormData(object: FormDataLike): FormData;
|
92
|
+
|
93
|
+
export { type FormDataLike, RequestContext, RequestOptions, isFormDataLike, isObjectLike, parseRequestBody, parseRequestHeaders, parseRequestParameters, parseRequestQuery, parseRequestUrl, toFormData };
|
package/dist/utils.js
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
import { i, a, p, b, c, d, e, f, t, g } from "./chunks/wF9C7mO0.js";
|
2
|
+
export {
|
3
|
+
i as isFormDataLike,
|
4
|
+
a as isObjectLike,
|
5
|
+
p as parseRequest,
|
6
|
+
b as parseRequestBody,
|
7
|
+
c as parseRequestHeaders,
|
8
|
+
d as parseRequestParameters,
|
9
|
+
e as parseRequestQuery,
|
10
|
+
f as parseRequestUrl,
|
11
|
+
t as toFormData,
|
12
|
+
g as toSearchParams
|
13
|
+
};
|
14
|
+
//# sourceMappingURL=utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/package.json
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
{
|
2
|
+
"name": "@unshared/client",
|
3
|
+
"type": "module",
|
4
|
+
"version": "0.2.0",
|
5
|
+
"license": "MIT",
|
6
|
+
"sideEffects": false,
|
7
|
+
"author": "Stanley Horwood <stanley@hsjm.io>",
|
8
|
+
"bugs": "https://github.com/shorwood/unshared/issues",
|
9
|
+
"homepage": "https://github.com/shorwood/unshared#readme",
|
10
|
+
"repository": {
|
11
|
+
"directory": "packages/client",
|
12
|
+
"type": "git",
|
13
|
+
"url": "https://github.com/shorwood/unshared"
|
14
|
+
},
|
15
|
+
"main": "./dist/index.cjs",
|
16
|
+
"module": "./dist/index.js",
|
17
|
+
"types": "./dist/index.d.ts",
|
18
|
+
"exports": {
|
19
|
+
"./createClient": {
|
20
|
+
"require": "./dist/createClient.cjs",
|
21
|
+
"types": "./dist/createClient.d.ts",
|
22
|
+
"import": "./dist/createClient.js"
|
23
|
+
},
|
24
|
+
"./fetch": {
|
25
|
+
"require": "./dist/fetch.cjs",
|
26
|
+
"types": "./dist/fetch.d.ts",
|
27
|
+
"import": "./dist/fetch.js"
|
28
|
+
},
|
29
|
+
"./openapi": {
|
30
|
+
"require": "./dist/openapi.cjs",
|
31
|
+
"types": "./dist/openapi.d.ts",
|
32
|
+
"import": "./dist/openapi.js"
|
33
|
+
},
|
34
|
+
"./utils": {
|
35
|
+
"require": "./dist/utils.cjs",
|
36
|
+
"types": "./dist/utils.d.ts",
|
37
|
+
"import": "./dist/utils.js"
|
38
|
+
},
|
39
|
+
".": {
|
40
|
+
"require": "./dist/index.cjs",
|
41
|
+
"types": "./dist/index.d.ts",
|
42
|
+
"import": "./dist/index.js"
|
43
|
+
}
|
44
|
+
},
|
45
|
+
"files": [
|
46
|
+
"dist",
|
47
|
+
"README.md",
|
48
|
+
"LICENSE.md"
|
49
|
+
],
|
50
|
+
"dependencies": {
|
51
|
+
"@unshared/types": "0.2.0",
|
52
|
+
"openapi-types": "12.1.3"
|
53
|
+
},
|
54
|
+
"devDependencies": {
|
55
|
+
"@unshared/scripts": "0.2.0"
|
56
|
+
},
|
57
|
+
"scripts": {
|
58
|
+
"build:httpMethods": "tsx ./scripts/buildHttpMethods.ts",
|
59
|
+
"build:httpHeaders": "tsx ./scripts/buildHttpHeaders.ts",
|
60
|
+
"build:httpStatusCodes": "tsx ./scripts/buildHttpStatusCodes.ts"
|
61
|
+
}
|
62
|
+
}
|