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,5 +1,8 @@
1
1
  /**
2
- * Escapes special XML characters in a string.
2
+ * Escape special XML characters in a string.
3
+ *
4
+ * @param text - Raw text to escape
5
+ * @returns XML-safe string
3
6
  */
4
7
  function escapeXml(text) {
5
8
  return text
@@ -10,15 +13,38 @@ function escapeXml(text) {
10
13
  .replace(/'/g, "'");
11
14
  }
12
15
  /**
13
- * Formats a date as RFC-822 (required by RSS 2.0).
16
+ * Prevent CDATA section breakout (`]]>` ends a CDATA block early).
17
+ *
18
+ * @param content - Raw content string
19
+ * @returns Sanitized content safe for CDATA
20
+ */
21
+ function sanitizeCdata(content) {
22
+ return content.replace(/]]>/g, "]]]]><![CDATA[>");
23
+ }
24
+ /**
25
+ * Sanitize raw XML fragments injected via `customData`.
26
+ *
27
+ * @param fragment - Raw XML fragment
28
+ * @returns Sanitized XML string
29
+ */
30
+ function sanitizeCustomXml(fragment) {
31
+ return fragment.replace(/]]>/g, "]]&gt;");
32
+ }
33
+ /**
34
+ * Format a date as RFC-822 (required by RSS 2.0).
35
+ *
36
+ * @param date - Date object or ISO string
37
+ * @returns RFC-822 formatted date string
14
38
  */
15
39
  function toRfc822(date) {
16
40
  const d = typeof date === "string" ? new Date(date) : date;
17
41
  return d.toUTCString();
18
42
  }
19
43
  /**
20
- * Builds the RSS 2.0 XML string from a config object.
21
- * Pure function — no I/O, no dependencies.
44
+ * Build the RSS 2.0 XML string from a config object.
45
+ *
46
+ * @param config - RSS configuration with title, items, site URL, etc.
47
+ * @returns Complete RSS 2.0 XML string
22
48
  */
