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,18 +1,106 @@
1
- import type { AstroPath, AstroServiceResult, CollectionEntryLike, IAstroService, PaginationProps, PathsOptions } from "../../types/index.js";
1
+ import type { AstroPath, AstroServiceResult, CollectionEntryLike, PaginationProps, PathsOptions } from "../../types/index.js";
2
2
  /**
3
- * Astro adapter (Facade + Adapter + Singleton). Converts arbitrary collections
4
- * into the `getStaticPaths` format Astro expects, wrapped in a Safe Result.
3
+ * Convert a collection into Astro-compatible static paths.
4
+ *
5
+ * @param items - Collection items to convert
6
+ * @param options - Configuration for param name, value extraction and props
7
+ * @returns Array of Astro paths with params and props
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * // In Astro's getStaticPaths()
12
+ * const posts = await getCollection("blog");
13
+ * const paths = useAstroPathsFrom(posts, {
14
+ * param: "slug",
15
+ * valueFrom: (post) => post.slug,
16
+ * propsFrom: (post) => ({ title: post.data.title }),
17
+ * });
18
+ * // [{ params: { slug: "hello-world" }, props: { title: "Hello World" } }]
19
+ * ```
5
20
  */
6
- export declare class AstroService implements IAstroService {
7
- private static instance;
8
- private constructor();
9
- static getInstance(): AstroService;
10
- usePathsFrom: <T, TParam extends string = "slug", TProps = T>(items: T[], options?: PathsOptions<T, TParam, TProps>) => AstroPath<TParam, TProps>[];
11
- useGetStaticPaths: <TData = unknown, TParam extends string = "slug", TProps = CollectionEntryLike<TData>>(getCollectionFn: (collection: string) => Promise<CollectionEntryLike<TData>[]>, collectionName: string, options?: PathsOptions<CollectionEntryLike<TData>, TParam, TProps>) => Promise<AstroServiceResult<AstroPath<TParam, TProps>[]>>;
12
- useFindEntry: <T>(items: T[], value: string, keyFrom?: (item: T) => string | number) => T | null;
13
- useGeneratePagination: <T, TParam extends string = "page">(items: T[], pageSize?: number, param?: TParam) => AstroPath<TParam, PaginationProps<T>>[];
14
- usePathsFromValues: <TParam extends string = "slug">(values: (string | number)[], param?: TParam) => AstroPath<TParam, string | number>[];
15
- useExtractUniqueValues: <T, V>(items: T[], keyFrom: (item: T) => V | V[]) => V[];
16
- }
17
- export declare const usePathsFrom: <T, TParam extends string = "slug", TProps = T>(items: T[], options?: PathsOptions<T, TParam, TProps>) => AstroPath<TParam, TProps>[], useGetStaticPaths: <TData = unknown, TParam extends string = "slug", TProps = CollectionEntryLike<TData>>(getCollectionFn: (collection: string) => Promise<CollectionEntryLike<TData>[]>, collectionName: string, options?: PathsOptions<CollectionEntryLike<TData>, TParam, TProps>) => Promise<AstroServiceResult<AstroPath<TParam, TProps>[]>>, useFindEntry: <T>(items: T[], value: string, keyFrom?: ((item: T) => string | number) | undefined) => T | null, useGeneratePagination: <T, TParam extends string = "page">(items: T[], pageSize?: number, param?: TParam) => AstroPath<TParam, PaginationProps<T>>[], usePathsFromValues: <TParam extends string = "slug">(values: (string | number)[], param?: TParam) => AstroPath<TParam, string | number>[], useExtractUniqueValues: <T, V>(items: T[], keyFrom: (item: T) => V | V[]) => V[];
21
+ export declare function useAstroPathsFrom<T, TParam extends string = "slug", TProps = T>(items: T[], options?: PathsOptions<T, TParam, TProps>): AstroPath<TParam, TProps>[];
22
+ /**
23
+ * Fetch a collection and transform it into safe Astro paths.
24
+ * Returns a result object instead of throwing on error.
25
+ *
26
+ * @param getCollectionFn - Astro's getCollection function
27
+ * @param collectionName - Name of the collection to fetch
28
+ * @param options - Path generation options
29
+ * @returns Safe result with data or error
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * export async function getStaticPaths() {
34
+ * const result = await useAstroGetStaticPaths(getCollection, "blog");
35
+ * if (result.ok) return result.data;
36
+ * TODO: traer el useLogger('error', result.error)
37
+ * console.error(result.error);
38
+ * return [];
39
+ * }
40
+ * ```
41
+ */
42
+ export declare function useAstroGetStaticPaths<TData = unknown, TParam extends string = "slug", TProps = CollectionEntryLike<TData>>(getCollectionFn: (collection: string) => Promise<CollectionEntryLike<TData>[]>, collectionName: string, options?: PathsOptions<CollectionEntryLike<TData>, TParam, TProps>): Promise<AstroServiceResult<AstroPath<TParam, TProps>[]>>;
43
+ /**
44
+ * Find a collection entry by slug or custom key.
45
+ *
46
+ * @param items - Collection items to search
47
+ * @param value - Value to match (slug, id, etc.)
48
+ * @param keyFrom - Optional function to extract the key from an item
49
+ * @returns Matched item or null
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * const posts = await getCollection("blog");
54
+ * const post = useAstroFindEntry(posts, "hello-world");
55
+ * if (post) console.log(post.data.title);
56
+ * ```
57
+ */
58
+ export declare function useAstroFindEntry<T>(items: T[], value: string, keyFrom?: (item: T) => string | number): T | null;
59
+ /**
60
+ * Generate paginated Astro paths from a list of items.
61
+ *
62
+ * @param items - Items to paginate
63
+ * @param pageSize - Number of items per page
64
+ * @param param - URL param name for page number
65
+ * @returns Array of Astro paths with pagination props
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * const posts = await getCollection("blog");
70
+ * const pages = useAstroGeneratePagination(posts, 10);
71
+ * // [{ params: { page: undefined }, props: { items: [...], currentPage: 1, totalPages: 3 } },
72
+ * // { params: { page: "2" }, props: { items: [...], currentPage: 2, totalPages: 3 } }, ...]
73
+ * ```
74
+ */
75
+ export declare function useAstroGeneratePagination<T, TParam extends string = "page">(items: T[], pageSize?: number, param?: TParam): AstroPath<TParam, PaginationProps<T>>[];
76
+ /**
77
+ * Convert simple values into Astro paths.
78
+ *
79
+ * @param values - Array of string or number values
80
+ * @param param - URL param name
81
+ * @returns Array of Astro paths
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * const categories = ["tech", "design", "business"];
86
+ * const paths = useAstroPathsFromValues(categories, "category");
87
+ * // [{ params: { category: "tech" }, props: "tech" }, ...]
88
+ * ```
89
+ */
90
+ export declare function useAstroPathsFromValues<TParam extends string = "slug">(values: (string | number)[], param?: TParam): AstroPath<TParam, string | number>[];
91
+ /**
92
+ * Extract unique values from a collection, supporting single values or arrays.
93
+ *
94
+ * @param items - Collection items
95
+ * @param keyFrom - Function to extract value(s) from each item
96
+ * @returns Array of unique values
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * const posts = [{ tags: ["ts", "react"] }, { tags: ["ts", "vue"] }];
101
+ * const tags = useAstroExtractUniqueValues(posts, (p) => p.tags);
102
+ * // ["ts", "react", "vue"]
103
+ * ```
104
+ */
105
+ export declare function useAstroExtractUniqueValues<T, V>(items: T[], keyFrom: (item: T) => V | V[]): V[];
18
106
  //# sourceMappingURL=astro.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"astro.service.d.ts","sourceRoot":"","sources":["../../../src/adapters/astro/astro.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,qBAAa,YAAa,YAAW,aAAa;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IAEtC,OAAO,eAAiB;IAExB,OAAc,WAAW,IAAI,YAAY,CAKxC;IAEM,YAAY,GAAI,CAAC,EAAE,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,CAAC,SAC5D,CAAC,EAAE,YACD,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KACtC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAkB5B;IAEK,iBAAiB,GACvB,KAAK,GAAG,OAAO,EACf,MAAM,SAAS,MAAM,GAAG,MAAM,EAC9B,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,mBAElB,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,kBAC9D,MAAM,YACb,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAC/D,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAoBzD;IAEK,YAAY,GAAI,CAAC,SAChB,CAAC,EAAE,SACH,MAAM,YACH,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,KACpC,CAAC,GAAG,IAAI,CAQT;IAEK,qBAAqB,GAAI,CAAC,EAAE,MAAM,SAAS,MAAM,GAAG,MAAM,SACzD,CAAC,EAAE,6BAEH,MAAM,KACX,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAgBxC;IAEK,kBAAkB,GAAI,MAAM,SAAS,MAAM,GAAG,MAAM,UAClD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,UACpB,MAAM,KACX,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,CAKrC;IAEK,sBAAsB,GAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAG,CAAC,EAAE,CAGpF;CACF;AAGD,eAAO,MACN,YAAY,GA3GW,CAAC,EAAE,MAAM,SAAS,MAAM,WAAW,MAAM,6FA4GhE,iBAAiB,GApFhB,KAAK,YACL,MAAM,SAAS,MAAM,WACrB,MAAM,6DAEwB,MAAM,4DACpB,MAAM,mIAgFvB,YAAY,GAxDW,CAAC,qBAEhB,MAAM,0BACU,MAAM,GAAG,MAAM,4BAsDvC,qBAAqB,GA3CW,CAAC,EAAE,MAAM,SAAS,MAAM,sGA4CxD,kBAAkB,GAtBW,MAAM,SAAS,MAAM,mBACzC,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,2DAsB5B,sBAAsB,GAbW,CAAC,EAAE,CAAC,mDAcM,CAAC"}
