katanakit-js 2.2.1 → 2.12.9

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 (148) hide show
  1. package/README.md +72 -437
  2. package/dist/adapters/astro/astro.service.d.ts +103 -15
  3. package/dist/adapters/astro/astro.service.d.ts.map +1 -1
  4. package/dist/adapters/astro/astro.service.js +145 -75
  5. package/dist/adapters/astro/astro.service.js.map +1 -1
  6. package/dist/adapters/astro/index.d.ts +1 -1
  7. package/dist/adapters/astro/index.d.ts.map +1 -1
  8. package/dist/adapters/astro/index.js +1 -1
  9. package/dist/adapters/astro/index.js.map +1 -1
  10. package/dist/adapters/astro/rss.service.d.ts +85 -105
  11. package/dist/adapters/astro/rss.service.d.ts.map +1 -1
  12. package/dist/adapters/astro/rss.service.js +172 -168
  13. package/dist/adapters/astro/rss.service.js.map +1 -1
  14. package/dist/adapters/astro/seo.service.d.ts +10 -0
  15. package/dist/adapters/astro/seo.service.d.ts.map +1 -0
  16. package/dist/adapters/astro/seo.service.js +3 -0
  17. package/dist/adapters/astro/seo.service.js.map +1 -0
  18. package/dist/adapters/express/app.d.ts +30 -1
  19. package/dist/adapters/express/app.d.ts.map +1 -1
  20. package/dist/adapters/express/app.js +31 -3
  21. package/dist/adapters/express/app.js.map +1 -1
  22. package/dist/adapters/express/index.d.ts +2 -2
  23. package/dist/adapters/express/index.d.ts.map +1 -1
  24. package/dist/adapters/express/index.js +2 -2
  25. package/dist/adapters/express/index.js.map +1 -1
  26. package/dist/adapters/express/main.js +2 -2
  27. package/dist/adapters/express/main.js.map +1 -1
  28. package/dist/adapters/express/products.controller.d.ts +67 -8
  29. package/dist/adapters/express/products.controller.d.ts.map +1 -1
  30. package/dist/adapters/express/products.controller.js +105 -49
  31. package/dist/adapters/express/products.controller.js.map +1 -1
  32. package/dist/adapters/express/server.d.ts +37 -13
  33. package/dist/adapters/express/server.d.ts.map +1 -1
  34. package/dist/adapters/express/server.js +118 -53
  35. package/dist/adapters/express/server.js.map +1 -1
  36. package/dist/adapters/nuxt/nuxt.service.d.ts +8 -6
  37. package/dist/adapters/nuxt/nuxt.service.d.ts.map +1 -1
  38. package/dist/adapters/nuxt/nuxt.service.js +34 -10
  39. package/dist/adapters/nuxt/nuxt.service.js.map +1 -1
  40. package/dist/adapters/vue/vue.service.d.ts +5 -2
  41. package/dist/adapters/vue/vue.service.d.ts.map +1 -1
  42. package/dist/adapters/vue/vue.service.js +41 -7
  43. package/dist/adapters/vue/vue.service.js.map +1 -1
  44. package/dist/config/index.d.ts +2 -1
  45. package/dist/config/index.d.ts.map +1 -1
  46. package/dist/config/index.js +1 -1
  47. package/dist/config/index.js.map +1 -1
  48. package/dist/config/seo-meta.types.d.ts +177 -0
  49. package/dist/config/seo-meta.types.d.ts.map +1 -0
  50. package/dist/config/seo-meta.types.js +11 -0
  51. package/dist/config/seo-meta.types.js.map +1 -0
  52. package/dist/config/seo.service.d.ts +41 -58
  53. package/dist/config/seo.service.d.ts.map +1 -1
  54. package/dist/config/seo.service.js +468 -136
  55. package/dist/config/seo.service.js.map +1 -1
  56. package/dist/config/site.config.d.ts +10 -50
  57. package/dist/config/site.config.d.ts.map +1 -1
  58. package/dist/config/site.config.js +8 -36
  59. package/dist/config/site.config.js.map +1 -1
  60. package/dist/core/index.d.ts +1 -3
  61. package/dist/core/index.d.ts.map +1 -1
  62. package/dist/core/index.js +1 -3
  63. package/dist/core/index.js.map +1 -1
  64. package/dist/core/services/dates.service.d.ts +149 -22
  65. package/dist/core/services/dates.service.d.ts.map +1 -1
  66. package/dist/core/services/dates.service.js +201 -54
  67. package/dist/core/services/dates.service.js.map +1 -1
  68. package/dist/core/services/error.service.d.ts +32 -20
  69. package/dist/core/services/error.service.d.ts.map +1 -1
  70. package/dist/core/services/error.service.js +44 -32
  71. package/dist/core/services/error.service.js.map +1 -1
  72. package/dist/core/services/formatter.service.d.ts +245 -35
  73. package/dist/core/services/formatter.service.d.ts.map +1 -1
  74. package/dist/core/services/formatter.service.js +281 -57
  75. package/dist/core/services/formatter.service.js.map +1 -1
  76. package/dist/core/services/generator.service.d.ts +115 -26
  77. package/dist/core/services/generator.service.d.ts.map +1 -1
  78. package/dist/core/services/generator.service.js +191 -56
  79. package/dist/core/services/generator.service.js.map +1 -1
  80. package/dist/core/services/geometry.service.d.ts +369 -39
  81. package/dist/core/services/geometry.service.d.ts.map +1 -1
  82. package/dist/core/services/geometry.service.js +424 -66
  83. package/dist/core/services/geometry.service.js.map +1 -1
  84. package/dist/core/services/http.service.d.ts +244 -21
  85. package/dist/core/services/http.service.d.ts.map +1 -1
  86. package/dist/core/services/http.service.js +419 -98
  87. package/dist/core/services/http.service.js.map +1 -1
  88. package/dist/core/services/logger.service.d.ts +95 -29
  89. package/dist/core/services/logger.service.d.ts.map +1 -1
  90. package/dist/core/services/logger.service.js +167 -41
  91. package/dist/core/services/logger.service.js.map +1 -1
  92. package/dist/core/services/reactive.service.d.ts +146 -19
  93. package/dist/core/services/reactive.service.d.ts.map +1 -1
  94. package/dist/core/services/reactive.service.js +278 -137
  95. package/dist/core/services/reactive.service.js.map +1 -1
  96. package/dist/core/services/timing.service.d.ts +142 -20
  97. package/dist/core/services/timing.service.d.ts.map +1 -1
  98. package/dist/core/services/timing.service.js +324 -185
  99. package/dist/core/services/timing.service.js.map +1 -1
  100. package/dist/core/services/utils.service.d.ts +228 -43
  101. package/dist/core/services/utils.service.d.ts.map +1 -1
  102. package/dist/core/services/utils.service.js +305 -125
  103. package/dist/core/services/utils.service.js.map +1 -1
  104. package/dist/infrastructure/dom/dom.service.d.ts +307 -44
  105. package/dist/infrastructure/dom/dom.service.d.ts.map +1 -1
  106. package/dist/infrastructure/dom/dom.service.js +408 -129
  107. package/dist/infrastructure/dom/dom.service.js.map +1 -1
  108. package/dist/infrastructure/index.d.ts +0 -3
  109. package/dist/infrastructure/index.d.ts.map +1 -1
  110. package/dist/infrastructure/index.js +0 -3
  111. package/dist/infrastructure/index.js.map +1 -1
  112. package/dist/infrastructure/observer/observer.service.d.ts +124 -31
  113. package/dist/infrastructure/observer/observer.service.d.ts.map +1 -1
  114. package/dist/infrastructure/observer/observer.service.js +227 -131
  115. package/dist/infrastructure/observer/observer.service.js.map +1 -1
  116. package/dist/infrastructure/sensors/sensors.service.d.ts +154 -22
  117. package/dist/infrastructure/sensors/sensors.service.d.ts.map +1 -1
  118. package/dist/infrastructure/sensors/sensors.service.js +264 -112
  119. package/dist/infrastructure/sensors/sensors.service.js.map +1 -1
  120. package/dist/infrastructure/storage/storage.service.d.ts +123 -45
  121. package/dist/infrastructure/storage/storage.service.d.ts.map +1 -1
  122. package/dist/infrastructure/storage/storage.service.js +236 -66
  123. package/dist/infrastructure/storage/storage.service.js.map +1 -1
  124. package/dist/infrastructure/theme/theme.service.d.ts +93 -29
  125. package/dist/infrastructure/theme/theme.service.d.ts.map +1 -1
  126. package/dist/infrastructure/theme/theme.service.js +198 -96
  127. package/dist/infrastructure/theme/theme.service.js.map +1 -1
  128. package/dist/infrastructure/viewport/viewport.service.d.ts +233 -35
  129. package/dist/infrastructure/viewport/viewport.service.d.ts.map +1 -1
  130. package/dist/infrastructure/viewport/viewport.service.js +358 -139
  131. package/dist/infrastructure/viewport/viewport.service.js.map +1 -1
  132. package/dist/infrastructure/worker/worker.service.d.ts +84 -38
  133. package/dist/infrastructure/worker/worker.service.d.ts.map +1 -1
  134. package/dist/infrastructure/worker/worker.service.js +234 -133
  135. package/dist/infrastructure/worker/worker.service.js.map +1 -1
  136. package/dist/prisma/index.d.ts +2 -0
  137. package/dist/prisma/index.d.ts.map +1 -0
  138. package/dist/prisma/index.js +2 -0
  139. package/dist/prisma/index.js.map +1 -0
  140. package/dist/prisma/schema.json +11 -33
  141. package/dist/prisma/use-prisma.d.ts +68 -0
  142. package/dist/prisma/use-prisma.d.ts.map +1 -0
  143. package/dist/prisma/use-prisma.js +82 -0
  144. package/dist/prisma/use-prisma.js.map +1 -0
  145. package/dist/types/index.d.ts +20 -12
  146. package/dist/types/index.d.ts.map +1 -1
  147. package/package.json +124 -125
  148. package/CHANGELOG.md +0 -101