23
49
  function buildRssXml(config) {
24
50
  const { title, description, site, items, language = "en", customData, xslUrl, lastBuildDate = true, } = config;
@@ -36,7 +62,7 @@ function buildRssXml(config) {
36
62
  <title>${escapeXml(item.title)}</title>
37
63
  <link>${escapeXml(link)}</link>
38
64
  <guid isPermaLink="true">${escapeXml(link)}</guid>
39
- <pubDate>${toRfc822(item.pubDate)}</pubDate>${item.description ? `\n <description>${escapeXml(item.description)}</description>` : ""}${item.content ? `\n <content:encoded><![CDATA[${item.content}]]></content:encoded>` : ""}${item.author ? `\n <author>${escapeXml(item.author)}</author>` : ""}${categories ? `\n${categories}` : ""}${item.customData ? `\n ${item.customData}` : ""}
65
+ <pubDate>${toRfc822(item.pubDate)}</pubDate>${item.description ? `\n <description>${escapeXml(item.description)}</description>` : ""}${item.content ? `\n <content:encoded><![CDATA[${sanitizeCdata(item.content)}]]></content:encoded>` : ""}${item.author ? `\n <author>${escapeXml(item.author)}</author>` : ""}${categories ? `\n${categories}` : ""}${item.customData ? `\n ${sanitizeCustomXml(item.customData)}` : ""}
40
66
  </item>`;
41
67
  })
42
68
  .join("\n");
@@ -49,183 +75,161 @@ ${xslProcessing}<rss version="2.0"
49
75
  <link>${escapeXml(siteUrl)}</link>
50
76
  <description>${escapeXml(description)}</description>
51
77
  <language>${escapeXml(language)}</language>
52
- <atom:link href="${escapeXml(siteUrl)}${config.xmlPath ?? "/rss.xml"}" rel="self" type="application/rss+xml" />${lastBuildDate ? `\n <lastBuildDate>${toRfc822(new Date())}</lastBuildDate>` : ""}${customData ? `\n ${customData}` : ""}
78
+ <atom:link href="${escapeXml(siteUrl)}${config.xmlPath ?? "/rss.xml"}" rel="self" type="application/rss+xml" />${lastBuildDate ? `\n <lastBuildDate>${toRfc822(new Date())}</lastBuildDate>` : ""}${customData ? `\n ${sanitizeCustomXml(customData)}` : ""}
53
79
  ${itemsXml}
54
80
  </channel>
55
81
  </rss>`;
56
82
  }
57
83
  /**
58
- * RSS service (Singleton + Facade). Generates RSS 2.0 feeds for Astro projects.
59
- * Pure implementation — no external dependencies required.
84
+ * Generate RSS 2.0 XML string from a config.
85
+ * Returns a Safe Result (no throwing).
86
+ *
87
+ * @param config - RSS configuration
88
+ * @returns Safe result with XML string or error
60
89
  *
61
- * For projects using `@astrojs/rss`, use `useCreateRssEndpoint` which returns
62
- * an Astro-compatible GET handler. For lighter setups, use `useGenerateRss`
63
- * to get the raw XML string.
90
+ * @example
91
+ * ```ts
92
+ * const result = useAstroGenerateRss({
93
+ * title: "My Blog",
94
+ * description: "Posts about TypeScript",
95
+ * site: "https://example.com",
96
+ * items: [{ title: "Hello", pubDate: new Date(), link: "/blog/hello/" }],
97
+ * });
98
+ * if (result.ok) console.log(result.data); // XML string
99
+ * ```
64
100
  */
65
- export default class RssService {
66
- static instance;
67
- constructor() { }
68
- static getInstance() {
69
- if (!RssService.instance) {
70
- RssService.instance = new RssService();
71
- }
72
- return RssService.instance;
73
- }
74
- /**
75
- * Generates the RSS XML string from a config.
76
- * Returns a Safe Result (no throwing).
77
- *
78
- * @example
79
- * ```ts
80
- * const { useGenerateRss } = RssService.getInstance();
81
- * const result = useGenerateRss({
82
- * title: "My Blog",
83
- * description: "Posts about TypeScript",
84
- * site: "https://example.com",
85
- * items: [{ title: "Hello", pubDate: new Date(), link: "/blog/hello/" }],
86
- * });
87
- * if (result.ok) console.log(result.data); // XML string
88
- * ```
89
- */
90
- useGenerateRss = (config) => {
91
- try {
92
- if (!config.title || !config.site) {
93
- return {
94
- data: null,
95
- error: { message: "RSS config requires 'title' and 'site'." },
96
- ok: false,
97
- };
98
- }
99
- const xml = buildRssXml(config);
100
- return { data: xml, error: null, ok: true };
101
- }
102
- catch (err) {
101
+ export const useAstroGenerateRss = (config) => {
102
+ try {
103
+ if (!config.title || !config.site) {
103
104
  return {
104
105
  data: null,
105
- error: {
106
- message: "Failed to generate RSS feed.",
107
- details: err instanceof Error ? err.message : String(err),
108
- },
106
+ error: { message: "RSS config requires 'title' and 'site'." },
109
107
  ok: false,
110
108
  };
111
109
  }
112
- };
113
- /**
114
- * Generates an HTML `<link>` tag for the RSS feed.
115
- * Paste this into your Astro layout's `<head>`.
116
- *
117
- * @example
118
- * ```ts
119
- * const { useRssLinkTag } = RssService.getInstance();
120
- * const tag = useRssLinkTag({ title: "My Blog" });
121
- * // <link rel="alternate" type="application/rss+xml" title="My Blog" href="/rss.xml" />
122
- * ```
123
- */
124
- useRssLinkTag = (config) => {
125
- const xmlPath = config.xmlPath ?? "/rss.xml";
126
- return `<link rel="alternate" type="application/rss+xml" title="${escapeXml(config.title)}" href="${escapeXml(xmlPath)}" />`;
127
- };
128
- /**
129
- * Creates an Astro-compatible GET endpoint handler for the RSS feed.
130
- * Use this in `src/pages/rss.xml.ts` to serve the feed.
131
- *
132
- * `items` can be a static array or a function (sync/async) that returns items.
133
- * This allows using `getCollection` or any data source.
134
- *
135
- * @example
136
- * ```ts
137
- * // src/pages/rss.xml.ts
138
- * import { RssService } from "katanakit";
139
- * import { getCollection } from "astro:content";
140
- *
141
- * const { useCreateRssEndpoint } = RssService.getInstance();
142
- *
143
- * export const GET = useCreateRssEndpoint({
144
- * title: "My Blog",
145
- * description: "Posts about TypeScript",
146
- * site: "https://example.com",
147
- * items: async () => {
148
- * const posts = await getCollection("blog");
149
- * return posts.map(post => ({
150
- * title: post.data.title,
151
- * pubDate: post.data.date,
152
- * link: `/blog/${post.slug}/`,
153
- * description: post.data.description,
154
- * }));
155
- * },
156
- * });
157
- * ```
158
- */
159
- useCreateRssEndpoint = (config) => {
160
- return async (context) => {
161
- try {
162
- // Resolve items (static array or factory function).
163
- const resolvedItems = typeof config.items === "function" ? await config.items() : config.items;
164
- // Use context.site as fallback for the site URL.
165
- const site = config.site || (context.site ? String(context.site) : "");
166
- if (!site) {
167
- return new Response(JSON.stringify({ error: "RSS feed requires a 'site' URL." }), {
168
- status: 500,
169
- headers: { "Content-Type": "application/json" },
170
- });
171
- }
172
- const result = useGenerateRss({ ...config, site, items: resolvedItems });
173
- if (!result.ok) {
174
- return new Response(JSON.stringify({ error: result.error.message }), {
175
- status: 500,
176
- headers: { "Content-Type": "application/json" },
177
- });
178
- }
179
- return new Response(result.data, {
180
- status: 200,
181
- headers: {
182
- "Content-Type": "application/xml; charset=utf-8",
183
- "Cache-Control": "public, max-age=3600",
184
- },
110
+ const xml = buildRssXml(config);
111
+ return { data: xml, error: null, ok: true };
112
+ }
113
+ catch (err) {
114
+ return {
115
+ data: null,
116
+ error: {
117
+ message: "Failed to generate RSS feed.",
118
+ details: err instanceof Error ? err.message : String(err),
119
+ },
120
+ ok: false,
121
+ };
122
+ }
123
+ };
124
+ /**
125
+ * Generate an HTML `<link>` tag for the RSS feed.
126
+ *
127
+ * @param config - Config with title and optional xmlPath
128
+ * @returns HTML link tag string
129
+ *
130
+ * @example
131
+ * ```ts
132
+ * const tag = useAstroRssLinkTag({ title: "My Blog" });
133
+ * // <link rel="alternate" type="application/rss+xml" title="My Blog" href="/rss.xml" />
134
+ * ```
135
+ */
136
+ export const useAstroRssLinkTag = (config) => {
137
+ const xmlPath = config.xmlPath ?? "/rss.xml";
138
+ return `<link rel="alternate" type="application/rss+xml" title="${escapeXml(config.title)}" href="${escapeXml(xmlPath)}" />`;
139
+ };
140
+ /**
141
+ * Create an Astro-compatible GET endpoint handler for the RSS feed.
142
+ *
143
+ * @param config - RSS config with items (static array or async factory)
144
+ * @returns Astro GET handler function
145
+ *
146
+ * @example
147
+ * ```ts
148
+ * // src/pages/rss.xml.ts
149
+ * import { useAstroCreateRssEndpoint } from "katanakit-js/adapters/astro";
150
+ * import { getCollection } from "astro:content";
151
+ *
152
+ * export const GET = useAstroCreateRssEndpoint({
153
+ * title: "My Blog",
154
+ * description: "Posts about TypeScript",
155
+ * site: "https://example.com",
156
+ * items: async () => {
157
+ * const posts = await getCollection("blog");
158
+ * return posts.map(post => ({
159
+ * title: post.data.title,
160
+ * pubDate: post.data.date,
161
+ * link: `/blog/${post.slug}/`,
162
+ * }));
163
+ * },
164
+ * });
165
+ * ```
166
+ */
167
+ export const useAstroCreateRssEndpoint = (config) => {
168
+ return async (context) => {
169
+ try {
170
+ const resolvedItems = typeof config.items === "function" ? await config.items() : config.items;
171
+ const site = config.site || (context.site ? String(context.site) : "");
172
+ if (!site) {
173
+ return new Response(JSON.stringify({ error: "RSS feed requires a 'site' URL." }), {
174
+ status: 500,
175
+ headers: { "Content-Type": "application/json" },
185
176
  });
186
177
  }
187
- catch (err) {
188
- return new Response(JSON.stringify({
189
- error: err instanceof Error ? err.message : "Unknown error generating RSS.",
190
- }), { status: 500, headers: { "Content-Type": "application/json" } });
178
+ const result = useAstroGenerateRss({ ...config, site, items: resolvedItems });
179
+ if (!result.ok) {
180
+ return new Response(JSON.stringify({ error: result.error.message }), {
181
+ status: 500,
182
+ headers: { "Content-Type": "application/json" },
183
+ });
191
184
  }
192
- };
193
- };
194
- /**
195
- * Convenience method: creates an RSS endpoint from a SiteConfig.
196
- * Reads title, description, site, and rss settings from the config.
197
- *
198
- * @example
199
- * ```ts
200
- * // src/pages/rss.xml.ts
201
- * import { RssService } from "katanakit";
202
- * import { siteConfig } from "@/config/site.config";
203
- * import { getCollection } from "astro:content";
204
- *
205
- * const { useCreateRssEndpointFromConfig } = RssService.getInstance();
206
- *
207
- * export const GET = useCreateRssEndpointFromConfig(siteConfig, async () => {
208
- * const posts = await getCollection("blog");
209
- * return posts.map(post => ({
210
- * title: post.data.title,
211
- * pubDate: post.data.date,
212
- * link: `/blog/${post.slug}/`,
213
- * description: post.data.description,
214
- * }));
215
- * });
216
- * ```
217
- */
218
- useCreateRssEndpointFromConfig = (siteConfig, items) => {
219
- return this.useCreateRssEndpoint({
220
- title: siteConfig.rss.title ?? siteConfig.title,
221
- description: siteConfig.rss.description ?? siteConfig.description,
222
- site: siteConfig.site,
223
- items,
224
- xmlPath: siteConfig.rss.path,
225
- language: siteConfig.lang,
226
- });
185
+ return new Response(result.data, {
186
+ status: 200,
187
+ headers: {
188
+ "Content-Type": "application/xml; charset=utf-8",
189
+ "Cache-Control": "public, max-age=3600",
190
+ },
191
+ });
192
+ }
193
+ catch (err) {
194
+ return new Response(JSON.stringify({
195
+ error: err instanceof Error ? err.message : "Unknown error generating RSS.",
196
+ }), { status: 500, headers: { "Content-Type": "application/json" } });
197
+ }
227
198
  };
228
- }
229
- // Singleton instance and destructured exports.
230
- export const { useGenerateRss, useRssLinkTag, useCreateRssEndpoint, useCreateRssEndpointFromConfig, } = RssService.getInstance();
199
+ };
200
+ /**
201
+ * Create an RSS endpoint from a SiteConfig.
202
+ * Reads title, description, site, and rss settings from the config.
203
+ *
204
+ * @param siteConfig - Site configuration object
205
+ * @param items - RSS items or async factory
206
+ * @returns Astro GET handler function
207
+ *
208
+ * @example
209
+ * ```ts
210
+ * // src/pages/rss.xml.ts
211
+ * import { useAstroCreateRssEndpointFromConfig } from "katanakit-js/adapters/astro";
212
+ * import { siteConfig } from "@/config/site.config";
213
+ * import { getCollection } from "astro:content";
214
+ *
215
+ * export const GET = useAstroCreateRssEndpointFromConfig(siteConfig, async () => {
216
+ * const posts = await getCollection("blog");
217
+ * return posts.map(post => ({
218
+ * title: post.data.title,
219
+ * pubDate: post.data.date,
220
+ * link: `/blog/${post.slug}/`,
221
+ * }));
222
+ * });
223
+ * ```
224
+ */
225
+ export const useAstroCreateRssEndpointFromConfig = (siteConfig, items) => {
226
+ return useAstroCreateRssEndpoint({
227
+ title: siteConfig.rss.title ?? siteConfig.title,
228
+ description: siteConfig.rss.description ?? siteConfig.description,
229
+ site: siteConfig.site,
230
+ items,
231
+ xmlPath: siteConfig.rss.path,
232
+ language: siteConfig.lang,
233
+ });
234
+ };
231
235
  //# sourceMappingURL=rss.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rss.service.js","sourceRoot":"","sources":["../../../src/adapters/astro/rss.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rss.service.js","sourceRoot":"","sources":["../../../src/adapters/astro/rss.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Astro convenience re-exports of the framework-agnostic SEO helpers.
3
+ * Prefer importing from `katanakit-js` directly.
4
+ *
5
+ * Inside Nuxt apps use Nuxt's own `useSeoMeta` / `useHead` instead.
6
+ */
7
+ export type { SeoMeta, SeoMetaFlat, SeoMetaInput, SeoTagNode, SeoTagResult, SeoTagsResult, UseSeoMetaBase, UseSeoMetaOptions, } from "../../config/seo.service.js";
8
+ export { useApplySeoTag, useGenerateMetaTags, useHeadTags, useRssHeadLink, useSeoMeta, useSeoTag, useSeoTags, useTitle, } from "../../config/seo.service.js";
9
+ export { type SiteConfig, siteConfig } from "../../config/site.config.js";
10
+ //# sourceMappingURL=seo.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.service.d.ts","sourceRoot":"","sources":["../../../src/adapters/astro/seo.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,YAAY,EACX,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,iBAAiB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,UAAU,EACV,SAAS,EACT,UAAU,EACV,QAAQ,GACR,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { useApplySeoTag, useGenerateMetaTags, useHeadTags, useRssHeadLink, useSeoMeta, useSeoTag, useSeoTags, useTitle, } from "../../config/seo.service.js";
2
+ export { siteConfig } from "../../config/site.config.js";
3
+ //# sourceMappingURL=seo.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.service.js","sourceRoot":"","sources":["../../../src/adapters/astro/seo.service.ts"],"names":[],"mappings":"AAgBA,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,UAAU,EACV,SAAS,EACT,UAAU,EACV,QAAQ,GACR,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAmB,UAAU,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1,4 +1,33 @@
1
1
  import type { Application } from "express";
2
- export declare const useGetApp: () => Application, useStart: () => void;
2
+ import { useExpressGetApp, useExpressStart } from "./server.js";
3
+ /**
4
+ * Re-exported Express application instance.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { app } from "katanakit-js/adapters/express";
9
+ * app.get("/custom", (req, res) => res.json({ ok: true }));
10
+ * ```
11
+ */
3
12
  export declare const app: Application;
13
+ /**
14
+ * Get the Express application instance.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { useGetApp } from "katanakit-js/adapters/express";
19
+ * const expressApp = useGetApp();
20
+ * ```
21
+ */
22
+ export declare const useGetApp: typeof useExpressGetApp;
23
+ /**
24
+ * Start the Express HTTP server.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { useStart } from "katanakit-js/adapters/express";
29
+ * useStart(3000, "localhost");
30
+ * ```
31
+ */
32
+ export declare const useStart: typeof useExpressStart;
4
33
  //# sourceMappingURL=app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,eAAO,MAAQ,SAAS,qBAAE,QAAQ,YAA+C,CAAC;AAElF,eAAO,MAAM,GAAG,EAAE,WAAyB,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAoB,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAElF;;;;;;;;GAQG;AACH,eAAO,MAAM,GAAG,EAAE,WAAgC,CAAC;AAEnD;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,yBAAmB,CAAC;AAE1C;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,wBAAkB,CAAC"}
@@ -1,4 +1,32 @@
1
- import ServerExpress from "./server.js";
2
- export const { useGetApp, useStart } = ServerExpress.getInstance();
3
- export const app = useGetApp();
1
+ import { useExpressCreate, useExpressGetApp, useExpressStart } from "./server.js";
2
+ /**
3
+ * Re-exported Express application instance.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import { app } from "katanakit-js/adapters/express";
8
+ * app.get("/custom", (req, res) => res.json({ ok: true }));
9
+ * ```
10
+ */
11
+ export const app = useExpressCreate();
12
+ /**
13
+ * Get the Express application instance.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * import { useGetApp } from "katanakit-js/adapters/express";
18
+ * const expressApp = useGetApp();
19
+ * ```
20
+ */
21
+ export const useGetApp = useExpressGetApp;
22
+ /**
23
+ * Start the Express HTTP server.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { useStart } from "katanakit-js/adapters/express";
28
+ * useStart(3000, "localhost");
29
+ * ```
30
+ */
31
+ export const useStart = useExpressStart;
4
32
  //# sourceMappingURL=app.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/adapters/express/app.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAkB,aAAa,CAAC,WAAW,EAAE,CAAC;AAElF,MAAM,CAAC,MAAM,GAAG,GAAgB,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/adapters/express/app.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAElF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,GAAG,GAAgB,gBAAgB,EAAE,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAE1C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { app, useGetApp, useStart } from "./app.js";
2
- export { ProductController } from "./products.controller.js";
2
+ export { useExpressCreateProduct, useExpressDeleteProduct, useExpressGetAllProducts, useExpressGetProductById, useExpressUpdateProduct, } from "./products.controller.js";
3
3
  export { default as router } from "./router.js";
4
- export { default as ServerExpress } from "./server.js";
4
+ export { useExpressCreate, useExpressGetApp, useExpressStart } from "./server.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { app, useGetApp, useStart } from "./app.js";
2
- export { ProductController } from "./products.controller.js";
2
+ export { useExpressCreateProduct, useExpressDeleteProduct, useExpressGetAllProducts, useExpressGetProductById, useExpressUpdateProduct, } from "./products.controller.js";
3
3
  export { default as router } from "./router.js";
4
- export { default as ServerExpress } from "./server.js";
4
+ export { useExpressCreate, useExpressGetApp, useExpressStart } from "./server.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -1,3 +1,3 @@
1
- import ServerExpress from "./server.js";
2
- ServerExpress.getInstance().useStart();
1
+ import { useExpressStart } from "./server.js";
2
+ useExpressStart();
3
3
  //# sourceMappingURL=main.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/adapters/express/main.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,aAAa,CAAC;AAExC,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/adapters/express/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAe,EAAE,CAAC"}