@v-ibe/core 0.1.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.
Files changed (250) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/dist/DI/__tests__/scoped-container-dependencies.test.d.ts +1 -0
  4. package/dist/DI/bootstrap.d.ts +18 -0
  5. package/dist/DI/decorators/inject.d.ts +37 -0
  6. package/dist/DI/decorators/inject.js +45 -0
  7. package/dist/DI/decorators/service.d.ts +24 -0
  8. package/dist/DI/decorators/service.js +13 -0
  9. package/dist/DI/di-container.d.ts +53 -0
  10. package/dist/DI/di-container.js +158 -0
  11. package/dist/DI/lifecycle.d.ts +37 -0
  12. package/dist/DI/lifecycle.js +6 -0
  13. package/dist/DI/scoped-container.d.ts +68 -0
  14. package/dist/DI/scoped-container.js +193 -0
  15. package/dist/DI/service-metadata.d.ts +32 -0
  16. package/dist/DI/service-metadata.js +31 -0
  17. package/dist/DI/types.d.ts +4 -0
  18. package/dist/behaviors/__tests__/behavior-system.test.d.ts +1 -0
  19. package/dist/behaviors/behavior-manager.d.ts +60 -0
  20. package/dist/behaviors/behavior-manager.js +131 -0
  21. package/dist/behaviors/behavior-registry.d.ts +68 -0
  22. package/dist/behaviors/behavior-registry.js +105 -0
  23. package/dist/behaviors/constants.d.ts +16 -0
  24. package/dist/behaviors/constants.js +8 -0
  25. package/dist/behaviors/decorators.d.ts +87 -0
  26. package/dist/behaviors/decorators.js +46 -0
  27. package/dist/behaviors/index.d.ts +4 -0
  28. package/dist/components/__tests__/host.test.d.ts +1 -0
  29. package/dist/components/app-tree.d.ts +49 -0
  30. package/dist/components/app-tree.js +122 -0
  31. package/dist/components/base-component.d.ts +85 -0
  32. package/dist/components/base-component.js +438 -0
  33. package/dist/components/decorators/component.d.ts +27 -0
  34. package/dist/components/decorators/component.js +47 -0
  35. package/dist/components/decorators/prop.d.ts +14 -0
  36. package/dist/components/decorators/prop.js +37 -0
  37. package/dist/components/types.d.ts +26 -0
  38. package/dist/core.d.ts +23 -0
  39. package/dist/core.js +8 -0
  40. package/dist/custom-components/__tests__/for.test.d.ts +1 -0
  41. package/dist/custom-components/__tests__/show.test.d.ts +1 -0
  42. package/dist/custom-components/for.d.ts +58 -0
  43. package/dist/custom-components/for.js +313 -0
  44. package/dist/custom-components/index.d.ts +2 -0
  45. package/dist/custom-components/show.d.ts +78 -0
  46. package/dist/custom-components/show.js +88 -0
  47. package/dist/data-management/cache/cache-invalidate.decorator.d.ts +35 -0
  48. package/dist/data-management/cache/cache-invalidate.decorator.js +21 -0
  49. package/dist/data-management/cache/cache-metadata.d.ts +15 -0
  50. package/dist/data-management/cache/cache-provider.interface.d.ts +67 -0
  51. package/dist/data-management/cache/cache-tags.decorator.d.ts +52 -0
  52. package/dist/data-management/cache/cache-tags.decorator.js +13 -0
  53. package/dist/data-management/cache/cache-update.decorator.d.ts +28 -0
  54. package/dist/data-management/cache/cache-update.decorator.js +21 -0
  55. package/dist/data-management/cache/cache.decorator.d.ts +28 -0
  56. package/dist/data-management/cache/cache.decorator.js +13 -0
  57. package/dist/data-management/cache/index.d.ts +11 -0
  58. package/dist/data-management/cache/local-storage-cache.d.ts +40 -0
  59. package/dist/data-management/cache/local-storage-cache.js +268 -0
  60. package/dist/data-management/cache/memory-cache.d.ts +37 -0
  61. package/dist/data-management/cache/memory-cache.js +149 -0
  62. package/dist/data-management/cache/session-storage-cache.d.ts +35 -0
  63. package/dist/data-management/cache/session-storage-cache.js +242 -0
  64. package/dist/data-management/cache/ttl.decorator.d.ts +31 -0
  65. package/dist/data-management/cache/ttl.decorator.js +34 -0
  66. package/dist/data-management/decorators/consume.d.ts +29 -0
  67. package/dist/data-management/decorators/consume.js +28 -0
  68. package/dist/data-management/decorators/id.d.ts +28 -0
  69. package/dist/data-management/decorators/id.js +19 -0
  70. package/dist/data-management/decorators/model.d.ts +48 -0
  71. package/dist/data-management/decorators/model.js +24 -0
  72. package/dist/data-management/decorators/prop.d.ts +43 -0
  73. package/dist/data-management/decorators/prop.js +32 -0
  74. package/dist/data-management/index.d.ts +13 -0
  75. package/dist/data-management/store/json-to-model.d.ts +45 -0
  76. package/dist/data-management/store/json-to-model.js +36 -0
  77. package/dist/data-management/store/store.d.ts +108 -0
  78. package/dist/data-management/store/store.js +207 -0
  79. package/dist/data-management/store/types.d.ts +53 -0
  80. package/dist/events-handler/decorators/emit.d.ts +29 -0
  81. package/dist/events-handler/decorators/emit.js +51 -0
  82. package/dist/events-handler/event-decorators.d.ts +1 -0
  83. package/dist/events-handler/event-emitter.service.d.ts +21 -0
  84. package/dist/events-handler/event-emitter.service.js +85 -0
  85. package/dist/events-handler/event-types.d.ts +12 -0
  86. package/dist/index.d.ts +55 -0
  87. package/dist/index.js +121 -0
  88. package/dist/jsx/dynamic/__tests__/granular-array-renderer.test.d.ts +1 -0
  89. package/dist/jsx/dynamic/__tests__/jsx-array-rendering.test.d.ts +1 -0
  90. package/dist/jsx/dynamic/array-renderer.d.ts +2 -0
  91. package/dist/jsx/dynamic/array-renderer.js +133 -0
  92. package/dist/jsx/dynamic/child-renderer.d.ts +1 -0
  93. package/dist/jsx/dynamic/child-renderer.js +180 -0
  94. package/dist/jsx/dynamic/dom-utils.d.ts +5 -0
  95. package/dist/jsx/dynamic/dom-utils.js +22 -0
  96. package/dist/jsx/dynamic/granular-array-renderer.d.ts +16 -0
  97. package/dist/jsx/dynamic/granular-array-renderer.js +153 -0
  98. package/dist/jsx/dynamic/node-renderer.d.ts +2 -0
  99. package/dist/jsx/dynamic/props-handler.d.ts +3 -0
  100. package/dist/jsx/dynamic/props-handler.js +281 -0
  101. package/dist/jsx/dynamic/text-renderer.d.ts +2 -0
  102. package/dist/jsx/jsx-dev-runtime.d.ts +2 -0
  103. package/dist/jsx/jsx-runtime.d.ts +3 -0
  104. package/dist/jsx/types.d.ts +35 -0
  105. package/dist/jsx/types.js +4 -0
  106. package/dist/jsx-dev-runtime.d.ts +2 -0
  107. package/dist/jsx-dev-runtime.js +8 -0
  108. package/dist/jsx-runtime.d.ts +2 -0
  109. package/dist/jsx-runtime.js +11 -0
  110. package/dist/reactivity/__tests__/context-stack.test.d.ts +1 -0
  111. package/dist/reactivity/__tests__/nested-effects-untrack.test.d.ts +22 -0
  112. package/dist/reactivity/context-scope.d.ts +57 -0
  113. package/dist/reactivity/context-scope.js +35 -0
  114. package/dist/reactivity/decorators/__tests__/ctx-integration.test.d.ts +5 -0
  115. package/dist/reactivity/decorators/__tests__/ctx-loop.test.d.ts +10 -0
  116. package/dist/reactivity/decorators/__tests__/state-intelligent.test.d.ts +1 -0
  117. package/dist/reactivity/decorators/computed.d.ts +6 -0
  118. package/dist/reactivity/decorators/computed.js +17 -0
  119. package/dist/reactivity/decorators/create-event-decorator.d.ts +5 -0
  120. package/dist/reactivity/decorators/create-event-decorator.js +28 -0
  121. package/dist/reactivity/decorators/ctx.d.ts +9 -0
  122. package/dist/reactivity/decorators/ctx.js +91 -0
  123. package/dist/reactivity/decorators/effect.d.ts +9 -0
  124. package/dist/reactivity/decorators/effect.js +24 -0
  125. package/dist/reactivity/decorators/resource.d.ts +48 -0
  126. package/dist/reactivity/decorators/resource.js +20 -0
  127. package/dist/reactivity/decorators/state.d.ts +8 -0
  128. package/dist/reactivity/decorators/state.js +68 -0
  129. package/dist/reactivity/decorators/store.d.ts +6 -0
  130. package/dist/reactivity/decorators/store.js +25 -0
  131. package/dist/reactivity/phase-scheduler.d.ts +81 -0
  132. package/dist/reactivity/phase-scheduler.js +88 -0
  133. package/dist/reactivity/phase-scheduler.test.d.ts +1 -0
  134. package/dist/reactivity/reactive-cache.d.ts +21 -0
  135. package/dist/reactivity/reactive-cache.js +31 -0
  136. package/dist/reactivity/reactive-cache.test.d.ts +1 -0
  137. package/dist/reactivity/reactive-context.d.ts +152 -0
  138. package/dist/reactivity/reactive-context.js +184 -0
  139. package/dist/reactivity/signals/__tests__/composicion-automatica.test.d.ts +1 -0
  140. package/dist/reactivity/signals/__tests__/composite/nivel-1-estructura-basica.test.d.ts +1 -0
  141. package/dist/reactivity/signals/__tests__/composite/nivel-2-registro-subscribers.test.d.ts +1 -0
  142. package/dist/reactivity/signals/__tests__/composite/nivel-3-notificaciones-basicas.test.d.ts +1 -0
  143. package/dist/reactivity/signals/__tests__/composite/nivel-4-comparacion-valores.test.d.ts +1 -0
  144. package/dist/reactivity/signals/__tests__/composite/nivel-5-tracking-automatico.test.d.ts +1 -0
  145. package/dist/reactivity/signals/__tests__/composite/nivel-6-anti-glitch.test.d.ts +1 -0
  146. package/dist/reactivity/signals/__tests__/composite/nivel-7-objetos-anidados.test.d.ts +1 -0
  147. package/dist/reactivity/signals/__tests__/composite/nivel-8-observable-array-support.test.d.ts +1 -0
  148. package/dist/reactivity/signals/__tests__/composite-shallow-tracking.test.d.ts +1 -0
  149. package/dist/reactivity/signals/__tests__/effect.test.d.ts +1 -0
  150. package/dist/reactivity/signals/__tests__/reactive-array/nivel-1-estructura-basica.test.d.ts +1 -0
  151. package/dist/reactivity/signals/__tests__/reactive-array/nivel-2-metodos-mutadores.test.d.ts +1 -0
  152. package/dist/reactivity/signals/__tests__/reactive-array/nivel-3-tracking-por-indice.test.d.ts +1 -0
  153. package/dist/reactivity/signals/__tests__/reactive-array/nivel-4-tracking-length.test.d.ts +1 -0
  154. package/dist/reactivity/signals/__tests__/reactive-array/nivel-5-tracking-mutation.test.d.ts +1 -0
  155. package/dist/reactivity/signals/__tests__/reactive-array/nivel-6-metodos-no-mutadores.test.d.ts +1 -0
  156. package/dist/reactivity/signals/__tests__/reactive-array/nivel-7-composicion-bidireccional.test.d.ts +1 -0
  157. package/dist/reactivity/signals/__tests__/reactive-array/nivel-8-proxies.test.d.ts +1 -0
  158. package/dist/reactivity/signals/__tests__/reactive-array/nivel-9-derived-cache-optimization.test.d.ts +1 -0
  159. package/dist/reactivity/signals/__tests__/resource.test.d.ts +1 -0
  160. package/dist/reactivity/signals/__tests__/signal.test.d.ts +1 -0
  161. package/dist/reactivity/signals/array-strategies.d.ts +120 -0
  162. package/dist/reactivity/signals/array-strategies.js +261 -0
  163. package/dist/reactivity/signals/composite.d.ts +89 -0
  164. package/dist/reactivity/signals/composite.js +145 -0
  165. package/dist/reactivity/signals/computed.d.ts +61 -0
  166. package/dist/reactivity/signals/computed.js +107 -0
  167. package/dist/reactivity/signals/computed.test.d.ts +1 -0
  168. package/dist/reactivity/signals/derived.d.ts +10 -0
  169. package/dist/reactivity/signals/derived.js +24 -0
  170. package/dist/reactivity/signals/effect.d.ts +27 -0
  171. package/dist/reactivity/signals/effect.js +46 -0
  172. package/dist/reactivity/signals/event.d.ts +9 -0
  173. package/dist/reactivity/signals/event.js +15 -0
  174. package/dist/reactivity/signals/reactive-array.d.ts +133 -0
  175. package/dist/reactivity/signals/reactive-array.js +490 -0
  176. package/dist/reactivity/signals/reactive-proxy.d.ts +54 -0
  177. package/dist/reactivity/signals/reactive-proxy.js +299 -0
  178. package/dist/reactivity/signals/reactive-tracking.test.d.ts +1 -0
  179. package/dist/reactivity/signals/resource.d.ts +9 -0
  180. package/dist/reactivity/signals/resource.js +58 -0
  181. package/dist/reactivity/signals/signal.d.ts +39 -0
  182. package/dist/reactivity/signals/signal.js +56 -0
  183. package/dist/reactivity/signals/subscription-management.test.d.ts +1 -0
  184. package/dist/reactivity/types.d.ts +12 -0
  185. package/dist/router/__tests__/link-behavior-active-class.test.d.ts +1 -0
  186. package/dist/router/__tests__/loop-detector.test.d.ts +1 -0
  187. package/dist/router/__tests__/params-container-resolution.test.d.ts +1 -0
  188. package/dist/router/__tests__/router-generated-routes.test.d.ts +1 -0
  189. package/dist/router/__tests__/router-params-granular.test.d.ts +1 -0
  190. package/dist/router/__tests__/router-params-simple.test.d.ts +1 -0
  191. package/dist/router/__tests__/router-query-params.test.d.ts +1 -0
  192. package/dist/router/__tests__/router-route-candidates.test.d.ts +1 -0
  193. package/dist/router/__tests__/routeview-app-articles.test.d.ts +1 -0
  194. package/dist/router/__tests__/routeview-debug.test.d.ts +1 -0
  195. package/dist/router/__tests__/routeview-integration.test.d.ts +1 -0
  196. package/dist/router/__tests__/routeview-this.test.d.ts +1 -0
  197. package/dist/router/decorators/base-policy.d.ts +141 -0
  198. package/dist/router/decorators/base-policy.js +63 -0
  199. package/dist/router/decorators/index.d.ts +6 -0
  200. package/dist/router/decorators/params.d.ts +31 -0
  201. package/dist/router/decorators/params.js +97 -0
  202. package/dist/router/decorators/route-metadata.d.ts +11 -0
  203. package/dist/router/decorators/route-metadata.js +23 -0
  204. package/dist/router/decorators/route.d.ts +39 -0
  205. package/dist/router/decorators/route.js +7 -0
  206. package/dist/router/link.behavior.d.ts +87 -0
  207. package/dist/router/link.behavior.js +227 -0
  208. package/dist/router/policy-evaluator.d.ts +81 -0
  209. package/dist/router/policy-evaluator.js +209 -0
  210. package/dist/router/route-view.d.ts +56 -0
  211. package/dist/router/route-view.js +156 -0
  212. package/dist/router/router.d.ts +67 -0
  213. package/dist/router/router.js +308 -0
  214. package/dist/router/static-analysis/index.d.ts +37 -0
  215. package/dist/router/static-analysis/parser.d.ts +14 -0
  216. package/dist/router/static-analysis/parser.js +147 -0
  217. package/dist/router/static-analysis/scanner.d.ts +27 -0
  218. package/dist/router/static-analysis/scanner.js +91 -0
  219. package/dist/router/trie.d.ts +14 -0
  220. package/dist/router/trie.js +126 -0
  221. package/dist/router/trie.types.d.ts +36 -0
  222. package/dist/styles/base-style-sheet.d.ts +96 -0
  223. package/dist/styles/base-style-sheet.js +149 -0
  224. package/dist/styles/decorators/factories.d.ts +76 -0
  225. package/dist/styles/decorators/factories.js +11 -0
  226. package/dist/styles/decorators/keyframes.d.ts +238 -0
  227. package/dist/styles/decorators/keyframes.js +79 -0
  228. package/dist/styles/decorators/rule.d.ts +177 -0
  229. package/dist/styles/decorators/rule.js +72 -0
  230. package/dist/styles/decorators/scope.d.ts +66 -0
  231. package/dist/styles/decorators/scope.js +17 -0
  232. package/dist/styles/decorators/style.d.ts +1 -0
  233. package/dist/styles/decorators/style.js +20 -0
  234. package/dist/styles/decorators/useStyles.d.ts +5 -0
  235. package/dist/styles/decorators/useStyles.js +29 -0
  236. package/dist/styles/global-styles-registry.d.ts +72 -0
  237. package/dist/styles/global-styles-registry.js +155 -0
  238. package/dist/types.d.ts +1 -0
  239. package/dist/vite-plugins/__tests__/jsx-control-flow-transform.test.d.ts +1 -0
  240. package/dist/vite-plugins/index.d.ts +4 -0
  241. package/dist/vite-plugins/index.js +10 -0
  242. package/dist/vite-plugins/jsx-contextual.d.ts +7 -0
  243. package/dist/vite-plugins/jsx-contextual.js +53 -0
  244. package/dist/vite-plugins/jsx-control-flow-transform.d.ts +60 -0
  245. package/dist/vite-plugins/jsx-control-flow-transform.js +180 -0
  246. package/dist/vite-plugins/jsx-signals.d.ts +2 -0
  247. package/dist/vite-plugins/jsx-signals.js +124 -0
  248. package/dist/vite-plugins/router/route-generator-plugin.d.ts +63 -0
  249. package/dist/vite-plugins/router/route-generator-plugin.js +310 -0
  250. package/package.json +85 -0
