katanakit-js 2.1.5

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 (153) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/LICENSE +22 -0
  3. package/README.md +446 -0
  4. package/dist/adapters/astro/astro.service.d.ts +18 -0
  5. package/dist/adapters/astro/astro.service.d.ts.map +1 -0
  6. package/dist/adapters/astro/astro.service.js +83 -0
  7. package/dist/adapters/astro/astro.service.js.map +1 -0
  8. package/dist/adapters/astro/index.d.ts +4 -0
  9. package/dist/adapters/astro/index.d.ts.map +1 -0
  10. package/dist/adapters/astro/index.js +4 -0
  11. package/dist/adapters/astro/index.js.map +1 -0
  12. package/dist/adapters/astro/rss.service.d.ts +115 -0
  13. package/dist/adapters/astro/rss.service.d.ts.map +1 -0
  14. package/dist/adapters/astro/rss.service.js +231 -0
  15. package/dist/adapters/astro/rss.service.js.map +1 -0
  16. package/dist/adapters/express/app.d.ts +4 -0
  17. package/dist/adapters/express/app.d.ts.map +1 -0
  18. package/dist/adapters/express/app.js +4 -0
  19. package/dist/adapters/express/app.js.map +1 -0
  20. package/dist/adapters/express/index.d.ts +5 -0
  21. package/dist/adapters/express/index.d.ts.map +1 -0
  22. package/dist/adapters/express/index.js +5 -0
  23. package/dist/adapters/express/index.js.map +1 -0
  24. package/dist/adapters/express/main.d.ts +2 -0
  25. package/dist/adapters/express/main.d.ts.map +1 -0
  26. package/dist/adapters/express/main.js +3 -0
  27. package/dist/adapters/express/main.js.map +1 -0
  28. package/dist/adapters/express/products.controller.d.ts +10 -0
  29. package/dist/adapters/express/products.controller.d.ts.map +1 -0
  30. package/dist/adapters/express/products.controller.js +53 -0
  31. package/dist/adapters/express/products.controller.js.map +1 -0
  32. package/dist/adapters/express/router.d.ts +3 -0
  33. package/dist/adapters/express/router.d.ts.map +1 -0
  34. package/dist/adapters/express/router.js +14 -0
  35. package/dist/adapters/express/router.js.map +1 -0
  36. package/dist/adapters/express/server.d.ts +15 -0
  37. package/dist/adapters/express/server.d.ts.map +1 -0
  38. package/dist/adapters/express/server.js +59 -0
  39. package/dist/adapters/express/server.js.map +1 -0
  40. package/dist/adapters/index.d.ts +2 -0
  41. package/dist/adapters/index.d.ts.map +1 -0
  42. package/dist/adapters/index.js +2 -0
  43. package/dist/adapters/index.js.map +1 -0
  44. package/dist/adapters/nuxt/index.d.ts +2 -0
  45. package/dist/adapters/nuxt/index.d.ts.map +1 -0
  46. package/dist/adapters/nuxt/index.js +2 -0
  47. package/dist/adapters/nuxt/index.js.map +1 -0
  48. package/dist/adapters/nuxt/nuxt.service.d.ts +83 -0
  49. package/dist/adapters/nuxt/nuxt.service.d.ts.map +1 -0
  50. package/dist/adapters/nuxt/nuxt.service.js +104 -0
  51. package/dist/adapters/nuxt/nuxt.service.js.map +1 -0
  52. package/dist/config/index.d.ts +3 -0
  53. package/dist/config/index.d.ts.map +1 -0
  54. package/dist/config/index.js +3 -0
  55. package/dist/config/index.js.map +1 -0
  56. package/dist/config/seo.service.d.ts +72 -0
  57. package/dist/config/seo.service.d.ts.map +1 -0
  58. package/dist/config/seo.service.js +190 -0
  59. package/dist/config/seo.service.js.map +1 -0
  60. package/dist/config/site.config.d.ts +89 -0
  61. package/dist/config/site.config.d.ts.map +1 -0
  62. package/dist/config/site.config.js +59 -0
  63. package/dist/config/site.config.js.map +1 -0
  64. package/dist/core/index.d.ts +13 -0
  65. package/dist/core/index.d.ts.map +1 -0
  66. package/dist/core/index.js +13 -0
  67. package/dist/core/index.js.map +1 -0
  68. package/dist/core/services/dates.service.d.ts +24 -0
  69. package/dist/core/services/dates.service.d.ts.map +1 -0
  70. package/dist/core/services/dates.service.js +64 -0
  71. package/dist/core/services/dates.service.js.map +1 -0
  72. package/dist/core/services/error.service.d.ts +25 -0
  73. package/dist/core/services/error.service.d.ts.map +1 -0
  74. package/dist/core/services/error.service.js +39 -0
  75. package/dist/core/services/error.service.js.map +1 -0
  76. package/dist/core/services/formatter.service.d.ts +36 -0
  77. package/dist/core/services/formatter.service.d.ts.map +1 -0
  78. package/dist/core/services/formatter.service.js +64 -0
  79. package/dist/core/services/formatter.service.js.map +1 -0
  80. package/dist/core/services/generator.service.d.ts +34 -0
  81. package/dist/core/services/generator.service.d.ts.map +1 -0
  82. package/dist/core/services/generator.service.js +83 -0
  83. package/dist/core/services/generator.service.js.map +1 -0
  84. package/dist/core/services/geometry.service.d.ts +45 -0
  85. package/dist/core/services/geometry.service.d.ts.map +1 -0
  86. package/dist/core/services/geometry.service.js +100 -0
  87. package/dist/core/services/geometry.service.js.map +1 -0
  88. package/dist/core/services/http.service.d.ts +22 -0
  89. package/dist/core/services/http.service.d.ts.map +1 -0
  90. package/dist/core/services/http.service.js +124 -0
  91. package/dist/core/services/http.service.js.map +1 -0
  92. package/dist/core/services/logger.service.d.ts +36 -0
  93. package/dist/core/services/logger.service.d.ts.map +1 -0
  94. package/dist/core/services/logger.service.js +60 -0
  95. package/dist/core/services/logger.service.js.map +1 -0
  96. package/dist/core/services/reactive.service.d.ts +22 -0
  97. package/dist/core/services/reactive.service.d.ts.map +1 -0
  98. package/dist/core/services/reactive.service.js +167 -0
  99. package/dist/core/services/reactive.service.js.map +1 -0
  100. package/dist/core/services/timing.service.d.ts +23 -0
  101. package/dist/core/services/timing.service.d.ts.map +1 -0
  102. package/dist/core/services/timing.service.js +217 -0
  103. package/dist/core/services/timing.service.js.map +1 -0
  104. package/dist/core/services/utils.service.d.ts +44 -0
  105. package/dist/core/services/utils.service.d.ts.map +1 -0
  106. package/dist/core/services/utils.service.js +143 -0
  107. package/dist/core/services/utils.service.js.map +1 -0
  108. package/dist/index.d.ts +6 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +6 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/infrastructure/dom/dom.service.d.ts +49 -0
  113. package/dist/infrastructure/dom/dom.service.d.ts.map +1 -0
  114. package/dist/infrastructure/dom/dom.service.js +133 -0
  115. package/dist/infrastructure/dom/dom.service.js.map +1 -0
  116. package/dist/infrastructure/index.d.ts +11 -0
  117. package/dist/infrastructure/index.d.ts.map +1 -0
  118. package/dist/infrastructure/index.js +11 -0
  119. package/dist/infrastructure/index.js.map +1 -0
  120. package/dist/infrastructure/observer/observer.service.d.ts +34 -0
  121. package/dist/infrastructure/observer/observer.service.d.ts.map +1 -0
  122. package/dist/infrastructure/observer/observer.service.js +145 -0
  123. package/dist/infrastructure/observer/observer.service.js.map +1 -0
  124. package/dist/infrastructure/sensors/sensors.service.d.ts +25 -0
  125. package/dist/infrastructure/sensors/sensors.service.d.ts.map +1 -0
  126. package/dist/infrastructure/sensors/sensors.service.js +133 -0
  127. package/dist/infrastructure/sensors/sensors.service.js.map +1 -0
  128. package/dist/infrastructure/storage/storage.service.d.ts +48 -0
  129. package/dist/infrastructure/storage/storage.service.d.ts.map +1 -0
  130. package/dist/infrastructure/storage/storage.service.js +108 -0
  131. package/dist/infrastructure/storage/storage.service.js.map +1 -0
  132. package/dist/infrastructure/theme/theme.service.d.ts +30 -0
  133. package/dist/infrastructure/theme/theme.service.d.ts.map +1 -0
  134. package/dist/infrastructure/theme/theme.service.js +104 -0
  135. package/dist/infrastructure/theme/theme.service.js.map +1 -0
  136. package/dist/infrastructure/viewport/viewport.service.d.ts +38 -0
  137. package/dist/infrastructure/viewport/viewport.service.d.ts.map +1 -0
  138. package/dist/infrastructure/viewport/viewport.service.js +145 -0
  139. package/dist/infrastructure/viewport/viewport.service.js.map +1 -0
  140. package/dist/infrastructure/worker/worker.service.d.ts +42 -0
  141. package/dist/infrastructure/worker/worker.service.d.ts.map +1 -0
  142. package/dist/infrastructure/worker/worker.service.js +151 -0
  143. package/dist/infrastructure/worker/worker.service.js.map +1 -0
  144. package/dist/prisma/db.d.ts +4 -0
  145. package/dist/prisma/db.d.ts.map +1 -0
  146. package/dist/prisma/db.js +12 -0
  147. package/dist/prisma/db.js.map +1 -0
  148. package/dist/prisma/schema.json +411 -0
  149. package/dist/types/index.d.ts +436 -0
  150. package/dist/types/index.d.ts.map +1 -0
  151. package/dist/types/index.js +2 -0
  152. package/dist/types/index.js.map +1 -0
  153. package/package.json +117 -0
