tapi-rs 3.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.
- package/README.md +281 -0
- package/dist/core.d.ts +65 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +169 -0
- package/dist/core.js.map +1 -0
- package/dist/endpoints.d.ts +63 -0
- package/dist/endpoints.d.ts.map +1 -0
- package/dist/endpoints.js +44 -0
- package/dist/endpoints.js.map +1 -0
- package/dist/errors.d.ts +36 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +43 -0
- package/dist/errors.js.map +1 -0
- package/dist/hook.d.ts +10 -0
- package/dist/hook.d.ts.map +1 -0
- package/dist/hook.js +99 -0
- package/dist/hook.js.map +1 -0
- package/dist/index.d.ts +213 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/request.d.ts +5 -0
- package/dist/request.d.ts.map +1 -0
- package/dist/request.js +109 -0
- package/dist/request.js.map +1 -0
- package/dist/response.d.ts +27 -0
- package/dist/response.d.ts.map +1 -0
- package/dist/response.js +4 -0
- package/dist/response.js.map +1 -0
- package/dist/translations.d.ts +17 -0
- package/dist/translations.d.ts.map +1 -0
- package/dist/translations.js +35 -0
- package/dist/translations.js.map +1 -0
- package/dist/types.d.ts +105 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +6 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +84 -0
- package/dist/utils.js.map +1 -0
- package/package.json +66 -0
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as Types from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a success response
|
|
4
|
+
*/
|
|
5
|
+
export declare function createSuccess<T>(data: T): Types.Success<T>;
|
|
6
|
+
/**
|
|
7
|
+
* Creates a network error response
|
|
8
|
+
*/
|
|
9
|
+
export declare function createNetworkError(message: string, error: Error, code?: number): Types.NetworkError;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a custom API error response
|
|
12
|
+
*/
|
|
13
|
+
export declare function createCustomError<T = string>(message: string, data: T, code: number): Types.CustomError<T>;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a mapper error response
|
|
16
|
+
*/
|
|
17
|
+
export declare function createMapperError(message: string, error: Error, code?: number): Types.MapperError;
|
|
18
|
+
/**
|
|
19
|
+
* Creates an undefined parameter error response
|
|
20
|
+
*/
|
|
21
|
+
export declare function createUndefinedParamError(message: string, code?: number): Types.UndefinedParamError;
|
|
22
|
+
/**
|
|
23
|
+
* Type guard to check if response is successful
|
|
24
|
+
*/
|
|
25
|
+
export declare function isSuccess<T>(response: Types.ApiResponse<T, any>): response is Types.Success<T> & {
|
|
26
|
+
endpoint: string;
|
|
27
|
+
method: Types.HttpMethod;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Type guard to check if response is an error
|
|
31
|
+
*/
|
|
32
|
+
export declare function isError<T>(response: Types.ApiResponse<any, T>): response is Types.Errors<T> & {
|
|
33
|
+
endpoint: string;
|
|
34
|
+
method: Types.HttpMethod;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAE1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,MAAY,GAAG,KAAK,CAAC,YAAY,CAExG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAE1G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,MAAY,GAAG,KAAK,CAAC,WAAW,CAEtG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAY,GAAG,KAAK,CAAC,mBAAmB,CAExG;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAA;CAAE,CAE/I;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAA;CAAE,CAE5I"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a success response
|
|
3
|
+
*/
|
|
4
|
+
export function createSuccess(data) {
|
|
5
|
+
return { ok: true, status: "success", data };
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Creates a network error response
|
|
9
|
+
*/
|
|
10
|
+
export function createNetworkError(message, error, code = 500) {
|
|
11
|
+
return { ok: false, code, status: "network_error", message, error };
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates a custom API error response
|
|
15
|
+
*/
|
|
16
|
+
export function createCustomError(message, data, code) {
|
|
17
|
+
return { ok: false, code, status: "api_error", message, data };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a mapper error response
|
|
21
|
+
*/
|
|
22
|
+
export function createMapperError(message, error, code = 500) {
|
|
23
|
+
return { ok: false, code, status: "mapper_error", message, error };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates an undefined parameter error response
|
|
27
|
+
*/
|
|
28
|
+
export function createUndefinedParamError(message, code = 400) {
|
|
29
|
+
return { ok: false, code, status: "undefined_param", message };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Type guard to check if response is successful
|
|
33
|
+
*/
|
|
34
|
+
export function isSuccess(response) {
|
|
35
|
+
return response.ok === true;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Type guard to check if response is an error
|
|
39
|
+
*/
|
|
40
|
+
export function isError(response) {
|
|
41
|
+
return response.ok === false;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,aAAa,CAAI,IAAO;IACtC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,KAAY,EAAE,OAAe,GAAG;IAClF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAa,OAAe,EAAE,IAAO,EAAE,IAAY;IAClF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,KAAY,EAAE,OAAe,GAAG;IACjF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAE,OAAe,GAAG;IAC3E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAI,QAAmC;IAC9D,OAAO,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAI,QAAmC;IAC5D,OAAO,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC;AAC/B,CAAC"}
|
package/dist/hook.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as ResponseSchema from "./response";
|
|
2
|
+
import * as Types from "./types";
|
|
3
|
+
export type RefreshFunction = (resetState?: boolean) => Promise<boolean>;
|
|
4
|
+
type SetterFunction<T> = (callback: (prev: T) => T) => void;
|
|
5
|
+
export type HookResponse<T extends Types.RequestConfig<any, any, any, any, any, any, any, any, any>, TError = string> = [ResponseSchema.InferResult<T["response"]>, null, false, RefreshFunction, SetterFunction<ResponseSchema.InferResult<T["response"]>>] | [null, Types.Errors<TError>, false, RefreshFunction, SetterFunction<ResponseSchema.InferResult<T["response"]>>] | [null, null, true, RefreshFunction, SetterFunction<ResponseSchema.InferResult<T["response"]>>];
|
|
6
|
+
export declare function useHook<T extends Types.RequestConfig<any, any, any, any, any, any, any, any, any>, TError = string>(requester: Types.RequesterFunction<T, TError>, callParams: Types.CallSignature<T> & {
|
|
7
|
+
lazy?: boolean;
|
|
8
|
+
}): HookResponse<T, TError>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,cAAc,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAsBjC,MAAM,MAAM,eAAe,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AACzE,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAE5D,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,IAChH,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GACpI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAC/G,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnG,wBAAgB,OAAO,CAAC,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EACjH,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,EAC7C,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACtD,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAyFzB"}
|
package/dist/hook.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
import isEqual from "react-fast-compare";
|
|
3
|
+
function hasAnyUndefined(obj) {
|
|
4
|
+
if (obj === undefined)
|
|
5
|
+
return true;
|
|
6
|
+
if (typeof obj !== "object" || obj === null)
|
|
7
|
+
return false;
|
|
8
|
+
for (const key in obj) {
|
|
9
|
+
if (hasAnyUndefined(obj[key]))
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
function useDeepCompareMemo(value) {
|
|
15
|
+
const ref = useRef(value);
|
|
16
|
+
if (!isEqual(value, ref.current))
|
|
17
|
+
ref.current = value;
|
|
18
|
+
return ref.current;
|
|
19
|
+
}
|
|
20
|
+
function useDeepCompareCallback(fn, deps) {
|
|
21
|
+
const memoDeps = useDeepCompareMemo(deps);
|
|
22
|
+
return useCallback(fn, memoDeps);
|
|
23
|
+
}
|
|
24
|
+
export function useHook(requester, callParams) {
|
|
25
|
+
const [unmappedData, setUnmappedData] = useState(null);
|
|
26
|
+
const [mappedData, setMappedData] = useState(null);
|
|
27
|
+
const [error, setError] = useState(null);
|
|
28
|
+
const [loading, setLoading] = useState(true);
|
|
29
|
+
const requestParams = useDeepCompareMemo({
|
|
30
|
+
body: callParams.body,
|
|
31
|
+
query: callParams.query,
|
|
32
|
+
headers: callParams.headers,
|
|
33
|
+
path: callParams.path
|
|
34
|
+
});
|
|
35
|
+
const mapperParams = useDeepCompareMemo(callParams.map);
|
|
36
|
+
const fetchData = useDeepCompareCallback(async () => {
|
|
37
|
+
const result = await requester({ ...callParams, skipMapper: true, preventFetchingWithUndefinedParams: true });
|
|
38
|
+
if (!result.ok) {
|
|
39
|
+
if (result.status === "undefined_param") {
|
|
40
|
+
setLoading(true);
|
|
41
|
+
setUnmappedData(null);
|
|
42
|
+
setMappedData(null);
|
|
43
|
+
setError(null);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
setUnmappedData(null);
|
|
47
|
+
setMappedData(null);
|
|
48
|
+
setError(result);
|
|
49
|
+
setLoading(false);
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const mapper = requester.mapper;
|
|
53
|
+
const mappedData = mapper ? mapper(result.data)(mapperParams) : result.data;
|
|
54
|
+
setUnmappedData(result.data);
|
|
55
|
+
setMappedData(mappedData);
|
|
56
|
+
setError(null);
|
|
57
|
+
setLoading(false);
|
|
58
|
+
return true;
|
|
59
|
+
}, [requester, requestParams]);
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
// Only fetch data automatically if not in lazy mode
|
|
62
|
+
if (!callParams.lazy) {
|
|
63
|
+
fetchData();
|
|
64
|
+
}
|
|
65
|
+
}, [fetchData, callParams.lazy]);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (unmappedData) {
|
|
68
|
+
const mapper = requester.mapper;
|
|
69
|
+
if (mapper) {
|
|
70
|
+
setMappedData(mapper(unmappedData)(mapperParams));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
setMappedData(unmappedData);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}, [mapperParams]);
|
|
77
|
+
const setter = useCallback((callback) => {
|
|
78
|
+
setMappedData((prev) => {
|
|
79
|
+
if (prev === null)
|
|
80
|
+
return null;
|
|
81
|
+
const next = callback(prev);
|
|
82
|
+
const mapper = requester.mapper;
|
|
83
|
+
if (mapper)
|
|
84
|
+
return mapper(next)(mapperParams);
|
|
85
|
+
return next;
|
|
86
|
+
});
|
|
87
|
+
}, [mapperParams]);
|
|
88
|
+
async function refresh(resetState) {
|
|
89
|
+
if (resetState) {
|
|
90
|
+
setLoading(true);
|
|
91
|
+
setUnmappedData(null);
|
|
92
|
+
setMappedData(null);
|
|
93
|
+
setError(null);
|
|
94
|
+
}
|
|
95
|
+
return await fetchData();
|
|
96
|
+
}
|
|
97
|
+
return [mappedData, error, loading, refresh, setter];
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=hook.js.map
|
package/dist/hook.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
export type { CustomError, Errors, HttpMethod, MapperError, NetworkError, ApiResponse, Success, UndefinedParamError } from "./types";
|
|
2
|
+
export type { RefreshFunction } from "./hook";
|
|
3
|
+
export type { Language } from "./translations";
|
|
4
|
+
export type { ResponseConfig } from "./response";
|
|
5
|
+
import { TapiBuilder } from "./core";
|
|
6
|
+
import { create as response } from "./response";
|
|
7
|
+
/**
|
|
8
|
+
* Tapi - Type-safe API client builder
|
|
9
|
+
*
|
|
10
|
+
* A modern REST API client builder using pure TypeScript types.
|
|
11
|
+
* No runtime validation - compile-time type safety only.
|
|
12
|
+
*/
|
|
13
|
+
declare const Tapi: {
|
|
14
|
+
readonly builder: () => TapiBuilder<{}, string, false, false, false>;
|
|
15
|
+
readonly response: typeof response;
|
|
16
|
+
readonly get: <T extends {
|
|
17
|
+
path?: any;
|
|
18
|
+
body?: any;
|
|
19
|
+
formData?: any;
|
|
20
|
+
query?: any;
|
|
21
|
+
headers?: any;
|
|
22
|
+
response?: any;
|
|
23
|
+
mapped?: any;
|
|
24
|
+
mapArg?: any;
|
|
25
|
+
} = {}>() => (config: {
|
|
26
|
+
endpoint: string;
|
|
27
|
+
response: import("./response").ResponseConfig<T extends {
|
|
28
|
+
response: infer R;
|
|
29
|
+
} ? R : unknown, T extends {
|
|
30
|
+
mapped: infer M;
|
|
31
|
+
} ? M : T extends {
|
|
32
|
+
response: infer R;
|
|
33
|
+
} ? R : unknown, T extends {
|
|
34
|
+
mapArg: infer A;
|
|
35
|
+
} ? A : undefined>;
|
|
36
|
+
}) => import("./types").RequestConfig<"GET", T extends {
|
|
37
|
+
path: infer P;
|
|
38
|
+
} ? P : undefined, T extends {
|
|
39
|
+
body: infer B;
|
|
40
|
+
} ? B : undefined, T extends {
|
|
41
|
+
formData: infer F;
|
|
42
|
+
} ? F : undefined, T extends {
|
|
43
|
+
query: infer Q;
|
|
44
|
+
} ? Q : undefined, T extends {
|
|
45
|
+
headers: infer H;
|
|
46
|
+
} ? H : undefined, T extends {
|
|
47
|
+
response: infer R;
|
|
48
|
+
} ? R : unknown, T extends {
|
|
49
|
+
mapped: infer M;
|
|
50
|
+
} ? M : T extends {
|
|
51
|
+
response: infer R;
|
|
52
|
+
} ? R : unknown, T extends {
|
|
53
|
+
mapArg: infer A;
|
|
54
|
+
} ? A : undefined>;
|
|
55
|
+
readonly post: <T extends {
|
|
56
|
+
path?: any;
|
|
57
|
+
body?: any;
|
|
58
|
+
formData?: any;
|
|
59
|
+
query?: any;
|
|
60
|
+
headers?: any;
|
|
61
|
+
response?: any;
|
|
62
|
+
mapped?: any;
|
|
63
|
+
mapArg?: any;
|
|
64
|
+
} = {}>() => (config: {
|
|
65
|
+
endpoint: string;
|
|
66
|
+
response: import("./response").ResponseConfig<T extends {
|
|
67
|
+
response: infer R;
|
|
68
|
+
} ? R : unknown, T extends {
|
|
69
|
+
mapped: infer M;
|
|
70
|
+
} ? M : T extends {
|
|
71
|
+
response: infer R;
|
|
72
|
+
} ? R : unknown, T extends {
|
|
73
|
+
mapArg: infer A;
|
|
74
|
+
} ? A : undefined>;
|
|
75
|
+
}) => import("./types").RequestConfig<"POST", T extends {
|
|
76
|
+
path: infer P;
|
|
77
|
+
} ? P : undefined, T extends {
|
|
78
|
+
body: infer B;
|
|
79
|
+
} ? B : undefined, T extends {
|
|
80
|
+
formData: infer F;
|
|
81
|
+
} ? F : undefined, T extends {
|
|
82
|
+
query: infer Q;
|
|
83
|
+
} ? Q : undefined, T extends {
|
|
84
|
+
headers: infer H;
|
|
85
|
+
} ? H : undefined, T extends {
|
|
86
|
+
response: infer R;
|
|
87
|
+
} ? R : unknown, T extends {
|
|
88
|
+
mapped: infer M;
|
|
89
|
+
} ? M : T extends {
|
|
90
|
+
response: infer R;
|
|
91
|
+
} ? R : unknown, T extends {
|
|
92
|
+
mapArg: infer A;
|
|
93
|
+
} ? A : undefined>;
|
|
94
|
+
readonly put: <T extends {
|
|
95
|
+
path?: any;
|
|
96
|
+
body?: any;
|
|
97
|
+
formData?: any;
|
|
98
|
+
query?: any;
|
|
99
|
+
headers?: any;
|
|
100
|
+
response?: any;
|
|
101
|
+
mapped?: any;
|
|
102
|
+
mapArg?: any;
|
|
103
|
+
} = {}>() => (config: {
|
|
104
|
+
endpoint: string;
|
|
105
|
+
response: import("./response").ResponseConfig<T extends {
|
|
106
|
+
response: infer R;
|
|
107
|
+
} ? R : unknown, T extends {
|
|
108
|
+
mapped: infer M;
|
|
109
|
+
} ? M : T extends {
|
|
110
|
+
response: infer R;
|
|
111
|
+
} ? R : unknown, T extends {
|
|
112
|
+
mapArg: infer A;
|
|
113
|
+
} ? A : undefined>;
|
|
114
|
+
}) => import("./types").RequestConfig<"PUT", T extends {
|
|
115
|
+
path: infer P;
|
|
116
|
+
} ? P : undefined, T extends {
|
|
117
|
+
body: infer B;
|
|
118
|
+
} ? B : undefined, T extends {
|
|
119
|
+
formData: infer F;
|
|
120
|
+
} ? F : undefined, T extends {
|
|
121
|
+
query: infer Q;
|
|
122
|
+
} ? Q : undefined, T extends {
|
|
123
|
+
headers: infer H;
|
|
124
|
+
} ? H : undefined, T extends {
|
|
125
|
+
response: infer R;
|
|
126
|
+
} ? R : unknown, T extends {
|
|
127
|
+
mapped: infer M;
|
|
128
|
+
} ? M : T extends {
|
|
129
|
+
response: infer R;
|
|
130
|
+
} ? R : unknown, T extends {
|
|
131
|
+
mapArg: infer A;
|
|
132
|
+
} ? A : undefined>;
|
|
133
|
+
readonly delete: <T extends {
|
|
134
|
+
path?: any;
|
|
135
|
+
body?: any;
|
|
136
|
+
formData?: any;
|
|
137
|
+
query?: any;
|
|
138
|
+
headers?: any;
|
|
139
|
+
response?: any;
|
|
140
|
+
mapped?: any;
|
|
141
|
+
mapArg?: any;
|
|
142
|
+
} = {}>() => (config: {
|
|
143
|
+
endpoint: string;
|
|
144
|
+
response: import("./response").ResponseConfig<T extends {
|
|
145
|
+
response: infer R;
|
|
146
|
+
} ? R : unknown, T extends {
|
|
147
|
+
mapped: infer M;
|
|
148
|
+
} ? M : T extends {
|
|
149
|
+
response: infer R;
|
|
150
|
+
} ? R : unknown, T extends {
|
|
151
|
+
mapArg: infer A;
|
|
152
|
+
} ? A : undefined>;
|
|
153
|
+
}) => import("./types").RequestConfig<"DELETE", T extends {
|
|
154
|
+
path: infer P;
|
|
155
|
+
} ? P : undefined, T extends {
|
|
156
|
+
body: infer B;
|
|
157
|
+
} ? B : undefined, T extends {
|
|
158
|
+
formData: infer F;
|
|
159
|
+
} ? F : undefined, T extends {
|
|
160
|
+
query: infer Q;
|
|
161
|
+
} ? Q : undefined, T extends {
|
|
162
|
+
headers: infer H;
|
|
163
|
+
} ? H : undefined, T extends {
|
|
164
|
+
response: infer R;
|
|
165
|
+
} ? R : unknown, T extends {
|
|
166
|
+
mapped: infer M;
|
|
167
|
+
} ? M : T extends {
|
|
168
|
+
response: infer R;
|
|
169
|
+
} ? R : unknown, T extends {
|
|
170
|
+
mapArg: infer A;
|
|
171
|
+
} ? A : undefined>;
|
|
172
|
+
readonly patch: <T extends {
|
|
173
|
+
path?: any;
|
|
174
|
+
body?: any;
|
|
175
|
+
formData?: any;
|
|
176
|
+
query?: any;
|
|
177
|
+
headers?: any;
|
|
178
|
+
response?: any;
|
|
179
|
+
mapped?: any;
|
|
180
|
+
mapArg?: any;
|
|
181
|
+
} = {}>() => (config: {
|
|
182
|
+
endpoint: string;
|
|
183
|
+
response: import("./response").ResponseConfig<T extends {
|
|
184
|
+
response: infer R;
|
|
185
|
+
} ? R : unknown, T extends {
|
|
186
|
+
mapped: infer M;
|
|
187
|
+
} ? M : T extends {
|
|
188
|
+
response: infer R;
|
|
189
|
+
} ? R : unknown, T extends {
|
|
190
|
+
mapArg: infer A;
|
|
191
|
+
} ? A : undefined>;
|
|
192
|
+
}) => import("./types").RequestConfig<"PATCH", T extends {
|
|
193
|
+
path: infer P;
|
|
194
|
+
} ? P : undefined, T extends {
|
|
195
|
+
body: infer B;
|
|
196
|
+
} ? B : undefined, T extends {
|
|
197
|
+
formData: infer F;
|
|
198
|
+
} ? F : undefined, T extends {
|
|
199
|
+
query: infer Q;
|
|
200
|
+
} ? Q : undefined, T extends {
|
|
201
|
+
headers: infer H;
|
|
202
|
+
} ? H : undefined, T extends {
|
|
203
|
+
response: infer R;
|
|
204
|
+
} ? R : unknown, T extends {
|
|
205
|
+
mapped: infer M;
|
|
206
|
+
} ? M : T extends {
|
|
207
|
+
response: infer R;
|
|
208
|
+
} ? R : unknown, T extends {
|
|
209
|
+
mapArg: infer A;
|
|
210
|
+
} ? A : undefined>;
|
|
211
|
+
};
|
|
212
|
+
export default Tapi;
|
|
213
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAErI,YAAY,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,QAAA,MAAM,IAAI;;;;;;;;;;;;kBAWqlD;;;;;;;;;;;KAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAtF;;;;;;;;;;;KAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAtF;;;;;;;;;;;KAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAtF;;;;;;;;;;;KAAsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAtF;;;;;;;;;;;KAAsF;;;;;;;;;;;;;;;;;;;CAH3qD,CAAC;AAEX,eAAe,IAAI,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TapiBuilder } from "./core";
|
|
2
|
+
import { Endpoints } from "./endpoints";
|
|
3
|
+
import { create as response } from "./response";
|
|
4
|
+
/**
|
|
5
|
+
* Tapi - Type-safe API client builder
|
|
6
|
+
*
|
|
7
|
+
* A modern REST API client builder using pure TypeScript types.
|
|
8
|
+
* No runtime validation - compile-time type safety only.
|
|
9
|
+
*/
|
|
10
|
+
const Tapi = {
|
|
11
|
+
builder: () => new TapiBuilder(),
|
|
12
|
+
response,
|
|
13
|
+
get: Endpoints.get,
|
|
14
|
+
post: Endpoints.post,
|
|
15
|
+
put: Endpoints.put,
|
|
16
|
+
delete: Endpoints.delete,
|
|
17
|
+
patch: Endpoints.patch
|
|
18
|
+
};
|
|
19
|
+
export default Tapi;
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,IAAI,GAAG;IACX,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,EAAE;IAChC,QAAQ;IACR,GAAG,EAAE,SAAS,CAAC,GAAG;IAClB,IAAI,EAAE,SAAS,CAAC,IAAI;IACpB,GAAG,EAAE,SAAS,CAAC,GAAG;IAClB,MAAM,EAAE,SAAS,CAAC,MAAM;IACxB,KAAK,EAAE,SAAS,CAAC,KAAK;CACd,CAAC;AAEX,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as ResponseSchema from "./response";
|
|
2
|
+
import { Language } from "./translations";
|
|
3
|
+
import * as Types from "./types";
|
|
4
|
+
export declare function create<TConfig extends Types.RequestConfig<any, any, any, any, any, any, any, any, any>, TError = string>(host: string, config: TConfig, prefetchCallback: Types.PrefetchCallback | undefined, postfetchCallback: Types.PostfetchCallback<ResponseSchema.InferResult<TConfig["response"]>, TError> | undefined, defaultHeaders: Record<string, string> | undefined, errorHandler: (response: Response) => Promise<TError>, language?: Language): Types.RequesterFunction<TConfig, TError>;
|
|
5
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAK,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAoBjC,wBAAgB,MAAM,CAAC,OAAO,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EACtH,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,SAAS,EACpD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,EAC/G,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAClD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,EACrD,QAAQ,GAAE,QAAe,GACxB,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CA8F1C"}
|
package/dist/request.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import * as Errors from "./errors";
|
|
2
|
+
import { t } from "./translations";
|
|
3
|
+
import * as Utils from "./utils";
|
|
4
|
+
function hasAnyUndefined(obj) {
|
|
5
|
+
if (obj === undefined)
|
|
6
|
+
return true;
|
|
7
|
+
if (typeof obj !== "object" || obj === null)
|
|
8
|
+
return false;
|
|
9
|
+
for (const key in obj) {
|
|
10
|
+
if (hasAnyUndefined(obj[key]))
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
function dispatchPostFetchCallback(callback, args) {
|
|
16
|
+
if (callback) {
|
|
17
|
+
Promise.resolve()
|
|
18
|
+
.then(() => callback(args))
|
|
19
|
+
.catch(() => { });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function create(host, config, prefetchCallback, postfetchCallback, defaultHeaders, errorHandler, language = "en") {
|
|
23
|
+
const translations = t(language);
|
|
24
|
+
const requester = async function (params) {
|
|
25
|
+
const promise = async () => {
|
|
26
|
+
try {
|
|
27
|
+
// Check for undefined parameters if requested
|
|
28
|
+
if (params.preventFetchingWithUndefinedParams && hasAnyUndefined(params)) {
|
|
29
|
+
const undefinedError = Errors.createUndefinedParamError(translations.errors.undefinedParams, 400);
|
|
30
|
+
const nError = { ...undefinedError, endpoint: config.endpoint, method: config.method };
|
|
31
|
+
dispatchPostFetchCallback(postfetchCallback, nError);
|
|
32
|
+
return nError;
|
|
33
|
+
}
|
|
34
|
+
const url = Utils.buildUrl(host, config, params);
|
|
35
|
+
// Prepare request details for prefetchCallback
|
|
36
|
+
const headers = new Headers({ ...(defaultHeaders || {}) });
|
|
37
|
+
if (params.headers) {
|
|
38
|
+
for (const [key, value] of Object.entries(params.headers)) {
|
|
39
|
+
headers.append(key, String(value));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
let body = null;
|
|
43
|
+
if (params.formData) {
|
|
44
|
+
body = new FormData();
|
|
45
|
+
for (const [key, value] of Object.entries(params.formData)) {
|
|
46
|
+
if (value instanceof Array) {
|
|
47
|
+
if (value.length !== 0 && value[0] instanceof File) {
|
|
48
|
+
for (const item of value)
|
|
49
|
+
body.append(key, item);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
body.append(key, value);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (params.body) {
|
|
57
|
+
body = JSON.stringify(params.body);
|
|
58
|
+
headers.append("Content-Type", "application/json");
|
|
59
|
+
}
|
|
60
|
+
// Call prefetchCallback if provided
|
|
61
|
+
if (prefetchCallback) {
|
|
62
|
+
await Promise.resolve(prefetchCallback({ url, method: config.method, headers, body }));
|
|
63
|
+
}
|
|
64
|
+
const responseOrError = await Utils.executeRequest(url, config, params, defaultHeaders, language);
|
|
65
|
+
if ("error" in responseOrError) {
|
|
66
|
+
const nError = { ...responseOrError, endpoint: url, method: config.method };
|
|
67
|
+
dispatchPostFetchCallback(postfetchCallback, nError);
|
|
68
|
+
return nError;
|
|
69
|
+
}
|
|
70
|
+
const response = responseOrError;
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
const errorResponse = await Utils.handleErrorResponse(response, errorHandler, language);
|
|
73
|
+
const nError = { ...errorResponse, endpoint: url, method: config.method };
|
|
74
|
+
dispatchPostFetchCallback(postfetchCallback, nError);
|
|
75
|
+
return nError;
|
|
76
|
+
}
|
|
77
|
+
// Parse response data (no validation, trust the types)
|
|
78
|
+
const data = await response.json();
|
|
79
|
+
// Apply mapper if present and not skipped
|
|
80
|
+
let resultData = data;
|
|
81
|
+
if (!params.skipMapper && config.response.mapper) {
|
|
82
|
+
try {
|
|
83
|
+
resultData = config.response.mapper(data)(params.map);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const mapperError = Errors.createMapperError(translations.errors.mapperError, error instanceof Error ? error : new Error(String(error)));
|
|
87
|
+
const nError = { ...mapperError, endpoint: config.endpoint, method: config.method };
|
|
88
|
+
dispatchPostFetchCallback(postfetchCallback, nError);
|
|
89
|
+
return nError;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const successResult = Errors.createSuccess(resultData);
|
|
93
|
+
const nResult = { ...successResult, endpoint: config.endpoint, method: config.method };
|
|
94
|
+
dispatchPostFetchCallback(postfetchCallback, nResult);
|
|
95
|
+
return nResult;
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const networkError = Errors.createNetworkError(translations.errors.requestFailed, error instanceof Error ? error : new Error(String(error)));
|
|
99
|
+
const nError = { ...networkError, endpoint: config.endpoint, method: config.method };
|
|
100
|
+
dispatchPostFetchCallback(postfetchCallback, nError);
|
|
101
|
+
return nError;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
return await promise();
|
|
105
|
+
};
|
|
106
|
+
requester.mapper = config.response.mapper;
|
|
107
|
+
return requester;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response configuration with optional mapper
|
|
3
|
+
* Uses pure TypeScript types instead of Zod schemas
|
|
4
|
+
*/
|
|
5
|
+
export type ResponseConfig<TResponse, TMapped = TResponse, TMapArg = undefined> = {
|
|
6
|
+
_response?: TResponse;
|
|
7
|
+
mapper?: MapperCallback<TResponse, TMapArg, TMapped>;
|
|
8
|
+
};
|
|
9
|
+
type MapperCallbackArg<T> = T extends Record<string, any> ? T : undefined;
|
|
10
|
+
type MapperCallback<TResponse, TArg, TResult> = (data: Readonly<TResponse>) => (arg: MapperCallbackArg<TArg>) => TResult;
|
|
11
|
+
export type InferResult<T> = T extends ResponseConfig<infer TResponse, infer TMapped, any> ? (TMapped extends TResponse ? TResponse : TMapped) : never;
|
|
12
|
+
export type InferMapperArg<T> = T extends ResponseConfig<any, any, infer TArg> ? TArg : never;
|
|
13
|
+
export type InferMapper<T> = T extends ResponseConfig<infer TResponse, infer TMapped, infer TArg> ? MapperCallback<TResponse, TArg, TMapped> : undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Create a response configuration without a mapper
|
|
16
|
+
*/
|
|
17
|
+
export declare function create<TResponse>(): ResponseConfig<TResponse, TResponse, undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* Create a response configuration with a mapper (no args)
|
|
20
|
+
*/
|
|
21
|
+
export declare function create<TResponse, TMapped>(mapper: (data: Readonly<TResponse>) => () => TMapped): ResponseConfig<TResponse, TMapped, undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* Create a response configuration with a mapper that takes arguments
|
|
24
|
+
*/
|
|
25
|
+
export declare function create<TResponse, TMapped, TMapArg>(mapper: MapperCallback<TResponse, TMapArg, TMapped>): ResponseConfig<TResponse, TMapped, TMapArg>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI;IAChF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,CAAC,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;CACtD,CAAC;AAEF,KAAK,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AAC1E,KAAK,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC;AAGzH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,MAAM,SAAS,EAAE,MAAM,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,SAAS,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC;AAEvJ,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAE9F,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,MAAM,SAAS,EAAE,MAAM,OAAO,EAAE,MAAM,IAAI,CAAC,GAAG,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;AAEzJ;;GAEG;AACH,wBAAgB,MAAM,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAErF;;GAEG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAEhJ;;GAEG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC"}
|
package/dist/response.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"AAkCA,MAAM,UAAU,MAAM,CACpB,MAAoD;IAEpD,OAAO,EAAE,MAAM,EAAiD,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type Language = "en" | "br";
|
|
2
|
+
export interface Translations {
|
|
3
|
+
errors: {
|
|
4
|
+
requestFailed: string;
|
|
5
|
+
mapperError: string;
|
|
6
|
+
invalidErrorFormat: string;
|
|
7
|
+
undefinedParams: string;
|
|
8
|
+
};
|
|
9
|
+
builder: {
|
|
10
|
+
hostRequired: string;
|
|
11
|
+
routesRequired: string;
|
|
12
|
+
errorHandlerRequired: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare function getTranslations(language?: Language): Translations;
|
|
16
|
+
export declare function t(language?: Language): Translations;
|
|
17
|
+
//# sourceMappingURL=translations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../src/translations.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AA+BD,wBAAgB,eAAe,CAAC,QAAQ,GAAE,QAAe,GAAG,YAAY,CAEvE;AAED,wBAAgB,CAAC,CAAC,QAAQ,GAAE,QAAe,GAAG,YAAY,CAEzD"}
|