@@ -0,0 +1,28 @@
1
+ import { CacheProvider } from './cache-provider.interface';
2
+ export type Constructor<T> = new (...args: any[]) => T;
3
+ export type TagExtractor = (result: any, args: any[]) => string[];
4
+ /**
5
+ * @CacheUpdate Decorator
6
+ *
7
+ * Actualiza las entradas del cache que coincidan con los tags extraídos del resultado
8
+ * de un método. Útil para mantener el cache sincronizado después de operaciones de
9
+ * actualización (PUT, PATCH, etc.).
10
+ *
11
+ * Preserva el TTL original de cada entrada del cache.
12
+ *
13
+ * @param ProviderClass - La clase del cache provider a usar
14
+ * @param tagExtractor - Función que extrae tags del resultado y argumentos
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * @CacheUpdate(
19
+ * LocalStorageCache,
20
+ * (result) => [`user:${result.id}`]
21
+ * )
22
+ * async updateUser(userId: string, data: any): Promise<User> {
23
+ * const response = await this.httpClient.put(`/users/${userId}`, data);
24
+ * return response.data;
25
+ * }
26
+ * ```
27
+ */
28
+ export declare function CacheUpdate(ProviderClass: Constructor<CacheProvider>, tagExtractor: TagExtractor): (originalMethod: Function, context: ClassMethodDecoratorContext) => (this: any, ...args: any[]) => Promise<any>;
@@ -0,0 +1,21 @@
1
+ function CacheUpdate(ProviderClass, tagExtractor) {
2
+ return function(originalMethod, context) {
3
+ return async function(...args) {
4
+ const result = await originalMethod.apply(this, args);
5
+ const provider = this.__container.get(ProviderClass);
6
+ if (!provider) {
7
+ console.warn(`[CacheUpdate] Provider ${ProviderClass.name} not found in DI container`);
8
+ return result;
9
+ }
10
+ const tags = tagExtractor(result, args);
11
+ if (!tags || tags.length === 0) {
12
+ return result;
13
+ }
14
+ provider.updateByTags(tags, result);
15
+ return result;
16
+ };
17
+ };
18
+ }
19
+ export {
20
+ CacheUpdate
21
+ };
@@ -0,0 +1,28 @@
1
+ import { Constructor } from '../../DI/types';
2
+ import { CacheProvider } from './cache-provider.interface';
3
+ /**
4
+ * @Cache DECORATOR
5
+ *
6
+ * Define qué cache provider usar para un método.
7
+ * El provider debe estar decorado con @Service.
8
+ *
9
+ * Si no se especifica @Cache, se usa MemoryCache por defecto.
10
+ */
11
+ /**
12
+ * @Cache - Define el provider de cache para un método
13
+ *
14
+ * @param ProviderClass - Clase del cache provider (debe tener @Service)
15
+ *
16
+ * @example
17
+ * // Cache en LocalStorage
18
+ * @Cache(LocalStorageCache)
19
+ * @TTL(5000)
20
+ * async getUserPreferences() { }
21
+ *
22
+ * @example
23
+ * // Cache en SessionStorage
24
+ * @Cache(SessionStorageCache)
25
+ * @TTL(3000)
26
+ * async getFilterState() { }
27
+ */
28
+ export declare function Cache<T extends CacheProvider>(ProviderClass: Constructor<T>): (target: any, context: ClassMethodDecoratorContext) => void;
@@ -0,0 +1,13 @@
1
+ function Cache(ProviderClass) {
2
+ return function(target, context) {
3
+ const metadata = context.metadata;
4
+ const methodName = String(context.name);
5
+ if (!metadata.cacheProviders) {
6
+ metadata.cacheProviders = {};
7
+ }
8
+ metadata.cacheProviders[methodName] = ProviderClass;
9
+ };
10
+ }
11
+ export {
12
+ Cache
13
+ };
@@ -0,0 +1,11 @@
1
+ export type { CacheProvider, CacheEntry } from './cache-provider.interface';
2
+ export { MemoryCache } from './memory-cache';
3
+ export { LocalStorageCache } from './local-storage-cache';
4
+ export { SessionStorageCache } from './session-storage-cache';
5
+ export { Cache } from './cache.decorator';
6
+ export { TTL } from './ttl.decorator';
7
+ export { CacheTags } from './cache-tags.decorator';
8
+ export type { TagExtractor } from './cache-tags.decorator';
9
+ export { getCacheMetadata, setCacheProviderClass, setTagExtractor } from './cache-metadata';
10
+ export { CacheUpdate } from './cache-update.decorator';
11
+ export { CacheInvalidate } from './cache-invalidate.decorator';
@@ -0,0 +1,40 @@
1
+ import { CacheProvider, CacheEntry } from './cache-provider.interface';
2
+ /**
3
+ * LOCALSTORAGE CACHE PROVIDER
4
+ *
5
+ * Provider de cache en LocalStorage.
6
+ *
7
+ * CARACTERÍSTICAS:
8
+ * - Persistente (sobrevive recargas y cierres de navegador)
9
+ * - Límite ~5-10MB (depende del navegador)
10
+ * - Sincrónico (puede bloquear si hay mucha data)
11
+ * - Ideal para: preferencias de usuario, datos que persisten entre sesiones
12
+ *
13
+ * IMPORTANTE: Los datos deben ser serializables a JSON.
14
+ */
15
+ export declare class LocalStorageCache implements CacheProvider {
16
+ private readonly prefix;
17
+ private readonly tagIndexKey;
18
+ get tagIndex(): Map<string, Set<string>>;
19
+ get cache(): Map<string, CacheEntry<any>>;
20
+ private getStorageKey;
21
+ private getTagIndex;
22
+ private saveTagIndex;
23
+ get<T>(key: string): T | null;
24
+ set<T>(key: string, value: T, ttl: number, tags?: string[]): void;
25
+ delete(key: string): void;
26
+ clear(): void;
27
+ invalidatePattern(pattern: RegExp): void;
28
+ invalidateTag(tag: string): void;
29
+ getKeysByTag(tag: string): string[];
30
+ updateByTags<T>(tags: string[], value: T): void;
31
+ invalidateTags(tags: string[]): void;
32
+ /**
33
+ * Limpia entradas expiradas (útil para liberar espacio).
34
+ */
35
+ clearExpired(): void;
36
+ /**
37
+ * Lifecycle hook - se ejecuta cuando el container se destruye
38
+ */
39
+ onDestroy(): void;
40
+ }
@@ -0,0 +1,268 @@
1
+ import { Service } from "../../DI/decorators/service.js";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
6
+ var __typeError = (msg) => {
7
+ throw TypeError(msg);
8
+ };
9
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
11
+ var __decoratorStart = (base) => [, , , __create(null)];
12
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
13
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
14
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
15
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
16
+ var __runInitializers = (array, flags, self, value) => {
17
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
18
+ return value;
19
+ };
20
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
21
+ var it, done, ctx, k = flags & 7, p = false;
22
+ var j = 0;
23
+ var extraInitializers = array[j] || (array[j] = []);
24
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc(target, name));
25
+ __name(target, name);
26
+ for (var i = decorators.length - 1; i >= 0; i--) {
27
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
28
+ it = (0, decorators[i])(target, ctx), done._ = 1;
29
+ __expectFn(it) && (target = it);
30
+ }
31
+ return __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
32
+ };
33
+ var _LocalStorageCache_decorators, _init;
34
+ _LocalStorageCache_decorators = [Service];
35
+ class LocalStorageCache {
36
+ constructor() {
37
+ this.prefix = "cache";
38
+ this.tagIndexKey = "cache:tagIndex";
39
+ }
40
+ // Exposed for CacheUpdate decorator
41
+ get tagIndex() {
42
+ return this.getTagIndex();
43
+ }
44
+ // Exposed for CacheUpdate decorator
45
+ get cache() {
46
+ const cacheMap = /* @__PURE__ */ new Map();
47
+ for (let i = 0; i < localStorage.length; i++) {
48
+ const storageKey = localStorage.key(i);
49
+ if (storageKey && storageKey.startsWith(`${this.prefix}:`)) {
50
+ try {
51
+ const item = localStorage.getItem(storageKey);
52
+ if (item) {
53
+ const key = storageKey.substring(this.prefix.length + 1);
54
+ cacheMap.set(key, JSON.parse(item));
55
+ }
56
+ } catch (error) {
57
+ }
58
+ }
59
+ }
60
+ return cacheMap;
61
+ }
62
+ getStorageKey(key) {
63
+ return `${this.prefix}:${key}`;
64
+ }
65
+ getTagIndex() {
66
+ try {
67
+ const data = localStorage.getItem(this.tagIndexKey);
68
+ if (!data) {
69
+ return /* @__PURE__ */ new Map();
70
+ }
71
+ const parsed = JSON.parse(data);
72
+ return new Map(
73
+ Object.entries(parsed).map(([tag, keys]) => [tag, new Set(keys)])
74
+ );
75
+ } catch {
76
+ return /* @__PURE__ */ new Map();
77
+ }
78
+ }
79
+ saveTagIndex(tagIndex) {
80
+ try {
81
+ const obj = {};
82
+ tagIndex.forEach((keys, tag) => {
83
+ obj[tag] = Array.from(keys);
84
+ });
85
+ localStorage.setItem(this.tagIndexKey, JSON.stringify(obj));
86
+ } catch (error) {
87
+ console.error("[LocalStorageCache] Error saving tag index:", error);
88
+ }
89
+ }
90
+ get(key) {
91
+ try {
92
+ const storageKey = this.getStorageKey(key);
93
+ const item = localStorage.getItem(storageKey);
94
+ if (!item) {
95
+ return null;
96
+ }
97
+ const entry = JSON.parse(item);
98
+ const now = Date.now();
99
+ const age = now - entry.timestamp;
100
+ if (age > entry.ttl) {
101
+ this.delete(key);
102
+ return null;
103
+ }
104
+ return entry.value;
105
+ } catch (error) {
106
+ console.error("[LocalStorageCache] Error getting item:", error);
107
+ return null;
108
+ }
109
+ }
110
+ set(key, value, ttl, tags = []) {
111
+ try {
112
+ const storageKey = this.getStorageKey(key);
113
+ const entry = {
114
+ value,
115
+ timestamp: Date.now(),
116
+ ttl,
117
+ tags
118
+ };
119
+ const serialized = JSON.stringify(entry);
120
+ localStorage.setItem(storageKey, serialized);
121
+ if (tags.length > 0) {
122
+ const tagIndex = this.getTagIndex();
123
+ tags.forEach((tag) => {
124
+ if (!tagIndex.has(tag)) {
125
+ tagIndex.set(tag, /* @__PURE__ */ new Set());
126
+ }
127
+ tagIndex.get(tag).add(key);
128
+ });
129
+ this.saveTagIndex(tagIndex);
130
+ }
131
+ } catch (error) {
132
+ console.error("[LocalStorageCache] Error setting item:", error);
133
+ this.clearExpired();
134
+ }
135
+ }
136
+ delete(key) {
137
+ try {
138
+ const storageKey = this.getStorageKey(key);
139
+ const item = localStorage.getItem(storageKey);
140
+ if (item) {
141
+ const entry = JSON.parse(item);
142
+ if (entry.tags && entry.tags.length > 0) {
143
+ const tagIndex = this.getTagIndex();
144
+ entry.tags.forEach((tag) => {
145
+ tagIndex.get(tag)?.delete(key);
146
+ if (tagIndex.get(tag)?.size === 0) {
147
+ tagIndex.delete(tag);
148
+ }
149
+ });
150
+ this.saveTagIndex(tagIndex);
151
+ }
152
+ }
153
+ localStorage.removeItem(storageKey);
154
+ } catch (error) {
155
+ console.error("[LocalStorageCache] Error deleting item:", error);
156
+ }
157
+ }
158
+ clear() {
159
+ const keysToRemove = [];
160
+ for (let i = 0; i < localStorage.length; i++) {
161
+ const key = localStorage.key(i);
162
+ if (key && key.startsWith(`${this.prefix}:`)) {
163
+ keysToRemove.push(key);
164
+ }
165
+ }
166
+ keysToRemove.forEach((key) => localStorage.removeItem(key));
167
+ localStorage.removeItem(this.tagIndexKey);
168
+ }
169
+ invalidatePattern(pattern) {
170
+ const keysToRemove = [];
171
+ for (let i = 0; i < localStorage.length; i++) {
172
+ const storageKey = localStorage.key(i);
173
+ if (storageKey && storageKey.startsWith(`${this.prefix}:`)) {
174
+ const key = storageKey.substring(this.prefix.length + 1);
175
+ if (pattern.test(key)) {
176
+ keysToRemove.push(key);
177
+ }
178
+ }
179
+ }
180
+ keysToRemove.forEach((key) => this.delete(key));
181
+ }
182
+ invalidateTag(tag) {
183
+ const tagIndex = this.getTagIndex();
184
+ const keysToInvalidate = tagIndex.get(tag);
185
+ if (!keysToInvalidate) {
186
+ return;
187
+ }
188
+ const keys = Array.from(keysToInvalidate);
189
+ keys.forEach((key) => this.delete(key));
190
+ }
191
+ getKeysByTag(tag) {
192
+ const tagIndex = this.getTagIndex();
193
+ const keys = tagIndex.get(tag);
194
+ return keys ? Array.from(keys) : [];
195
+ }
196
+ updateByTags(tags, value) {
197
+ const tagIndex = this.getTagIndex();
198
+ const keysToUpdate = /* @__PURE__ */ new Set();
199
+ tags.forEach((tag) => {
200
+ const keys = tagIndex.get(tag);
201
+ if (keys) {
202
+ keys.forEach((key) => keysToUpdate.add(key));
203
+ }
204
+ });
205
+ keysToUpdate.forEach((key) => {
206
+ const storageKey = this.getStorageKey(key);
207
+ const item = localStorage.getItem(storageKey);
208
+ if (item) {
209
+ try {
210
+ const fullEntry = JSON.parse(item);
211
+ this.set(key, value, fullEntry.ttl, fullEntry.tags);
212
+ } catch (error) {
213
+ console.error(`[LocalStorageCache] Error parsing entry for ${key}:`, error);
214
+ }
215
+ }
216
+ });
217
+ }
218
+ invalidateTags(tags) {
219
+ const tagIndex = this.getTagIndex();
220
+ const keysToInvalidate = /* @__PURE__ */ new Set();
221
+ tags.forEach((tag) => {
222
+ const keys = tagIndex.get(tag);
223
+ if (keys) {
224
+ keys.forEach((key) => keysToInvalidate.add(key));
225
+ }
226
+ });
227
+ keysToInvalidate.forEach((key) => this.delete(key));
228
+ }
229
+ /**
230
+ * Limpia entradas expiradas (útil para liberar espacio).
231
+ */
232
+ clearExpired() {
233
+ const now = Date.now();
234
+ const keysToRemove = [];
235
+ for (let i = 0; i < localStorage.length; i++) {
236
+ const storageKey = localStorage.key(i);
237
+ if (storageKey && storageKey.startsWith(`${this.prefix}:`)) {
238
+ try {
239
+ const item = localStorage.getItem(storageKey);
240
+ if (item) {
241
+ const entry = JSON.parse(item);
242
+ const age = now - entry.timestamp;
243
+ if (age > entry.ttl) {
244
+ const key = storageKey.substring(this.prefix.length + 1);
245
+ keysToRemove.push(key);
246
+ }
247
+ }
248
+ } catch (error) {
249
+ const key = storageKey.substring(this.prefix.length + 1);
250
+ keysToRemove.push(key);
251
+ }
252
+ }
253
+ }
254
+ keysToRemove.forEach((key) => this.delete(key));
255
+ }
256
+ /**
257
+ * Lifecycle hook - se ejecuta cuando el container se destruye
258
+ */
259
+ onDestroy() {
260
+ this.clearExpired();
261
+ }
262
+ }
263
+ _init = __decoratorStart();
264
+ LocalStorageCache = __decorateElement(_init, 0, "LocalStorageCache", _LocalStorageCache_decorators, LocalStorageCache);
265
+ __runInitializers(_init, 1, LocalStorageCache);
266
+ export {
267
+ LocalStorageCache
268
+ };
@@ -0,0 +1,37 @@
1
+ import { CacheProvider, CacheEntry } from './cache-provider.interface';
2
+ /**
3
+ * MEMORY CACHE PROVIDER
4
+ *
5
+ * Provider de cache en memoria (RAM).
6
+ *
7
+ * CARACTERÍSTICAS:
8
+ * - Rápido (acceso directo a Map)
9
+ * - No persistente (se pierde al recargar)
10
+ * - Ideal para: datos temporales, sesión actual
11
+ *
12
+ * Este es el provider por defecto cuando no se especifica @Cache.
13
+ */
14
+ export declare class MemoryCache implements CacheProvider {
15
+ cache: Map<string, CacheEntry<any>>;
16
+ tagIndex: Map<string, Set<string>>;
17
+ get<T>(key: string): T | null;
18
+ set<T>(key: string, value: T, ttl: number, tags?: string[]): void;
19
+ delete(key: string): void;
20
+ clear(): void;
21
+ invalidatePattern(pattern: RegExp): void;
22
+ invalidateTag(tag: string): void;
23
+ getKeysByTag(tag: string): string[];
24
+ updateByTags<T>(tags: string[], value: T): void;
25
+ invalidateTags(tags: string[]): void;
26
+ /**
27
+ * Método de utilidad para debugging.
28
+ */
29
+ getStats(): {
30
+ size: number;
31
+ keys: string[];
32
+ };
33
+ /**
34
+ * Lifecycle hook - se ejecuta cuando el container se destruye
35
+ */
36
+ onDestroy(): void;
37
+ }
@@ -0,0 +1,149 @@
1
+ import { Service } from "../../DI/decorators/service.js";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
6
+ var __typeError = (msg) => {
7
+ throw TypeError(msg);
8
+ };
9
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
11
+ var __decoratorStart = (base) => [, , , __create(null)];
12
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
13
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
14
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
15
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
16
+ var __runInitializers = (array, flags, self, value) => {
17
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
18
+ return value;
19
+ };
20
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
21
+ var it, done, ctx, k = flags & 7, p = false;
22
+ var j = 0;
23
+ var extraInitializers = array[j] || (array[j] = []);
24
+ var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc(target, name));
25
+ __name(target, name);
26
+ for (var i = decorators.length - 1; i >= 0; i--) {
27
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
28
+ it = (0, decorators[i])(target, ctx), done._ = 1;
29
+ __expectFn(it) && (target = it);
30
+ }
31
+ return __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
32
+ };
33
+ var _MemoryCache_decorators, _init;
34
+ _MemoryCache_decorators = [Service];
35
+ class MemoryCache {
36
+ constructor() {
37
+ this.cache = /* @__PURE__ */ new Map();
38
+ this.tagIndex = /* @__PURE__ */ new Map();
39
+ }
40
+ // tag → cache keys
41
+ get(key) {
42
+ const entry = this.cache.get(key);
43
+ if (!entry) {
44
+ return null;
45
+ }
46
+ const now = Date.now();
47
+ const age = now - entry.timestamp;
48
+ if (age > entry.ttl) {
49
+ this.delete(key);
50
+ return null;
51
+ }
52
+ return entry.value;
53
+ }
54
+ set(key, value, ttl, tags = []) {
55
+ this.cache.set(key, {
56
+ value,
57
+ timestamp: Date.now(),
58
+ ttl,
59
+ tags
60
+ });
61
+ tags.forEach((tag) => {
62
+ if (!this.tagIndex.has(tag)) {
63
+ this.tagIndex.set(tag, /* @__PURE__ */ new Set());
64
+ }
65
+ this.tagIndex.get(tag).add(key);
66
+ });
67
+ }
68
+ delete(key) {
69
+ const entry = this.cache.get(key);
70
+ if (entry) {
71
+ entry.tags.forEach((tag) => {
72
+ this.tagIndex.get(tag)?.delete(key);
73
+ if (this.tagIndex.get(tag)?.size === 0) {
74
+ this.tagIndex.delete(tag);
75
+ }
76
+ });
77
+ }
78
+ this.cache.delete(key);
79
+ }
80
+ clear() {
81
+ this.cache.clear();
82
+ this.tagIndex.clear();
83
+ }
84
+ invalidatePattern(pattern) {
85
+ for (const key of this.cache.keys()) {
86
+ if (pattern.test(key)) {
87
+ this.delete(key);
88
+ }
89
+ }
90
+ }
91
+ invalidateTag(tag) {
92
+ const keysToInvalidate = this.tagIndex.get(tag);
93
+ if (!keysToInvalidate) {
94
+ return;
95
+ }
96
+ const keys = Array.from(keysToInvalidate);
97
+ keys.forEach((key) => this.delete(key));
98
+ }
99
+ getKeysByTag(tag) {
100
+ const keys = this.tagIndex.get(tag);
101
+ return keys ? Array.from(keys) : [];
102
+ }
103
+ updateByTags(tags, value) {
104
+ const keysToUpdate = /* @__PURE__ */ new Set();
105
+ tags.forEach((tag) => {
106
+ const keys = this.tagIndex.get(tag);
107
+ if (keys) {
108
+ keys.forEach((key) => keysToUpdate.add(key));
109
+ }
110
+ });
111
+ keysToUpdate.forEach((key) => {
112
+ const entry = this.cache.get(key);
113
+ if (entry) {
114
+ this.set(key, value, entry.ttl, entry.tags);
115
+ }
116
+ });
117
+ }
118
+ invalidateTags(tags) {
119
+ const keysToInvalidate = /* @__PURE__ */ new Set();
120
+ tags.forEach((tag) => {
121
+ const keys = this.tagIndex.get(tag);
122
+ if (keys) {
123
+ keys.forEach((key) => keysToInvalidate.add(key));
124
+ }
125
+ });
126
+ keysToInvalidate.forEach((key) => this.delete(key));
127
+ }
128
+ /**
129
+ * Método de utilidad para debugging.
130
+ */
131
+ getStats() {
132
+ return {
133
+ size: this.cache.size,
134
+ keys: Array.from(this.cache.keys())
135
+ };
136
+ }
137
+ /**
138
+ * Lifecycle hook - se ejecuta cuando el container se destruye
139
+ */
140
+ onDestroy() {
141
+ this.clear();
142
+ }
143
+ }
144
+ _init = __decoratorStart();
145
+ MemoryCache = __decorateElement(_init, 0, "MemoryCache", _MemoryCache_decorators, MemoryCache);
146
+ __runInitializers(_init, 1, MemoryCache);
147
+ export {
148
+ MemoryCache
149
+ };
@@ -0,0 +1,35 @@
1
+ import { CacheProvider } from './cache-provider.interface';
2
+ /**
3
+ * SESSIONSTORAGE CACHE PROVIDER
4
+ *
5
+ * Provider de cache en SessionStorage.
6
+ *
7
+ * CARACTERÍSTICAS:
8
+ * - Persistente solo durante la sesión del navegador
9
+ * - Se limpia al cerrar la pestaña/ventana
10
+ * - Límite ~5-10MB (depende del navegador)
11
+ * - Ideal para: datos temporales de la sesión, estado de UI
12
+ *
13
+ * IMPORTANTE: Los datos deben ser serializables a JSON.
14
+ */
15
+ export declare class SessionStorageCache implements CacheProvider {
16
+ private readonly prefix;
17
+ private readonly tagIndexKey;
18
+ private getStorageKey;
19
+ private getTagIndex;
20
+ private saveTagIndex;
21
+ get<T>(key: string): T | null;
22
+ set<T>(key: string, value: T, ttl: number, tags?: string[]): void;
23
+ delete(key: string): void;
24
+ clear(): void;
25
+ invalidatePattern(pattern: RegExp): void;
26
+ invalidateTag(tag: string): void;
27
+ getKeysByTag(tag: string): string[];
28
+ updateByTags<T>(tags: string[], value: T): void;
29
+ invalidateTags(tags: string[]): void;
30
+ clearExpired(): void;
31
+ /**
32
+ * Lifecycle hook - se ejecuta cuando el container se destruye
33
+ */
34
+ onDestroy(): void;
35
+ }