@@ -1,124 +1,445 @@
1
+ /** Module-level API registry. */
2
+ let apis = {};
1
3
  /**
2
- * Framework-agnostic HTTP client: builds safe URLs from a JSON-defined registry
3
- * and wraps `fetch` in a Safe Result. Implemented as a Facade + Singleton.
4
+ * Internal: retrieves a registered API entry or throws.
5
+ *
6
+ * @param apiName - The key of the API in the registry.
7
+ * @returns The {@link ApiEntry} for the given name.
8
+ * @throws {Error} If the API is not registered.
4
9
  */
5
- export class FetchApiManager {
6
- static instance;
7
- apis = {};
8
- constructor() { }
9
- static getInstance() {
10
- if (!FetchApiManager.instance) {
11
- FetchApiManager.instance = new FetchApiManager();
12
- }
13
- return FetchApiManager.instance;
10
+ function getApiEntry(apiName) {
11
+ const api = apis[apiName];
12
+ if (!api) {
13
+ throw new Error(`[FetchApiManager] API "${apiName}" is not registered.`);
14
14
  }
15
- useInit = (apis) => {
16
- this.apis = { ...this.apis, ...apis };
17
- };
18
- useGetApis = () => this.apis;
19
- GET_API_ENTRY = (apiName) => {
20
- const api = this.apis[apiName];
21
- if (!api) {
22
- throw new Error(`[FetchApiManager] API "${apiName}" is not registered.`);
23
- }
24
- return api;
25
- };
26
- useBuildUrl = (apiName, endpointName, options = {}) => {
27
- const { params, query, ignoreDefaultQuery = false } = options;
28
- const api = this.GET_API_ENTRY(apiName);
29
- let path = api.endpoints?.[endpointName] ?? "";
30
- if (!path) {
31
- throw new Error(`[FetchApiManager] Endpoint "${endpointName}" not found in API "${apiName}".`);
32
- }
33
- if (params) {
34
- const escapeRegex = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
35
- path = Object.entries(params).reduce((acc, [key, value]) => acc.replace(new RegExp(`:${escapeRegex(key)}\\b`, "g"), encodeURIComponent(String(value))), path);
36
- }
37
- const baseStr = api.baseUri instanceof URL ? api.baseUri.toString() : api.baseUri;
38
- const baseClean = baseStr.endsWith("/") ? baseStr.slice(0, -1) : baseStr;
39
- const pathClean = path.startsWith("/") ? path : `/${path}`;
40
- const url = new URL(`${baseClean}${pathClean}`);
41
- // Only allow http(s) to prevent SSRF and `javascript:` URLs.
42
- if (url.protocol !== "http:" && url.protocol !== "https:") {
43
- throw new Error(`[FetchApiManager] Scheme "${url.protocol}" is not allowed.`);
15
+ return api;
16
+ }
17
+ /**
18
+ * Internal: reads a Response body, attempting JSON parse for JSON content types.
19
+ *
20
+ * @param response - The fetch Response to read.
21
+ * @returns The parsed body or `null` for empty responses.
22
+ */
23
+ async function readBody(response) {
24
+ const text = await response.text();
25
+ if (!text)
26
+ return null;
27
+ const contentType = response.headers.get("content-type") ?? "";
28
+ if (contentType.includes("application/json")) {
29
+ try {
30
+ return JSON.parse(text);
44
31
  }
45
- const defaultParams = ignoreDefaultQuery ? {} : (api.defaultQueryParams?.[endpointName] ?? {});
46
- const mergedQuery = { ...defaultParams, ...query };
47
- for (const [key, value] of Object.entries(mergedQuery)) {
48
- if (value !== undefined && value !== null) {
49
- url.searchParams.set(key, String(value));
50
- }
32
+ catch {
33
+ return text;
51
34
  }
52
- return url.toString();
35
+ }
36
+ try {
37
+ return JSON.parse(text);
38
+ }
39
+ catch {
40
+ return text;
41
+ }
42
+ }
43
+ /**
44
+ * Internal: serializes a request body.
45
+ * Leaves FormData / Blob / URLSearchParams / ArrayBuffer / TypedArray /
46
+ * ReadableStream / string untouched (no forced JSON Content-Type so the
47
+ * runtime can set the multipart boundary).
48
+ *
49
+ * @param body - The body to serialize.
50
+ * @returns An object with optional `body` and `headers` for `fetch`.
51
+ */
52
+ function serializeBody(body) {
53
+ if (body === undefined)
54
+ return {};
55
+ const isRawBody = (typeof FormData !== "undefined" && body instanceof FormData) ||
56
+ (typeof Blob !== "undefined" && body instanceof Blob) ||
57
+ (typeof URLSearchParams !== "undefined" && body instanceof URLSearchParams) ||
58
+ (typeof ArrayBuffer !== "undefined" && body instanceof ArrayBuffer) ||
59
+ ArrayBuffer.isView(body) ||
60
+ (typeof ReadableStream !== "undefined" && body instanceof ReadableStream) ||
61
+ typeof body === "string";
62
+ if (isRawBody) {
63
+ return { body: body };
64
+ }
65
+ return {
66
+ headers: { "Content-Type": "application/json" },
67
+ body: JSON.stringify(body),
53
68
  };
54
- useFetch = async (apiName, endpointName, { urlOptions, ...init } = {}) => {
55
- let url = "";
56
- try {
57
- url = this.useBuildUrl(apiName, endpointName, urlOptions);
58
- const response = await fetch(url, init);
59
- if (!response.ok) {
60
- let errorDetails;
61
- try {
62
- errorDetails = await response.json();
63
- }
64
- catch {
65
- errorDetails = await response.text();
66
- }
67
- return {
68
- data: null,
69
- error: {
70
- message: `HTTP Error: ${response.statusText || "Unsuccessful response"}`,
71
- status: response.status,
72
- details: errorDetails,
73
- },
74
- url: response.url || url,
75
- status: response.status,
76
- ok: false,
77
- };
78
- }
79
- const contentType = response.headers.get("content-type");
80
- const isJson = contentType?.includes("application/json");
81
- const data = isJson ? (await response.json()) : (await response.text());
69
+ }
70
+ /**
71
+ * Registers (merges) API definitions into the client registry.
72
+ * Prefer the clearer alias {@link useInitApis}.
73
+ *
74
+ * @param apisConfig - The API definitions to merge into the registry.
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * import { useInit } from "katanakit-js";
79
+ *
80
+ * useInit({
81
+ * pokeapi: {
82
+ * baseUri: "https://pokeapi.co/api/v2",
83
+ * endpoints: { pokemonById: "/pokemon/:id/" },
84
+ * },
85
+ * });
86
+ * ```
87
+ */
88
+ export function useInit(apisConfig) {
89
+ apis = { ...apis, ...apisConfig };
90
+ }
91
+ /**
92
+ * Registers (merges) API definitions into the client registry.
93
+ *
94
+ * @param apisConfig - The API definitions to merge into the registry.
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * import { useInitApis } from "katanakit-js";
99
+ *
100
+ * useInitApis({
101
+ * pokeapi: {
102
+ * baseUri: "https://pokeapi.co/api/v2",
103
+ * endpoints: { pokemonById: "/pokemon/:id/" },
104
+ * },
105
+ * });
106
+ * ```
107
+ */
108
+ export function useInitApis(apisConfig) {
109
+ useInit(apisConfig);
110
+ }
111
+ /**
112
+ * Returns a shallow copy of the registered APIs (safe to mutate locally).
113
+ *
114
+ * @returns A shallow copy of the current API registry.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * import { useGetApis } from "katanakit-js";
119
+ *
120
+ * const apis = useGetApis();
121
+ * ```
122
+ */
123
+ export function useGetApis() {
124
+ return { ...apis };
125
+ }
126
+ /**
127
+ * Returns a shallow copy of the registered APIs.
128
+ * Alias for {@link useGetApis}.
129
+ *
130
+ * @returns A shallow copy of the current API registry.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * import { useGetApisConfig } from "katanakit-js";
135
+ *
136
+ * const apis = useGetApisConfig();
137
+ * ```
138
+ */
139
+ export function useGetApisConfig() {
140
+ return useGetApis();
141
+ }
142
+ /**
143
+ * Builds a safe http(s) URL from a registered API + endpoint.
144
+ *
145
+ * @param apiName - The registered API key.
146
+ * @param endpointName - The endpoint key within the API.
147
+ * @param options - Optional URL building options (params, query, ignoreDefaultQuery).
148
+ * @returns The fully constructed URL string.
149
+ * @throws {Error} If the API or endpoint is not registered, or the URL scheme is not http(s).
150
+ *
151
+ * @example
152
+ * ```ts
153
+ * import { useBuildUrl } from "katanakit-js";
154
+ *
155
+ * const url = useBuildUrl("pokeapi", "pokemonById", { params: { id: 25 } });
156
+ * ```
157
+ */
158
+ export function useBuildUrl(apiName, endpointName, options = {}) {
159
+ const { params, query, ignoreDefaultQuery = false } = options;
160
+ const api = getApiEntry(apiName);
161
+ let path = api.endpoints?.[endpointName] ?? "";
162
+ if (!path) {
163
+ throw new Error(`[FetchApiManager] Endpoint "${endpointName}" not found in API "${apiName}".`);
164
+ }
165
+ if (params) {
166
+ const escapeRegex = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
167
+ path = Object.entries(params).reduce((acc, [key, value]) => acc.replace(new RegExp(`:${escapeRegex(key)}\\b`, "g"), encodeURIComponent(String(value))), path);
168
+ }
169
+ const baseStr = api.baseUri instanceof URL ? api.baseUri.toString() : api.baseUri;
170
+ const baseClean = baseStr.endsWith("/") ? baseStr.slice(0, -1) : baseStr;
171
+ const pathClean = path.startsWith("/") ? path : `/${path}`;
172
+ const url = new URL(`${baseClean}${pathClean}`);
173
+ // Only allow http(s) to prevent SSRF and `javascript:` URLs.
174
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
175
+ throw new Error(`[FetchApiManager] Scheme "${url.protocol}" is not allowed.`);
176
+ }
177
+ const defaultParams = ignoreDefaultQuery ? {} : (api.defaultQueryParams?.[endpointName] ?? {});
178
+ const mergedQuery = { ...defaultParams, ...query };
179
+ for (const [key, value] of Object.entries(mergedQuery)) {
180
+ if (value !== undefined && value !== null) {
181
+ url.searchParams.set(key, String(value));
182
+ }
183
+ }
184
+ return url.toString();
185
+ }
186
+ /**
187
+ * Builds a safe http(s) URL from a registered API + endpoint.
188
+ * Alias for {@link useBuildUrl}.
189
+ *
190
+ * @param apiName - The registered API key.
191
+ * @param endpointName - The endpoint key within the API.
192
+ * @param options - Optional URL building options.
193
+ * @returns The fully constructed URL string.
194
+ *
195
+ * @example
196
+ * ```ts
197
+ * import { useBuildApiUrl } from "katanakit-js";
198
+ *
199
+ * const url = useBuildApiUrl("pokeapi", "pokemonById", { params: { id: 25 } });
200
+ * ```
201
+ */
202
+ export function useBuildApiUrl(apiName, endpointName, options = {}) {
203
+ return useBuildUrl(apiName, endpointName, options);
204
+ }
205
+ /**
206
+ * Fetches a registered endpoint and returns a Safe Result.
207
+ *
208
+ * @param apiName - The registered API key.
209
+ * @param endpointName - The endpoint key within the API.
210
+ * @param options - Optional fetch options (method, headers, body, urlOptions).
211
+ * @returns A {@link FetchResult} with data or error.
212
+ *
213
+ * @example
214
+ * ```ts
215
+ * import { useFetch } from "katanakit-js";
216
+ *
217
+ * const result = await useFetch("pokeapi", "pokemonById", {
218
+ * method: "GET",
219
+ * urlOptions: { params: { id: 25 } },
220
+ * });
221
+ * if (result.ok) console.log(result.data);
222
+ * ```
223
+ */
224
+ export async function useFetch(apiName, endpointName, { urlOptions, ...init } = {}) {
225
+ let url = "";
226
+ try {
227
+ url = useBuildUrl(apiName, endpointName, urlOptions);
228
+ }
229
+ catch (err) {
230
+ const message = err instanceof Error ? err.message : String(err);
231
+ return {
232
+ data: null,
233
+ error: {
234
+ message: `Config Error: ${message}`,
235
+ status: 0,
236
+ },
237
+ url,
238
+ status: 0,
239
+ ok: false,
240
+ };
241
+ }
242
+ try {
243
+ const response = await fetch(url, init);
244
+ if (!response.ok) {
245
+ const errorDetails = await readBody(response);
82
246
  return {
83
- data,
84
- error: null,
247
+ data: null,
248
+ error: {
249
+ message: `HTTP Error: ${response.statusText || "Unsuccessful response"}`,
250
+ status: response.status,
251
+ details: errorDetails,
252
+ },
85
253
  url: response.url || url,
86
254
  status: response.status,
87
- ok: true,
255
+ ok: false,
88
256
  };
89
257
  }
90
- catch (err) {
91
- const message = err instanceof Error ? err.message : String(err);
258
+ // 204 No Content and empty bodies are valid success responses.
259
+ if (response.status === 204) {
92
260
  return {
93
261
  data: null,
94
- error: {
95
- message: `Network/Client Error: ${message}`,
96
- status: 0,
97
- },
98
- url,
99
- status: 0,
100
- ok: false,
262
+ error: null,
263
+ url: response.url || url,
264
+ status: 204,
265
+ ok: true,
101
266
  };
102
267
  }
103
- };
104
- useGet = async (apiName, endpointName, urlOptions) => this.useFetch(apiName, endpointName, { method: "GET", urlOptions });
105
- usePost = async (apiName, endpointName, body, urlOptions) => this.useFetch(apiName, endpointName, {
268
+ const body = await readBody(response);
269
+ return {
270
+ data: body,
271
+ error: null,
272
+ url: response.url || url,
273
+ status: response.status,
274
+ ok: true,
275
+ };
276
+ }
277
+ catch (err) {
278
+ const message = err instanceof Error ? err.message : String(err);
279
+ return {
280
+ data: null,
281
+ error: {
282
+ message: `Network/Client Error: ${message}`,
283
+ status: 0,
284
+ },
285
+ url,
286
+ status: 0,
287
+ ok: false,
288
+ };
289
+ }
290
+ }
291
+ /**
292
+ * Fetches a registered endpoint and returns a Safe Result.
293
+ * Alias for {@link useFetch}.
294
+ *
295
+ * @param apiName - The registered API key.
296
+ * @param endpointName - The endpoint key within the API.
297
+ * @param options - Optional fetch options.
298
+ * @returns A {@link FetchResult} with data or error.
299
+ *
300
+ * @example
301
+ * ```ts
302
+ * import { useFetchApi } from "katanakit-js";
303
+ *
304
+ * const result = await useFetchApi("pokeapi", "pokemonById", {
305
+ * method: "GET",
306
+ * urlOptions: { params: { id: 25 } },
307
+ * });
308
+ * if (result.ok) console.log(result.data);
309
+ * ```
310
+ */
311
+ export async function useFetchApi(apiName, endpointName, options) {
312
+ return useFetch(apiName, endpointName, options);
313
+ }
314
+ /**
315
+ * GET helper over a registered API endpoint.
316
+ *
317
+ * @param apiName - The registered API key.
318
+ * @param endpointName - The endpoint key within the API.
319
+ * @param urlOptions - Optional URL building options.
320
+ * @returns A {@link FetchResult} with data or error.
321
+ *
322
+ * @example
323
+ * ```ts
324
+ * import { useGet } from "katanakit-js";
325
+ *
326
+ * const result = await useGet<{ name: string }>("pokeapi", "pokemonById", {
327
+ * params: { id: 25 },
328
+ * });
329
+ * ```
330
+ */
331
+ export async function useGet(apiName, endpointName, urlOptions) {
332
+ return useFetch(apiName, endpointName, { method: "GET", urlOptions });
333
+ }
334
+ /**
335
+ * GET helper over a registered API endpoint.
336
+ * Alias for {@link useGet}.
337
+ *
338
+ * @param apiName - The registered API key.
339
+ * @param endpointName - The endpoint key within the API.
340
+ * @param urlOptions - Optional URL building options.
341
+ * @returns A {@link FetchResult} with data or error.
342
+ *
343
+ * @example
344
+ * ```ts
345
+ * import { useGetApi } from "katanakit-js";
346
+ *
347
+ * const result = await useGetApi<{ name: string }>("pokeapi", "pokemonById", {
348
+ * params: { id: 25 },
349
+ * });
350
+ * ```
351
+ */
352
+ export async function useGetApi(apiName, endpointName, urlOptions) {
353
+ return useGet(apiName, endpointName, urlOptions);
354
+ }
355
+ /**
356
+ * POST helper over a registered API endpoint.
357
+ *
358
+ * @param apiName - The registered API key.
359
+ * @param endpointName - The endpoint key within the API.
360
+ * @param body - Optional request body (auto-serialized to JSON unless raw).
361
+ * @param urlOptions - Optional URL building options.
362
+ * @returns A {@link FetchResult} with data or error.
363
+ *
364
+ * @example
365
+ * ```ts
366
+ * import { usePost } from "katanakit-js";
367
+ *
368
+ * const result = await usePost("pokeapi", "createPokemon", { name: "Pikachu" });
369
+ * ```
370
+ */
371
+ export async function usePost(apiName, endpointName, body, urlOptions) {
372
+ return useFetch(apiName, endpointName, {
106
373
  method: "POST",
107
- headers: { "Content-Type": "application/json" },
108
- body: body !== undefined ? JSON.stringify(body) : undefined,
374
+ ...serializeBody(body),
109
375
  urlOptions,
110
376
  });
111
- usePut = async (apiName, endpointName, body, urlOptions) => this.useFetch(apiName, endpointName, {
377
+ }
378
+ /**
379
+ * PUT helper over a registered API endpoint.
380
+ *
381
+ * @param apiName - The registered API key.
382
+ * @param endpointName - The endpoint key within the API.
383
+ * @param body - Optional request body (auto-serialized to JSON unless raw).
384
+ * @param urlOptions - Optional URL building options.
385
+ * @returns A {@link FetchResult} with data or error.
386
+ *
387
+ * @example
388
+ * ```ts
389
+ * import { usePut } from "katanakit-js";
390
+ *
391
+ * const result = await usePut("pokeapi", "updatePokemon", { name: "Raichu" }, { params: { id: 25 } });
392
+ * ```
393
+ */
394
+ export async function usePut(apiName, endpointName, body, urlOptions) {
395
+ return useFetch(apiName, endpointName, {
112
396
  method: "PUT",
113
- headers: { "Content-Type": "application/json" },
114
- body: body !== undefined ? JSON.stringify(body) : undefined,
397
+ ...serializeBody(body),
115
398
  urlOptions,
116
399
  });
117
- useDelete = async (apiName, endpointName, urlOptions) => this.useFetch(apiName, endpointName, {
400
+ }
401
+ /**
402
+ * PATCH helper over a registered API endpoint.
403
+ *
404
+ * @param apiName - The registered API key.
405
+ * @param endpointName - The endpoint key within the API.
406
+ * @param body - Optional request body (auto-serialized to JSON unless raw).
407
+ * @param urlOptions - Optional URL building options.
408
+ * @returns A {@link FetchResult} with data or error.
409
+ *
410
+ * @example
411
+ * ```ts
412
+ * import { usePatch } from "katanakit-js";
413
+ *
414
+ * const result = await usePatch("pokeapi", "updatePokemon", { name: "Raichu" }, { params: { id: 25 } });
415
+ * ```
416
+ */
417
+ export async function usePatch(apiName, endpointName, body, urlOptions) {
418
+ return useFetch(apiName, endpointName, {
419
+ method: "PATCH",
420
+ ...serializeBody(body),
421
+ urlOptions,
422
+ });
423
+ }
424
+ /**
425
+ * DELETE helper over a registered API endpoint.
426
+ *
427
+ * @param apiName - The registered API key.
428
+ * @param endpointName - The endpoint key within the API.
429
+ * @param urlOptions - Optional URL building options.
430
+ * @returns A {@link FetchResult} with data or error.
431
+ *
432
+ * @example
433
+ * ```ts
434
+ * import { useDelete } from "katanakit-js";
435
+ *
436
+ * const result = await useDelete("pokeapi", "deletePokemon", { params: { id: 25 } });
437
+ * ```
438
+ */
439
+ export async function useDelete(apiName, endpointName, urlOptions) {
440
+ return useFetch(apiName, endpointName, {
118
441
  method: "DELETE",
119
442
  urlOptions,
120
443
  });
121
444
  }
122
- // Singleton instance and destructured exports.
123
- export const { useFetch, useGetApis, useInit, useGet, usePost, useDelete, usePut, useBuildUrl, } = FetchApiManager.getInstance();
124
445
  //# sourceMappingURL=http.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.service.js","sourceRoot":"","sources":["../../../src/core/services/http.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.service.js","sourceRoot":"","sources":["../../../src/core/services/http.service.ts"],"names":[],"mappings":"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"}