1
+ {"version":3,"file":"astro.service.d.ts","sourceRoot":"","sources":["../../../src/adapters/astro/astro.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,CAAC,EAC9E,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,GAAE,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAM,GAC3C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAkB7B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC3C,KAAK,GAAG,OAAO,EACf,MAAM,SAAS,MAAM,GAAG,MAAM,EAC9B,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAEnC,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,EAC9E,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAM,GACpE,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAe1D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAClC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GACpC,CAAC,GAAG,IAAI,CAQV;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,GAAG,MAAM,EAC3E,KAAK,EAAE,CAAC,EAAE,EACV,QAAQ,SAAK,EACb,KAAK,GAAE,MAAyB,GAC9B,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAYzC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EACrE,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC3B,KAAK,GAAE,MAAyB,GAC9B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,CAKtC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAEhG"}
@@ -1,83 +1,153 @@
1
1
  /**
2
- * Astro adapter (Facade + Adapter + Singleton). Converts arbitrary collections
3
- * into the `getStaticPaths` format Astro expects, wrapped in a Safe Result.
2
+ * Convert a collection into Astro-compatible static paths.
3
+ *
4
+ * @param items - Collection items to convert
5
+ * @param options - Configuration for param name, value extraction and props
6
+ * @returns Array of Astro paths with params and props
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * // In Astro's getStaticPaths()
11
+ * const posts = await getCollection("blog");
12
+ * const paths = useAstroPathsFrom(posts, {
13
+ * param: "slug",
14
+ * valueFrom: (post) => post.slug,
15
+ * propsFrom: (post) => ({ title: post.data.title }),
16
+ * });
17
+ * // [{ params: { slug: "hello-world" }, props: { title: "Hello World" } }]
18
+ * ```
4
19
  */
5
- export class AstroService {
6
- static instance;
7
- constructor() { }
8
- static getInstance() {
9
- if (!AstroService.instance) {
10
- AstroService.instance = new AstroService();
11
- }
12
- return AstroService.instance;
20
+ export function useAstroPathsFrom(items, options = {}) {
21
+ const { param = "slug", valueFrom = (item) => {
22
+ const record = item;
23
+ return record?.slug ?? record?.id ?? "";
24
+ }, propsFrom = (item) => item, paramsFrom, } = options;
25
+ return items.map((item) => ({
26
+ params: (paramsFrom ? paramsFrom(item) : { [param]: String(valueFrom(item)) }),
27
+ props: propsFrom(item),
28
+ }));
29
+ }
30
+ /**
31
+ * Fetch a collection and transform it into safe Astro paths.
32
+ * Returns a result object instead of throwing on error.
33
+ *
34
+ * @param getCollectionFn - Astro's getCollection function
35
+ * @param collectionName - Name of the collection to fetch
36
+ * @param options - Path generation options
37
+ * @returns Safe result with data or error
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * export async function getStaticPaths() {
42
+ * const result = await useAstroGetStaticPaths(getCollection, "blog");
43
+ * if (result.ok) return result.data;
44
+ * TODO: traer el useLogger('error', result.error)
45
+ * console.error(result.error);
46
+ * return [];
47
+ * }
48
+ * ```
49
+ */
50
+ export async function useAstroGetStaticPaths(getCollectionFn, collectionName, options = {}) {
51
+ try {
52
+ const entries = await getCollectionFn(collectionName);
53
+ return { data: useAstroPathsFrom(entries, options), error: null, ok: true };
54
+ }
55
+ catch (error) {
56
+ return {
57
+ data: null,
58
+ error: {
59
+ message: `Error generating routes for collection "${collectionName}"`,
60
+ collectionName,
61
+ details: error instanceof Error ? error.message : String(error),
62
+ },
63
+ ok: false,
64
+ };
13
65
  }
14
- usePathsFrom = (items, options = {}) => {
15
- const { param = "slug", valueFrom = (item) => {
66
+ }
67
+ /**
68
+ * Find a collection entry by slug or custom key.
69
+ *
70
+ * @param items - Collection items to search
71
+ * @param value - Value to match (slug, id, etc.)
72
+ * @param keyFrom - Optional function to extract the key from an item
73
+ * @returns Matched item or null
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * const posts = await getCollection("blog");
78
+ * const post = useAstroFindEntry(posts, "hello-world");
79
+ * if (post) console.log(post.data.title);
80
+ * ```
81
+ */
82
+ export function useAstroFindEntry(items, value, keyFrom) {
83
+ const getKey = keyFrom ??
84
+ ((item) => {
16
85
  const record = item;
17
86
  return record?.slug ?? record?.id ?? "";
18
- }, propsFrom = (item) => item, paramsFrom, } = options;
19
- return items.map((item) => ({
20
- params: (paramsFrom ? paramsFrom(item) : { [param]: String(valueFrom(item)) }),
21
- props: propsFrom(item),
22
- }));
23
- };
24
- useGetStaticPaths = async (getCollectionFn, collectionName, options = {}) => {
25
- try {
26
- const entries = await getCollectionFn(collectionName);
27
- const paths = this.usePathsFrom(entries, options);
28
- return {
29
- data: paths,
30
- error: null,
31
- ok: true,
32
- };
33
- }
34
- catch (error) {
35
- return {
36
- data: null,
37
- error: {
38
- message: `Error generating routes for collection "${collectionName}"`,
39
- collectionName,
40
- details: error instanceof Error ? error.message : String(error),
41
- },
42
- ok: false,
43
- };
44
- }
45
- };
46
- useFindEntry = (items, value, keyFrom) => {
47
- const getKey = keyFrom ??
48
- ((item) => {
49
- const record = item;
50
- return record?.slug ?? record?.id ?? "";
51
- });
52
- return items.find((item) => String(getKey(item)) === value) ?? null;
53
- };
54
- useGeneratePagination = (items, pageSize = 10, param = "page") => {
55
- const totalPages = Math.max(1, Math.ceil(items.length / pageSize));
56
- return Array.from({ length: totalPages }, (_, i) => {
57
- const currentPage = i + 1;
58
- return {
59
- params: {
60
- [param]: currentPage === 1 ? undefined : String(currentPage),
61
- },
62
- props: {
63
- items: items.slice(i * pageSize, (i + 1) * pageSize),
64
- currentPage,
65
- totalPages,
66
- },
67
- };
68
87
  });
69
- };
70
- usePathsFromValues = (values, param = "slug") => {
71
- return values.map((value) => ({
72
- params: { [param]: String(value) },
73
- props: value,
74
- }));
75
- };
76
- useExtractUniqueValues = (items, keyFrom) => {
77
- const values = items.flatMap(keyFrom);
78
- return [...new Set(values)];
79
- };
88
+ return items.find((item) => String(getKey(item)) === value) ?? null;
89
+ }
90
+ /**
91
+ * Generate paginated Astro paths from a list of items.
92
+ *
93
+ * @param items - Items to paginate
94
+ * @param pageSize - Number of items per page
95
+ * @param param - URL param name for page number
96
+ * @returns Array of Astro paths with pagination props
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * const posts = await getCollection("blog");
101
+ * const pages = useAstroGeneratePagination(posts, 10);
102
+ * // [{ params: { page: undefined }, props: { items: [...], currentPage: 1, totalPages: 3 } },
103
+ * // { params: { page: "2" }, props: { items: [...], currentPage: 2, totalPages: 3 } }, ...]
104
+ * ```
105
+ */
106
+ export function useAstroGeneratePagination(items, pageSize = 10, param = "page") {
107
+ const totalPages = Math.max(1, Math.ceil(items.length / pageSize));
108
+ return Array.from({ length: totalPages }, (_, i) => {
109
+ const currentPage = i + 1;
110
+ return {
111
+ params: { [param]: currentPage === 1 ? undefined : String(currentPage) },
112
+ props: { items: items.slice(i * pageSize, (i + 1) * pageSize), currentPage, totalPages },
113
+ };
114
+ });
115
+ }
116
+ /**
117
+ * Convert simple values into Astro paths.
118
+ *
119
+ * @param values - Array of string or number values
120
+ * @param param - URL param name
121
+ * @returns Array of Astro paths
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * const categories = ["tech", "design", "business"];
126
+ * const paths = useAstroPathsFromValues(categories, "category");
127
+ * // [{ params: { category: "tech" }, props: "tech" }, ...]
128
+ * ```
129
+ */
130
+ export function useAstroPathsFromValues(values, param = "slug") {
131
+ return values.map((value) => ({
132
+ params: { [param]: String(value) },
133
+ props: value,
134
+ }));
135
+ }
136
+ /**
137
+ * Extract unique values from a collection, supporting single values or arrays.
138
+ *
139
+ * @param items - Collection items
140
+ * @param keyFrom - Function to extract value(s) from each item
141
+ * @returns Array of unique values
142
+ *
143
+ * @example
144
+ * ```ts
145
+ * const posts = [{ tags: ["ts", "react"] }, { tags: ["ts", "vue"] }];
146
+ * const tags = useAstroExtractUniqueValues(posts, (p) => p.tags);
147
+ * // ["ts", "react", "vue"]
148
+ * ```
149
+ */
150
+ export function useAstroExtractUniqueValues(items, keyFrom) {
151
+ return [...new Set(items.flatMap(keyFrom))];
80
152
  }
81
- // Singleton instance and destructured exports.
82
- export const { usePathsFrom, useGetStaticPaths, useFindEntry, useGeneratePagination, usePathsFromValues, useExtractUniqueValues, } = AstroService.getInstance();
83
153
  //# sourceMappingURL=astro.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"astro.service.js","sourceRoot":"","sources":["../../../src/adapters/astro/astro.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"astro.service.js","sourceRoot":"","sources":["../../../src/adapters/astro/astro.service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  export * from "./astro.service.js";
2
2
  export * from "./rss.service.js";
3
- export { default as RssService } from "./rss.service.js";
3
+ export * from "./seo.service.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/astro/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/astro/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export * from "./astro.service.js";
2
2
  export * from "./rss.service.js";
3
- export { default as RssService } from "./rss.service.js";
3
+ export * from "./seo.service.js";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/astro/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/astro/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -1,115 +1,95 @@
1
1
  import type { SiteConfig } from "../../config/site.config.js";
2
- import type { IRssService, RssConfig, RssItem, RssResult } from "../../types/index.js";
2
+ import type { RssConfig, RssItem, RssResult } from "../../types/index.js";
3
3
  /**
4
- * RSS service (Singleton + Facade). Generates RSS 2.0 feeds for Astro projects.
5
- * Pure implementation no external dependencies required.
4
+ * Generate RSS 2.0 XML string from a config.
5
+ * Returns a Safe Result (no throwing).
6
6
  *
7
- * For projects using `@astrojs/rss`, use `useCreateRssEndpoint` which returns
8
- * an Astro-compatible GET handler. For lighter setups, use `useGenerateRss`
9
- * to get the raw XML string.
7
+ * @param config - RSS configuration
8
+ * @returns Safe result with XML string or error
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const result = useAstroGenerateRss({
13
+ * title: "My Blog",
14
+ * description: "Posts about TypeScript",
15
+ * site: "https://example.com",
16
+ * items: [{ title: "Hello", pubDate: new Date(), link: "/blog/hello/" }],
17
+ * });
18
+ * if (result.ok) console.log(result.data); // XML string
19
+ * ```
20
+ */
21
+ export declare const useAstroGenerateRss: (config: RssConfig) => RssResult;
22
+ /**
23
+ * Generate an HTML `<link>` tag for the RSS feed.
24
+ *
25
+ * @param config - Config with title and optional xmlPath
26
+ * @returns HTML link tag string
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const tag = useAstroRssLinkTag({ title: "My Blog" });
31
+ * // <link rel="alternate" type="application/rss+xml" title="My Blog" href="/rss.xml" />
32
+ * ```
33
+ */
34
+ export declare const useAstroRssLinkTag: (config: Pick<RssConfig, "title" | "xmlPath">) => string;
35
+ /**
36
+ * Create an Astro-compatible GET endpoint handler for the RSS feed.
37
+ *
38
+ * @param config - RSS config with items (static array or async factory)
39
+ * @returns Astro GET handler function
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * // src/pages/rss.xml.ts
44
+ * import { useAstroCreateRssEndpoint } from "katanakit-js/adapters/astro";
45
+ * import { getCollection } from "astro:content";
46
+ *
47
+ * export const GET = useAstroCreateRssEndpoint({
48
+ * title: "My Blog",
49
+ * description: "Posts about TypeScript",
50
+ * site: "https://example.com",
51
+ * items: async () => {
52
+ * const posts = await getCollection("blog");
53
+ * return posts.map(post => ({
54
+ * title: post.data.title,
55
+ * pubDate: post.data.date,
56
+ * link: `/blog/${post.slug}/`,
57
+ * }));
58
+ * },
59
+ * });
60
+ * ```
10
61
  */
11
- export default class RssService implements IRssService {
12
- private static instance;
13
- private constructor();
14
- static getInstance(): RssService;
15
- /**
16
- * Generates the RSS XML string from a config.
17
- * Returns a Safe Result (no throwing).
18
- *
19
- * @example
20
- * ```ts
21
- * const { useGenerateRss } = RssService.getInstance();
22
- * const result = useGenerateRss({
23
- * title: "My Blog",
24
- * description: "Posts about TypeScript",
25
- * site: "https://example.com",
26
- * items: [{ title: "Hello", pubDate: new Date(), link: "/blog/hello/" }],
27
- * });
28
- * if (result.ok) console.log(result.data); // XML string
29
- * ```
30
- */
31
- useGenerateRss: (config: RssConfig) => RssResult;
32
- /**
33
- * Generates an HTML `<link>` tag for the RSS feed.
34
- * Paste this into your Astro layout's `<head>`.
35
- *
36
- * @example
37
- * ```ts
38
- * const { useRssLinkTag } = RssService.getInstance();
39
- * const tag = useRssLinkTag({ title: "My Blog" });
40
- * // <link rel="alternate" type="application/rss+xml" title="My Blog" href="/rss.xml" />
41
- * ```
42
- */
43
- useRssLinkTag: (config: Pick<RssConfig, "title" | "xmlPath">) => string;
44
- /**
45
- * Creates an Astro-compatible GET endpoint handler for the RSS feed.
46
- * Use this in `src/pages/rss.xml.ts` to serve the feed.
47
- *
48
- * `items` can be a static array or a function (sync/async) that returns items.
49
- * This allows using `getCollection` or any data source.
50
- *
51
- * @example
52
- * ```ts
53
- * // src/pages/rss.xml.ts
54
- * import { RssService } from "katanakit";
55
- * import { getCollection } from "astro:content";
56
- *
57
- * const { useCreateRssEndpoint } = RssService.getInstance();
58
- *
59
- * export const GET = useCreateRssEndpoint({
60
- * title: "My Blog",
61
- * description: "Posts about TypeScript",
62
- * site: "https://example.com",
63
- * items: async () => {
64
- * const posts = await getCollection("blog");
65
- * return posts.map(post => ({
66
- * title: post.data.title,
67
- * pubDate: post.data.date,
68
- * link: `/blog/${post.slug}/`,
69
- * description: post.data.description,
70
- * }));
71
- * },
72
- * });
73
- * ```
74
- */
75
- useCreateRssEndpoint: (config: Omit<RssConfig, "items"> & {
76
- items: RssItem[] | (() => RssItem[] | Promise<RssItem[]>);
77
- }) => ((context: {
78
- site?: URL | string;
79
- }) => Promise<Response>);
80
- /**
81
- * Convenience method: creates an RSS endpoint from a SiteConfig.
82
- * Reads title, description, site, and rss settings from the config.
83
- *
84
- * @example
85
- * ```ts
86
- * // src/pages/rss.xml.ts
87
- * import { RssService } from "katanakit";
88
- * import { siteConfig } from "@/config/site.config";
89
- * import { getCollection } from "astro:content";
90
- *
91
- * const { useCreateRssEndpointFromConfig } = RssService.getInstance();
92
- *
93
- * export const GET = useCreateRssEndpointFromConfig(siteConfig, async () => {
94
- * const posts = await getCollection("blog");
95
- * return posts.map(post => ({
96
- * title: post.data.title,
97
- * pubDate: post.data.date,
98
- * link: `/blog/${post.slug}/`,
99
- * description: post.data.description,
100
- * }));
101
- * });
102
- * ```
103
- */
104
- useCreateRssEndpointFromConfig: (siteConfig: SiteConfig, items: RssItem[] | (() => RssItem[] | Promise<RssItem[]>)) => ((context: {
105
- site?: URL | string;
106
- }) => Promise<Response>);
107
- }
108
- export declare const useGenerateRss: (config: RssConfig) => RssResult, useRssLinkTag: (config: Pick<RssConfig, "title" | "xmlPath">) => string, useCreateRssEndpoint: (config: Omit<RssConfig, "items"> & {
62
+ export declare const useAstroCreateRssEndpoint: (config: Omit<RssConfig, "items"> & {
109
63
  items: RssItem[] | (() => RssItem[] | Promise<RssItem[]>);
110
64
  }) => ((context: {
111
65
  site?: URL | string;
112
- }) => Promise<Response>), useCreateRssEndpointFromConfig: (siteConfig: SiteConfig, items: RssItem[] | (() => RssItem[] | Promise<RssItem[]>)) => ((context: {
66
+ }) => Promise<Response>);
67
+ /**
68
+ * Create an RSS endpoint from a SiteConfig.
69
+ * Reads title, description, site, and rss settings from the config.
70
+ *
71
+ * @param siteConfig - Site configuration object
72
+ * @param items - RSS items or async factory
73
+ * @returns Astro GET handler function
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * // src/pages/rss.xml.ts
78
+ * import { useAstroCreateRssEndpointFromConfig } from "katanakit-js/adapters/astro";
79
+ * import { siteConfig } from "@/config/site.config";
80
+ * import { getCollection } from "astro:content";
81
+ *
82
+ * export const GET = useAstroCreateRssEndpointFromConfig(siteConfig, async () => {
83
+ * const posts = await getCollection("blog");
84
+ * return posts.map(post => ({
85
+ * title: post.data.title,
86
+ * pubDate: post.data.date,
87
+ * link: `/blog/${post.slug}/`,
88
+ * }));
89
+ * });
90
+ * ```
91
+ */
92
+ export declare const useAstroCreateRssEndpointFromConfig: (siteConfig: SiteConfig, items: RssItem[] | (() => RssItem[] | Promise<RssItem[]>)) => ((context: {
113
93
  site?: URL | string;
114
94
  }) => Promise<Response>);
115
95
  //# sourceMappingURL=rss.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rss.service.d.ts","sourceRoot":"","sources":["../../../src/adapters/astro/rss.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AA2EvF;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,YAAW,WAAW;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAa;IAEpC,OAAO,eAAiB;IAExB,OAAc,WAAW,IAAI,UAAU,CAKtC;IAED;;;;;;;;;;;;;;;OAeG;IACI,cAAc,WAAY,SAAS,KAAG,SAAS,CAsBpD;IAEF;;;;;;;;;;OAUG;IACI,aAAa,WAAY,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC,KAAG,MAAM,CAG3E;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACI,oBAAoB,WAClB,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG;QAClC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;KAC1D,KACC,CAAC,CAAC,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAwC1D;IAEF;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACI,8BAA8B,eACxB,UAAU,SACf,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KACvD,CAAC,CAAC,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAS1D;CACF;AAGD,eAAO,MACN,cAAc,WA9JmB,SAAS,KAAG,SAAS,EA+JtD,aAAa,WA5HmB,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC,KAAG,MAAM,EA6H7E,oBAAoB,WAxFX,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG;IAClC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;CAC1D,KACC,CAAC,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,EAsF5D,8BAA8B,eAnBjB,UAAU,SACf,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KACvD,CAAC,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAkBpB,CAAC"}
1
+ {"version":3,"file":"rss.service.d.ts","sourceRoot":"","sources":["../../../src/adapters/astro/rss.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAuG1E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mBAAmB,WAAY,SAAS,KAAG,SAsBvD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,WAAY,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC,KAAG,MAGjF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,yBAAyB,WAC7B,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG;IAClC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;CAC1D,KACC,CAAC,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAsC1D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,mCAAmC,eACnC,UAAU,SACf,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KACvD,CAAC,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAS1D,CAAC"}