@@ -0,0 +1,100 @@
1
+ function formatGeometry(value, options = {}) {
2
+ const { locale = "en", digits = 2, unit } = options;
3
+ const formatted = new Intl.NumberFormat(locale, {
4
+ maximumFractionDigits: digits,
5
+ minimumFractionDigits: digits,
6
+ }).format(value);
7
+ return unit ? `${formatted} ${unit}` : formatted;
8
+ }
9
+ /** Area calculations for geometric shapes. */
10
+ export class GeometryArea {
11
+ constructor() { }
12
+ static useRectangle(width, height, options) {
13
+ return formatGeometry(width * height, options);
14
+ }
15
+ static useSquare(side, options) {
16
+ return formatGeometry(side ** 2, options);
17
+ }
18
+ static useTriangle(base, height, options) {
19
+ return formatGeometry((base * height) / 2, options);
20
+ }
21
+ static useCircle(radius, options) {
22
+ return formatGeometry(Math.PI * radius ** 2, options);
23
+ }
24
+ static useTrapezoid(parallelSide1, parallelSide2, height, options) {
25
+ return formatGeometry(((parallelSide1 + parallelSide2) * height) / 2, options);
26
+ }
27
+ static useHexagon(side, options) {
28
+ return formatGeometry(((3 * Math.sqrt(3)) / 2) * side ** 2, options);
29
+ }
30
+ static useEllipse(semiMajor, semiMinor, options) {
31
+ return formatGeometry(Math.PI * semiMajor * semiMinor, options);
32
+ }
33
+ static useParallelogram(base, height, options) {
34
+ return formatGeometry(base * height, options);
35
+ }
36
+ }
37
+ /** Perimeter calculations for geometric shapes. */
38
+ export class GeometryPerimeter {
39
+ constructor() { }
40
+ static useRectangle(width, height, options) {
41
+ return formatGeometry(2 * (width + height), options);
42
+ }
43
+ static useSquare(side, options) {
44
+ return formatGeometry(4 * side, options);
45
+ }
46
+ static useTriangle(side1, side2, side3, options) {
47
+ return formatGeometry(side1 + side2 + side3, options);
48
+ }
49
+ static useCircle(radius, options) {
50
+ return formatGeometry(2 * Math.PI * radius, options);
51
+ }
52
+ static useHexagon(side, options) {
53
+ return formatGeometry(6 * side, options);
54
+ }
55
+ static useTrapezoid(side1, side2, side3, side4, options) {
56
+ return formatGeometry(side1 + side2 + side3 + side4, options);
57
+ }
58
+ static useEllipse(semiMajor, semiMinor, options) {
59
+ const a = semiMajor;
60
+ const b = semiMinor;
61
+ const h = (a - b) ** 2 / (a + b) ** 2;
62
+ const perimeter = Math.PI * (a + b) * (1 + (3 * h) / (10 + Math.sqrt(4 - 3 * h)));
63
+ return formatGeometry(perimeter, options);
64
+ }
65
+ static useParallelogram(side1, side2, options) {
66
+ return formatGeometry(2 * (side1 + side2), options);
67
+ }
68
+ }
69
+ /** Volume calculations for 3D geometric shapes. */
70
+ export class GeometryVolume {
71
+ constructor() { }
72
+ static useCube(side, options) {
73
+ return formatGeometry(side ** 3, options);
74
+ }
75
+ static useBox(length, width, height, options) {
76
+ return formatGeometry(length * width * height, options);
77
+ }
78
+ static useSphere(radius, options) {
79
+ return formatGeometry((4 / 3) * Math.PI * radius ** 3, options);
80
+ }
81
+ static useCylinder(radius, height, options) {
82
+ return formatGeometry(Math.PI * radius ** 2 * height, options);
83
+ }
84
+ static useCone(radius, height, options) {
85
+ return formatGeometry((1 / 3) * Math.PI * radius ** 2 * height, options);
86
+ }
87
+ static usePyramid(baseArea, height, options) {
88
+ return formatGeometry((1 / 3) * baseArea * height, options);
89
+ }
90
+ }
91
+ /**
92
+ * Consolidated geometry utilities namespace.
93
+ * Groups area, perimeter and volume calculations.
94
+ */
95
+ export const GeometryUtils = {
96
+ area: GeometryArea,
97
+ perimeter: GeometryPerimeter,
98
+ volume: GeometryVolume,
99
+ };
100
+ //# sourceMappingURL=geometry.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.service.js","sourceRoot":"","sources":["../../../src/core/services/geometry.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ApisConfig, FetchOptions, FetchResult, IFetchApiManager, UrlOptions } from "../../types/index.js";
2
+ /**
3
+ * Framework-agnostic HTTP client: builds safe URLs from a JSON-defined registry
4
+ * and wraps `fetch` in a Safe Result. Implemented as a Facade + Singleton.
5
+ */
6
+ export declare class FetchApiManager implements IFetchApiManager {
7
+ private static instance;
8
+ private apis;
9
+ private constructor();
10
+ static getInstance(): FetchApiManager;
11
+ useInit: (apis: ApisConfig) => void;
12
+ useGetApis: () => ApisConfig;
13
+ private GET_API_ENTRY;
14
+ useBuildUrl: (apiName: string, endpointName: string, options?: UrlOptions) => string;
15
+ useFetch: <T = unknown>(apiName: string, endpointName: string, { urlOptions, ...init }?: FetchOptions) => Promise<FetchResult<T>>;
16
+ useGet: <T = unknown>(apiName: string, endpointName: string, urlOptions?: UrlOptions) => Promise<FetchResult<T>>;
17
+ usePost: <T = unknown>(apiName: string, endpointName: string, body?: unknown, urlOptions?: UrlOptions) => Promise<FetchResult<T>>;
18
+ usePut: <T = unknown>(apiName: string, endpointName: string, body?: unknown, urlOptions?: UrlOptions) => Promise<FetchResult<T>>;
19
+ useDelete: <T = unknown>(apiName: string, endpointName: string, urlOptions?: UrlOptions) => Promise<FetchResult<T>>;
20
+ }
21
+ export declare const useFetch: <T = unknown>(apiName: string, endpointName: string, { urlOptions, ...init }?: FetchOptions) => Promise<FetchResult<T>>, useGetApis: () => ApisConfig, useInit: (apis: ApisConfig) => void, useGet: <T = unknown>(apiName: string, endpointName: string, urlOptions?: UrlOptions) => Promise<FetchResult<T>>, usePost: <T = unknown>(apiName: string, endpointName: string, body?: unknown, urlOptions?: UrlOptions) => Promise<FetchResult<T>>, useDelete: <T = unknown>(apiName: string, endpointName: string, urlOptions?: UrlOptions) => Promise<FetchResult<T>>, usePut: <T = unknown>(apiName: string, endpointName: string, body?: unknown, urlOptions?: UrlOptions) => Promise<FetchResult<T>>, useBuildUrl: (apiName: string, endpointName: string, options?: UrlOptions) => string;
22
+ //# sourceMappingURL=http.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/http.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IACzC,OAAO,CAAC,IAAI,CAAkB;IAE9B,OAAO,eAAiB;IAExB,OAAc,WAAW,IAAI,eAAe,CAK3C;IAEM,OAAO,SAAU,UAAU,KAAG,IAAI,CAEvC;IAEK,UAAU,QAAO,UAAU,CAAc;IAEhD,OAAO,CAAC,aAAa,CAMnB;IAEK,WAAW,YAAa,MAAM,gBAAgB,MAAM,YAAW,UAAU,KAAQ,MAAM,CAuC5F;IAEK,QAAQ,GAAU,CAAC,GAAG,OAAO,WAC1B,MAAM,gBACD,MAAM,4BACK,YAAY,KACnC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAoDxB;IAEK,MAAM,GAAU,CAAC,GAAG,OAAO,WACxB,MAAM,gBACD,MAAM,eACP,UAAU,KACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAC8C;IAEjE,OAAO,GAAU,CAAC,GAAG,OAAO,WACzB,MAAM,gBACD,MAAM,SACb,OAAO,eACD,UAAU,KACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAMtB;IAEG,MAAM,GAAU,CAAC,GAAG,OAAO,WACxB,MAAM,gBACD,MAAM,SACb,OAAO,eACD,UAAU,KACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAMtB;IAEG,SAAS,GAAU,CAAC,GAAG,OAAO,WAC3B,MAAM,gBACD,MAAM,eACP,UAAU,KACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAItB;CACJ;AAGD,eAAO,MACN,QAAQ,GAxGiB,CAAC,qBAChB,MAAM,gBACD,MAAM,4BACK,YAAY,8BAsGtC,UAAU,QA5Jc,UAAU,EA6JlC,OAAO,SAjKiB,UAAU,KAAG,IAAI,EAkKzC,MAAM,GAjDiB,CAAC,qBACd,MAAM,gBACD,MAAM,eACP,UAAU,8BA+CxB,OAAO,GA3CiB,CAAC,qBACf,MAAM,gBACD,MAAM,SACb,OAAO,eACD,UAAU,8BAwCxB,SAAS,GAlBiB,CAAC,qBACjB,MAAM,gBACD,MAAM,eACP,UAAU,8BAgBxB,MAAM,GAhCiB,CAAC,qBACd,MAAM,gBACD,MAAM,SACb,OAAO,eACD,UAAU,8BA6BxB,WAAW,YAxJoB,MAAM,gBAAgB,MAAM,YAAW,UAAU,KAAQ,MAyJvC,CAAC"}
@@ -0,0 +1,124 @@
1
+ /**
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
+ */
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;
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.`);
44
+ }
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
+ }
51
+ }
52
+ return url.toString();
53
+ };
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());
82
+ return {
83
+ data,
84
+ error: null,
85
+ url: response.url || url,
86
+ status: response.status,
87
+ ok: true,
88
+ };
89
+ }
90
+ catch (err) {
91
+ const message = err instanceof Error ? err.message : String(err);
92
+ return {
93
+ data: null,
94
+ error: {
95
+ message: `Network/Client Error: ${message}`,
96
+ status: 0,
97
+ },
98
+ url,
99
+ status: 0,
100
+ ok: false,
101
+ };
102
+ }
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, {
106
+ method: "POST",
107
+ headers: { "Content-Type": "application/json" },
108
+ body: body !== undefined ? JSON.stringify(body) : undefined,
109
+ urlOptions,
110
+ });
111
+ usePut = async (apiName, endpointName, body, urlOptions) => this.useFetch(apiName, endpointName, {
112
+ method: "PUT",
113
+ headers: { "Content-Type": "application/json" },
114
+ body: body !== undefined ? JSON.stringify(body) : undefined,
115
+ urlOptions,
116
+ });
117
+ useDelete = async (apiName, endpointName, urlOptions) => this.useFetch(apiName, endpointName, {
118
+ method: "DELETE",
119
+ urlOptions,
120
+ });
121
+ }
122
+ // Singleton instance and destructured exports.
123
+ export const { useFetch, useGetApis, useInit, useGet, usePost, useDelete, usePut, useBuildUrl, } = FetchApiManager.getInstance();
124
+ //# sourceMappingURL=http.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.service.js","sourceRoot":"","sources":["../../../src/core/services/http.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { LogLevel, LogStrategy } from "../../types/index.js";
2
+ /**
3
+ * Concrete strategy: native console output.
4
+ */
5
+ export declare class ConsoleStrategy implements LogStrategy {
6
+ useOutput(level: LogLevel, message: string, data?: unknown): void;
7
+ }
8
+ /**
9
+ * Singleton context: holds the active strategy and keeps `this` bound through
10
+ * arrow-function methods so destructured exports remain safe.
11
+ */
12
+ export declare class LoggerService {
13
+ private static instance;
14
+ private strategy;
15
+ private constructor();
16
+ static getInstance(): LoggerService;
17
+ useSetStrategy: (strategy: LogStrategy) => void;
18
+ /**
19
+ * Overloads allow:
20
+ * - message only: `useLog("message")`
21
+ * - message + data: `useLog("message", { id: 1 })`
22
+ * - level + message + data: `useLog("error", "something failed", { code: 500 })`
23
+ */
24
+ useLog: {
25
+ (message: string, data?: unknown): void;
26
+ (level: LogLevel, message: string, data?: unknown): void;
27
+ };
28
+ useError: (message: string, data?: unknown) => void;
29
+ useClear: () => void;
30
+ useTable: (data: unknown) => void;
31
+ }
32
+ export declare const useClear: () => void, useLog: {
33
+ (message: string, data?: unknown): void;
34
+ (level: LogLevel, message: string, data?: unknown): void;
35
+ }, useError: (message: string, data?: unknown) => void, useTable: (data: unknown) => void, useSetStrategy: (strategy: LogStrategy) => void;
36
+ //# sourceMappingURL=logger.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/logger.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElE;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IAClD,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAMhE;CACD;AAED;;;GAGG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAc;IAE9B,OAAO,eAEN;IAED,OAAc,WAAW,IAAI,aAAa,CAKzC;IAEM,cAAc,aAAc,WAAW,KAAG,IAAI,CAEnD;IAEF;;;;;OAKG;IACI,MAAM,EAAE;QACd,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QACxC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;KACzD,CAWC;IAEK,QAAQ,YAAa,MAAM,SAAS,OAAO,KAAG,IAAI,CAEvD;IAEK,QAAQ,QAAO,IAAI,CAExB;IAEK,QAAQ,SAAU,OAAO,KAAG,IAAI,CAErC;CACF;AAGD,eAAO,MAAQ,QAAQ,QAVA,IAAI,EAUF,MAAM;cA7BnB,MAAM,SAAS,OAAO,GAAG,IAAI;YAC/B,QAAQ,WAAW,MAAM,SAAS,OAAO,GAAG,IAAI;GA4BzB,QAAQ,YAdZ,MAAM,SAAS,OAAO,KAAG,IAAI,EAcf,QAAQ,SANzB,OAAO,KAAG,IAAI,EAMa,cAAc,aAxC/B,WAAW,KAAG,IAyCtB,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Concrete strategy: native console output.
3
+ */
4
+ export class ConsoleStrategy {
5
+ useOutput(level, message, data) {
6
+ if (data !== undefined) {
7
+ console[level](`[${level.toUpperCase()}] ${message}`, data);
8
+ return;
9
+ }
10
+ console[level](`[${level.toUpperCase()}] ${message}`);
11
+ }
12
+ }
13
+ /**
14
+ * Singleton context: holds the active strategy and keeps `this` bound through
15
+ * arrow-function methods so destructured exports remain safe.
16
+ */
17
+ export class LoggerService {
18
+ static instance;
19
+ strategy;
20
+ constructor() {
21
+ this.strategy = new ConsoleStrategy();
22
+ }
23
+ static getInstance() {
24
+ if (!LoggerService.instance) {
25
+ LoggerService.instance = new LoggerService();
26
+ }
27
+ return LoggerService.instance;
28
+ }
29
+ useSetStrategy = (strategy) => {
30
+ this.strategy = strategy;
31
+ };
32
+ /**
33
+ * Overloads allow:
34
+ * - message only: `useLog("message")`
35
+ * - message + data: `useLog("message", { id: 1 })`
36
+ * - level + message + data: `useLog("error", "something failed", { code: 500 })`
37
+ */
38
+ useLog = (param1, param2, param3) => {
39
+ const levels = ["log", "info", "warn", "error", "debug"];
40
+ if (levels.includes(param1)) {
41
+ const level = param1;
42
+ const message = typeof param2 === "string" ? param2 : String(param2 ?? "");
43
+ this.strategy.useOutput(level, message, param3);
44
+ return;
45
+ }
46
+ this.strategy.useOutput("info", param1, param2);
47
+ };
48
+ useError = (message, data) => {
49
+ this.strategy.useOutput("error", message, data);
50
+ };
51
+ useClear = () => {
52
+ console.clear();
53
+ };
54
+ useTable = (data) => {
55
+ console.table(data);
56
+ };
57
+ }
58
+ // Singleton instance and destructured exports.
59
+ export const { useClear, useLog, useError, useTable, useSetStrategy } = LoggerService.getInstance();
60
+ //# sourceMappingURL=logger.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../src/core/services/logger.service.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,eAAe;IAC3B,SAAS,CAAC,KAAe,EAAE,OAAe,EAAE,IAAc;QACzD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YAC5D,OAAO;QACR,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;CACD;AAED;;;GAGG;AACH,MAAM,OAAO,aAAa;IACjB,MAAM,CAAC,QAAQ,CAAgB;IAC/B,QAAQ,CAAc;IAE9B;QACC,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,CAAC;IAEM,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC7B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAEM,cAAc,GAAG,CAAC,QAAqB,EAAQ,EAAE;QACvD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC,CAAC;IAEF;;;;;OAKG;IACI,MAAM,GAGT,CAAC,MAAyB,EAAE,MAAgB,EAAE,MAAgB,EAAQ,EAAE;QAC3E,MAAM,MAAM,GAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAErE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAkB,CAAC,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAAkB,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO;QACR,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC;IAEK,QAAQ,GAAG,CAAC,OAAe,EAAE,IAAc,EAAQ,EAAE;QAC3D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC,CAAC;IAEK,QAAQ,GAAG,GAAS,EAAE;QAC5B,OAAO,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC;IAEK,QAAQ,GAAG,CAAC,IAAa,EAAQ,EAAE;QACzC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,GACpE,aAAa,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { IReactiveService, SignalGetter, SignalSetter, StorageTarget, Subscribable, ToggleSignalSetter } from "../../types/index.js";
2
+ /**
3
+ * Minimal reactive kernel (Observer / Publisher-Subscriber) implemented as a
4
+ * Facade + Singleton. Signals are closures with explicit dependency tracking.
5
+ */
6
+ export default class ReactiveService implements IReactiveService {
7
+ private static instance;
8
+ private isBatching;
9
+ private batchQueue;
10
+ private constructor();
11
+ static getInstance(): ReactiveService;
12
+ private NOTIFY;
13
+ useCreateSignal: <T>(initialValue: T) => [SignalGetter<T>, SignalSetter<T>];
14
+ useCreateEffect: (callback: () => void | (() => void), signals: Subscribable<unknown>[]) => (() => void);
15
+ useCreateMemo: <T>(computation: () => T, signals: Subscribable<unknown>[]) => SignalGetter<T>;
16
+ useCreateToggle: (initialValue?: boolean) => [SignalGetter<boolean>, ToggleSignalSetter];
17
+ useCreateStorageSignal: <T>(key: string, fallbackValue: T, target?: StorageTarget) => [SignalGetter<T>, SignalSetter<T>];
18
+ useCreateDebouncedSignal: <T>(initialValue: T, delayMs?: number) => [SignalGetter<T>, SignalSetter<T>];
19
+ useCreateBatch: () => ((callback: () => void) => void);
20
+ }
21
+ export declare const useCreateSignal: <T>(initialValue: T) => [SignalGetter<T>, SignalSetter<T>], useCreateEffect: (callback: () => void | (() => void), signals: Subscribable<unknown>[]) => (() => void), useCreateMemo: <T>(computation: () => T, signals: Subscribable<unknown>[]) => SignalGetter<T>, useCreateToggle: (initialValue?: boolean) => [SignalGetter<boolean>, ToggleSignalSetter], useCreateStorageSignal: <T>(key: string, fallbackValue: T, target?: StorageTarget) => [SignalGetter<T>, SignalSetter<T>], useCreateDebouncedSignal: <T>(initialValue: T, delayMs?: number) => [SignalGetter<T>, SignalSetter<T>], useCreateBatch: () => ((callback: () => void) => void);
22
+ //# sourceMappingURL=reactive.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/reactive.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,gBAAgB,EAChB,YAAY,EAEZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,MAAM,sBAAsB,CAAC;AAG9B;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAA8B;IAEhD,OAAO,eAAiB;IAExB,OAAc,WAAW,IAAI,eAAe,CAK3C;IAED,OAAO,CAAC,MAAM,CAMZ;IAEK,eAAe,GAAI,CAAC,gBAAgB,CAAC,KAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CA+B/E;IAEK,eAAe,aACX,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,WAC1B,YAAY,CAAC,OAAO,CAAC,EAAE,KAC9B,CAAC,MAAM,IAAI,CAAC,CAwCb;IAEK,aAAa,GAAI,CAAC,eACX,MAAM,CAAC,WACX,YAAY,CAAC,OAAO,CAAC,EAAE,KAC9B,YAAY,CAAC,CAAC,CAAC,CAQhB;IAEK,eAAe,8BAA2B,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAK1F;IAEK,sBAAsB,GAAI,CAAC,OAC5B,MAAM,iBACI,CAAC,WACR,aAAa,KACnB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CA6BnC;IAEK,wBAAwB,GAAI,CAAC,gBACrB,CAAC,uBAEb,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAgBnC;IAEK,cAAc,QAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC,CAgB1D;CACF;AAGD,eAAO,MACN,eAAe,GA/KW,CAAC,0DAgL3B,eAAe,aA9IJ,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,WAC1B,YAAY,CAAC,OAAO,CAAC,EAAE,KAC9B,CAAC,MAAM,IAAI,CAAC,EA6If,aAAa,GAnGW,CAAC,iCAEf,YAAY,CAAC,OAAO,CAAC,EAAE,sBAkGjC,eAAe,8BAvFkC,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,EAwF5F,sBAAsB,GAjFW,CAAC,OAC5B,MAAM,6BAEH,aAAa,yCA+EtB,wBAAwB,GA/CW,CAAC,4EAgDpC,cAAc,QA3Bc,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CA4BV,CAAC"}
@@ -0,0 +1,167 @@
1
+ import { useGetStorage, useSetStorage } from "../../infrastructure/storage/storage.service.js";
2
+ import { useLog } from "./logger.service.js";
3
+ /**
4
+ * Minimal reactive kernel (Observer / Publisher-Subscriber) implemented as a
5
+ * Facade + Singleton. Signals are closures with explicit dependency tracking.
6
+ */
7
+ export default class ReactiveService {
8
+ static instance;
9
+ isBatching = false;
10
+ batchQueue = new Set();
11
+ constructor() { }
12
+ static getInstance() {
13
+ if (!ReactiveService.instance) {
14
+ ReactiveService.instance = new ReactiveService();
15
+ }
16
+ return ReactiveService.instance;
17
+ }
18
+ NOTIFY = (notifyFn) => {
19
+ if (this.isBatching) {
20
+ this.batchQueue.add(notifyFn);
21
+ }
22
+ else {
23
+ notifyFn();
24
+ }
25
+ };
26
+ useCreateSignal = (initialValue) => {
27
+ let value = initialValue;
28
+ const listeners = new Set();
29
+ const get = (() => value);
30
+ const set = (nextValue) => {
31
+ const oldValue = value;
32
+ value = typeof nextValue === "function" ? nextValue(oldValue) : nextValue;
33
+ if (value !== oldValue) {
34
+ this.NOTIFY(() => {
35
+ for (const listener of listeners) {
36
+ try {
37
+ listener(value, oldValue);
38
+ }
39
+ catch (error) {
40
+ useLog("error", "[createSignal] Listener error:", error);
41
+ }
42
+ }
43
+ });
44
+ }
45
+ };
46
+ get.useSubscribe = (listener) => {
47
+ listeners.add(listener);
48
+ return () => {
49
+ listeners.delete(listener);
50
+ };
51
+ };
52
+ return [get, set];
53
+ };
54
+ useCreateEffect = (callback, signals) => {
55
+ let cleanup;
56
+ const execute = () => {
57
+ if (typeof cleanup === "function") {
58
+ try {
59
+ cleanup();
60
+ }
61
+ catch (error) {
62
+ useLog("error", "[createEffect] Previous cleanup error:", error);
63
+ }
64
+ }
65
+ try {
66
+ cleanup = callback();
67
+ }
68
+ catch (error) {
69
+ useLog("error", "[createEffect] Effect execution error:", error);
70
+ }
71
+ };
72
+ const unsubscribes = signals.map((signal) => {
73
+ if (signal && typeof signal.useSubscribe === "function") {
74
+ return signal.useSubscribe(execute);
75
+ }
76
+ return () => { };
77
+ });
78
+ execute();
79
+ return () => {
80
+ if (typeof cleanup === "function") {
81
+ try {
82
+ cleanup();
83
+ }
84
+ catch (error) {
85
+ useLog("error", "[createEffect] Final cleanup error:", error);
86
+ }
87
+ }
88
+ for (const unsub of unsubscribes) {
89
+ unsub();
90
+ }
91
+ };
92
+ };
93
+ useCreateMemo = (computation, signals) => {
94
+ const [get, set] = this.useCreateSignal(computation());
95
+ this.useCreateEffect(() => {
96
+ set(computation());
97
+ }, signals);
98
+ return get;
99
+ };
100
+ useCreateToggle = (initialValue = false) => {
101
+ const [get, set] = this.useCreateSignal(initialValue);
102
+ const toggle = () => set((prev) => !prev);
103
+ return [get, { useSet: set, useToggle: toggle }];
104
+ };
105
+ useCreateStorageSignal = (key, fallbackValue, target = "localStorage") => {
106
+ let initial = fallbackValue;
107
+ try {
108
+ const stored = useGetStorage(key, target);
109
+ if (stored !== null && stored !== undefined) {
110
+ initial = stored;
111
+ }
112
+ }
113
+ catch (error) {
114
+ useLog("error", `[createStorageSignal] Error reading from ${target}:`, error);
115
+ }
116
+ const [get, set] = this.useCreateSignal(initial);
117
+ const setWithStorage = (nextValue) => {
118
+ set((prev) => {
119
+ const newValue = typeof nextValue === "function" ? nextValue(prev) : nextValue;
120
+ try {
121
+ useSetStorage(key, newValue, target);
122
+ }
123
+ catch (error) {
124
+ useLog("error", `[createStorageSignal] Error writing to ${target}:`, error);
125
+ }
126
+ return newValue;
127
+ });
128
+ };
129
+ return [get, setWithStorage];
130
+ };
131
+ useCreateDebouncedSignal = (initialValue, delayMs = 300) => {
132
+ const [get, set] = this.useCreateSignal(initialValue);
133
+ let timeoutId;
134
+ const debouncedSet = (nextValue) => {
135
+ if (timeoutId !== undefined) {
136
+ clearTimeout(timeoutId);
137
+ }
138
+ timeoutId = setTimeout(() => {
139
+ set(nextValue);
140
+ timeoutId = undefined;
141
+ }, delayMs);
142
+ };
143
+ return [get, debouncedSet];
144
+ };
145
+ useCreateBatch = () => {
146
+ return (callback) => {
147
+ this.isBatching = true;
148
+ try {
149
+ callback();
150
+ }
151
+ catch (error) {
152
+ useLog("error", "[createBatch] Batch block error:", error);
153
+ }
154
+ finally {
155
+ this.isBatching = false;
156
+ const queue = Array.from(this.batchQueue);
157
+ this.batchQueue.clear();
158
+ for (const notify of queue) {
159
+ notify();
160
+ }
161
+ }
162
+ };
163
+ };
164
+ }
165
+ // Singleton instance and destructured exports.
166
+ export const { useCreateSignal, useCreateEffect, useCreateMemo, useCreateToggle, useCreateStorageSignal, useCreateDebouncedSignal, useCreateBatch, } = ReactiveService.getInstance();
167
+ //# sourceMappingURL=reactive.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive.service.js","sourceRoot":"","sources":["../../../src/core/services/reactive.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { IntervalControl, TimeoutControl } from "../../types/index.js";
2
+ /**
3
+ * Timing utilities: delays, debouncing, throttling and timeouts.
4
+ * Implemented as a Singleton facade with factory methods.
5
+ */
6
+ export default class TimingService {
7
+ private static instance;
8
+ private constructor();
9
+ static getInstance(): TimingService;
10
+ useDelay: (ms: number) => Promise<void>;
11
+ /** Alias for delay, more semantic for sleep operations. */
12
+ useSleep: (ms: number) => Promise<void>;
13
+ useSetTimeout: <T>(callback: () => T | Promise<T>, ms: number) => TimeoutControl<T>;
14
+ useInterval: (callback: () => void | Promise<void>, ms: number, immediate?: boolean) => IntervalControl;
15
+ useDebounce: <T extends (...args: unknown[]) => unknown>(func: T, delayMs: number) => ((...args: Parameters<T>) => void);
16
+ useDebounceImmediate: <T extends (...args: unknown[]) => unknown>(func: T, delayMs: number) => ((...args: Parameters<T>) => void);
17
+ useThrottle: <T extends (...args: unknown[]) => unknown>(func: T, limitMs: number) => ((...args: Parameters<T>) => void);
18
+ useThrottleTrailing: <T extends (...args: unknown[]) => unknown>(func: T, limitMs: number) => ((...args: Parameters<T>) => void);
19
+ useRepeat: (callback: (iteration: number) => void | Promise<void>, iterations: number, delayMs?: number) => Promise<void>;
20
+ useRace: <T>(promise: Promise<T>, timeoutMs: number, errorMessage?: string) => Promise<T>;
21
+ }
22
+ export declare const useDelay: (ms: number) => Promise<void>, useSetTimeout: <T>(callback: () => T | Promise<T>, ms: number) => TimeoutControl<T>, useInterval: (callback: () => void | Promise<void>, ms: number, immediate?: boolean) => IntervalControl, useDebounce: <T extends (...args: unknown[]) => unknown>(func: T, delayMs: number) => (...args: Parameters<T>) => void, useDebounceImmediate: <T extends (...args: unknown[]) => unknown>(func: T, delayMs: number) => (...args: Parameters<T>) => void, useThrottle: <T extends (...args: unknown[]) => unknown>(func: T, limitMs: number) => (...args: Parameters<T>) => void, useThrottleTrailing: <T extends (...args: unknown[]) => unknown>(func: T, limitMs: number) => (...args: Parameters<T>) => void, useRepeat: (callback: (iteration: number) => void | Promise<void>, iterations: number, delayMs?: number) => Promise<void>, useRace: <T>(promise: Promise<T>, timeoutMs: number, errorMessage?: string) => Promise<T>;
23
+ //# sourceMappingURL=timing.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/timing.service.ts"],"names":[],"mappings":"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"}