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.
- package/README.md +72 -437
- package/dist/adapters/astro/astro.service.d.ts +103 -15
- package/dist/adapters/astro/astro.service.d.ts.map +1 -1
- package/dist/adapters/astro/astro.service.js +145 -75
- package/dist/adapters/astro/astro.service.js.map +1 -1
- package/dist/adapters/astro/index.d.ts +1 -1
- package/dist/adapters/astro/index.d.ts.map +1 -1
- package/dist/adapters/astro/index.js +1 -1
- package/dist/adapters/astro/index.js.map +1 -1
- package/dist/adapters/astro/rss.service.d.ts +85 -105
- package/dist/adapters/astro/rss.service.d.ts.map +1 -1
- package/dist/adapters/astro/rss.service.js +172 -168
- package/dist/adapters/astro/rss.service.js.map +1 -1
- package/dist/adapters/astro/seo.service.d.ts +10 -0
- package/dist/adapters/astro/seo.service.d.ts.map +1 -0
- package/dist/adapters/astro/seo.service.js +3 -0
- package/dist/adapters/astro/seo.service.js.map +1 -0
- package/dist/adapters/express/app.d.ts +30 -1
- package/dist/adapters/express/app.d.ts.map +1 -1
- package/dist/adapters/express/app.js +31 -3
- package/dist/adapters/express/app.js.map +1 -1
- package/dist/adapters/express/index.d.ts +2 -2
- package/dist/adapters/express/index.d.ts.map +1 -1
- package/dist/adapters/express/index.js +2 -2
- package/dist/adapters/express/index.js.map +1 -1
- package/dist/adapters/express/main.js +2 -2
- package/dist/adapters/express/main.js.map +1 -1
- package/dist/adapters/express/products.controller.d.ts +67 -8
- package/dist/adapters/express/products.controller.d.ts.map +1 -1
- package/dist/adapters/express/products.controller.js +105 -49
- package/dist/adapters/express/products.controller.js.map +1 -1
- package/dist/adapters/express/server.d.ts +37 -13
- package/dist/adapters/express/server.d.ts.map +1 -1
- package/dist/adapters/express/server.js +118 -53
- package/dist/adapters/express/server.js.map +1 -1
- package/dist/adapters/nuxt/nuxt.service.d.ts +8 -6
- package/dist/adapters/nuxt/nuxt.service.d.ts.map +1 -1
- package/dist/adapters/nuxt/nuxt.service.js +34 -10
- package/dist/adapters/nuxt/nuxt.service.js.map +1 -1
- package/dist/adapters/vue/vue.service.d.ts +5 -2
- package/dist/adapters/vue/vue.service.d.ts.map +1 -1
- package/dist/adapters/vue/vue.service.js +41 -7
- package/dist/adapters/vue/vue.service.js.map +1 -1
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/seo-meta.types.d.ts +177 -0
- package/dist/config/seo-meta.types.d.ts.map +1 -0
- package/dist/config/seo-meta.types.js +11 -0
- package/dist/config/seo-meta.types.js.map +1 -0
- package/dist/config/seo.service.d.ts +41 -58
- package/dist/config/seo.service.d.ts.map +1 -1
- package/dist/config/seo.service.js +468 -136
- package/dist/config/seo.service.js.map +1 -1
- package/dist/config/site.config.d.ts +10 -50
- package/dist/config/site.config.d.ts.map +1 -1
- package/dist/config/site.config.js +8 -36
- package/dist/config/site.config.js.map +1 -1
- package/dist/core/index.d.ts +1 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/services/dates.service.d.ts +149 -22
- package/dist/core/services/dates.service.d.ts.map +1 -1
- package/dist/core/services/dates.service.js +201 -54
- package/dist/core/services/dates.service.js.map +1 -1
- package/dist/core/services/error.service.d.ts +32 -20
- package/dist/core/services/error.service.d.ts.map +1 -1
- package/dist/core/services/error.service.js +44 -32
- package/dist/core/services/error.service.js.map +1 -1
- package/dist/core/services/formatter.service.d.ts +245 -35
- package/dist/core/services/formatter.service.d.ts.map +1 -1
- package/dist/core/services/formatter.service.js +281 -57
- package/dist/core/services/formatter.service.js.map +1 -1
- package/dist/core/services/generator.service.d.ts +115 -26
- package/dist/core/services/generator.service.d.ts.map +1 -1
- package/dist/core/services/generator.service.js +191 -56
- package/dist/core/services/generator.service.js.map +1 -1
- package/dist/core/services/geometry.service.d.ts +369 -39
- package/dist/core/services/geometry.service.d.ts.map +1 -1
- package/dist/core/services/geometry.service.js +424 -66
- package/dist/core/services/geometry.service.js.map +1 -1
- package/dist/core/services/http.service.d.ts +244 -21
- package/dist/core/services/http.service.d.ts.map +1 -1
- package/dist/core/services/http.service.js +419 -98
- package/dist/core/services/http.service.js.map +1 -1
- package/dist/core/services/logger.service.d.ts +95 -29
- package/dist/core/services/logger.service.d.ts.map +1 -1
- package/dist/core/services/logger.service.js +167 -41
- package/dist/core/services/logger.service.js.map +1 -1
- package/dist/core/services/reactive.service.d.ts +146 -19
- package/dist/core/services/reactive.service.d.ts.map +1 -1
- package/dist/core/services/reactive.service.js +278 -137
- package/dist/core/services/reactive.service.js.map +1 -1
- package/dist/core/services/timing.service.d.ts +142 -20
- package/dist/core/services/timing.service.d.ts.map +1 -1
- package/dist/core/services/timing.service.js +324 -185
- package/dist/core/services/timing.service.js.map +1 -1
- package/dist/core/services/utils.service.d.ts +228 -43
- package/dist/core/services/utils.service.d.ts.map +1 -1
- package/dist/core/services/utils.service.js +305 -125
- package/dist/core/services/utils.service.js.map +1 -1
- package/dist/infrastructure/dom/dom.service.d.ts +307 -44
- package/dist/infrastructure/dom/dom.service.d.ts.map +1 -1
- package/dist/infrastructure/dom/dom.service.js +408 -129
- package/dist/infrastructure/dom/dom.service.js.map +1 -1
- package/dist/infrastructure/index.d.ts +0 -3
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +0 -3
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/infrastructure/observer/observer.service.d.ts +124 -31
- package/dist/infrastructure/observer/observer.service.d.ts.map +1 -1
- package/dist/infrastructure/observer/observer.service.js +227 -131
- package/dist/infrastructure/observer/observer.service.js.map +1 -1
- package/dist/infrastructure/sensors/sensors.service.d.ts +154 -22
- package/dist/infrastructure/sensors/sensors.service.d.ts.map +1 -1
- package/dist/infrastructure/sensors/sensors.service.js +264 -112
- package/dist/infrastructure/sensors/sensors.service.js.map +1 -1
- package/dist/infrastructure/storage/storage.service.d.ts +123 -45
- package/dist/infrastructure/storage/storage.service.d.ts.map +1 -1
- package/dist/infrastructure/storage/storage.service.js +236 -66
- package/dist/infrastructure/storage/storage.service.js.map +1 -1
- package/dist/infrastructure/theme/theme.service.d.ts +93 -29
- package/dist/infrastructure/theme/theme.service.d.ts.map +1 -1
- package/dist/infrastructure/theme/theme.service.js +198 -96
- package/dist/infrastructure/theme/theme.service.js.map +1 -1
- package/dist/infrastructure/viewport/viewport.service.d.ts +233 -35
- package/dist/infrastructure/viewport/viewport.service.d.ts.map +1 -1
- package/dist/infrastructure/viewport/viewport.service.js +358 -139
- package/dist/infrastructure/viewport/viewport.service.js.map +1 -1
- package/dist/infrastructure/worker/worker.service.d.ts +84 -38
- package/dist/infrastructure/worker/worker.service.d.ts.map +1 -1
- package/dist/infrastructure/worker/worker.service.js +234 -133
- package/dist/infrastructure/worker/worker.service.js.map +1 -1
- package/dist/prisma/index.d.ts +2 -0
- package/dist/prisma/index.d.ts.map +1 -0
- package/dist/prisma/index.js +2 -0
- package/dist/prisma/index.js.map +1 -0
- package/dist/prisma/schema.json +11 -33
- package/dist/prisma/use-prisma.d.ts +68 -0
- package/dist/prisma/use-prisma.d.ts.map +1 -0
- package/dist/prisma/use-prisma.js +82 -0
- package/dist/prisma/use-prisma.js.map +1 -0
- package/dist/types/index.d.ts +20 -12
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +124 -125
- package/CHANGELOG.md +0 -101
|
@@ -1,18 +1,106 @@
|
|
|
1
|
-
import type { AstroPath, AstroServiceResult, CollectionEntryLike,
|
|
1
|
+
import type { AstroPath, AstroServiceResult, CollectionEntryLike, PaginationProps, PathsOptions } from "../../types/index.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
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
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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,
|
|
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
|
-
*
|
|
3
|
-
*
|
|
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
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
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
|
-
|
|
15
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"astro.service.js","sourceRoot":"","sources":["../../../src/adapters/astro/astro.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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 +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,
|
|
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 {
|
|
2
|
+
import type { RssConfig, RssItem, RssResult } from "../../types/index.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Generate RSS 2.0 XML string from a config.
|
|
5
|
+
* Returns a Safe Result (no throwing).
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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
|
|
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>)
|
|
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,
|
|
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"}
|