@navios/adapter-xml 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +532 -0
  3. package/bun-plugin.mts +129 -0
  4. package/bunPlugin.cache +1 -0
  5. package/bunfig.toml +3 -0
  6. package/dist/bun-plugin.d.mts +4 -0
  7. package/dist/bun-plugin.d.mts.map +1 -0
  8. package/dist/e2e/bun/xml-stream.spec.d.ts +2 -0
  9. package/dist/e2e/bun/xml-stream.spec.d.ts.map +1 -0
  10. package/dist/e2e/fastify/xml-stream.spec.d.ts +2 -0
  11. package/dist/e2e/fastify/xml-stream.spec.d.ts.map +1 -0
  12. package/dist/src/adapters/index.d.mts +2 -0
  13. package/dist/src/adapters/index.d.mts.map +1 -0
  14. package/dist/src/adapters/xml-stream-adapter.service.d.mts +21 -0
  15. package/dist/src/adapters/xml-stream-adapter.service.d.mts.map +1 -0
  16. package/dist/src/decorators/component.decorator.d.mts +17 -0
  17. package/dist/src/decorators/component.decorator.d.mts.map +1 -0
  18. package/dist/src/decorators/component.decorator.spec.d.mts +2 -0
  19. package/dist/src/decorators/component.decorator.spec.d.mts.map +1 -0
  20. package/dist/src/decorators/index.d.mts +4 -0
  21. package/dist/src/decorators/index.d.mts.map +1 -0
  22. package/dist/src/decorators/xml-stream.decorator.d.mts +42 -0
  23. package/dist/src/decorators/xml-stream.decorator.d.mts.map +1 -0
  24. package/dist/src/define-environment.d.mts +31 -0
  25. package/dist/src/define-environment.d.mts.map +1 -0
  26. package/dist/src/handlers/index.d.mts +2 -0
  27. package/dist/src/handlers/index.d.mts.map +1 -0
  28. package/dist/src/handlers/xml-stream.d.mts +23 -0
  29. package/dist/src/handlers/xml-stream.d.mts.map +1 -0
  30. package/dist/src/index.d.mts +12 -0
  31. package/dist/src/index.d.mts.map +1 -0
  32. package/dist/src/jsx-dev-runtime.d.mts +5 -0
  33. package/dist/src/jsx-dev-runtime.d.mts.map +1 -0
  34. package/dist/src/jsx-runtime.d.mts +3 -0
  35. package/dist/src/jsx-runtime.d.mts.map +1 -0
  36. package/dist/src/jsx.d.mts +18 -0
  37. package/dist/src/jsx.d.mts.map +1 -0
  38. package/dist/src/runtime/create-element.d.mts +25 -0
  39. package/dist/src/runtime/create-element.d.mts.map +1 -0
  40. package/dist/src/runtime/fragment.d.mts +2 -0
  41. package/dist/src/runtime/fragment.d.mts.map +1 -0
  42. package/dist/src/runtime/index.d.mts +5 -0
  43. package/dist/src/runtime/index.d.mts.map +1 -0
  44. package/dist/src/runtime/render-to-xml.d.mts +20 -0
  45. package/dist/src/runtime/render-to-xml.d.mts.map +1 -0
  46. package/dist/src/runtime/render-to-xml.spec.d.mts +2 -0
  47. package/dist/src/runtime/render-to-xml.spec.d.mts.map +1 -0
  48. package/dist/src/runtime/special-nodes.d.mts +24 -0
  49. package/dist/src/runtime/special-nodes.d.mts.map +1 -0
  50. package/dist/src/tags/define-tag.d.mts +33 -0
  51. package/dist/src/tags/define-tag.d.mts.map +1 -0
  52. package/dist/src/tags/define-tag.spec.d.mts +2 -0
  53. package/dist/src/tags/define-tag.spec.d.mts.map +1 -0
  54. package/dist/src/tags/index.d.mts +3 -0
  55. package/dist/src/tags/index.d.mts.map +1 -0
  56. package/dist/src/types/component.d.mts +15 -0
  57. package/dist/src/types/component.d.mts.map +1 -0
  58. package/dist/src/types/config.d.mts +10 -0
  59. package/dist/src/types/config.d.mts.map +1 -0
  60. package/dist/src/types/index.d.mts +5 -0
  61. package/dist/src/types/index.d.mts.map +1 -0
  62. package/dist/src/types/xml-node.d.mts +35 -0
  63. package/dist/src/types/xml-node.d.mts.map +1 -0
  64. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  65. package/dist/tsconfig.spec.tsbuildinfo +1 -0
  66. package/dist/tsconfig.tsbuildinfo +1 -0
  67. package/dist/tsup.config.d.mts +3 -0
  68. package/dist/tsup.config.d.mts.map +1 -0
  69. package/dist/vitest.config.d.mts +3 -0
  70. package/dist/vitest.config.d.mts.map +1 -0
  71. package/dist/vitest.e2e.fastify.config.d.mts +3 -0
  72. package/dist/vitest.e2e.fastify.config.d.mts.map +1 -0
  73. package/e2e/bun/xml-stream.spec.tsx +553 -0
  74. package/e2e/fastify/xml-stream.spec.tsx +569 -0
  75. package/jsx.d.ts +42 -0
  76. package/lib/_tsup-dts-rollup.d.mts +414 -0
  77. package/lib/_tsup-dts-rollup.d.ts +414 -0
  78. package/lib/chunk-6OR6LGJA.mjs +153 -0
  79. package/lib/chunk-6OR6LGJA.mjs.map +1 -0
  80. package/lib/index.d.mts +29 -0
  81. package/lib/index.d.ts +29 -0
  82. package/lib/index.js +376 -0
  83. package/lib/index.js.map +1 -0
  84. package/lib/index.mjs +256 -0
  85. package/lib/index.mjs.map +1 -0
  86. package/lib/jsx-dev-runtime.d.mts +4 -0
  87. package/lib/jsx-dev-runtime.d.ts +4 -0
  88. package/lib/jsx-dev-runtime.js +61 -0
  89. package/lib/jsx-dev-runtime.js.map +1 -0
  90. package/lib/jsx-dev-runtime.mjs +9 -0
  91. package/lib/jsx-dev-runtime.mjs.map +1 -0
  92. package/lib/jsx-runtime.d.mts +3 -0
  93. package/lib/jsx-runtime.d.ts +3 -0
  94. package/lib/jsx-runtime.js +57 -0
  95. package/lib/jsx-runtime.js.map +1 -0
  96. package/lib/jsx-runtime.mjs +3 -0
  97. package/lib/jsx-runtime.mjs.map +1 -0
  98. package/lib/jsx.d.mts +1 -0
  99. package/lib/jsx.d.ts +1 -0
  100. package/lib/jsx.js +4 -0
  101. package/lib/jsx.js.map +1 -0
  102. package/lib/jsx.mjs +3 -0
  103. package/lib/jsx.mjs.map +1 -0
  104. package/package.json +80 -0
  105. package/project.json +91 -0
  106. package/src/adapters/index.mts +1 -0
  107. package/src/adapters/xml-stream-adapter.service.mts +121 -0
  108. package/src/decorators/component.decorator.mts +102 -0
  109. package/src/decorators/component.decorator.spec.mts +345 -0
  110. package/src/decorators/index.mts +4 -0
  111. package/src/decorators/xml-stream.decorator.mts +93 -0
  112. package/src/define-environment.mts +40 -0
  113. package/src/handlers/index.mts +1 -0
  114. package/src/handlers/xml-stream.mts +31 -0
  115. package/src/index.mts +41 -0
  116. package/src/jsx-dev-runtime.mts +8 -0
  117. package/src/jsx-runtime.mts +2 -0
  118. package/src/jsx.mts +25 -0
  119. package/src/runtime/create-element.mts +113 -0
  120. package/src/runtime/fragment.mts +1 -0
  121. package/src/runtime/index.mts +4 -0
  122. package/src/runtime/render-to-xml.mts +214 -0
  123. package/src/runtime/render-to-xml.spec.mts +360 -0
  124. package/src/runtime/special-nodes.mts +32 -0
  125. package/src/tags/define-tag.mts +54 -0
  126. package/src/tags/define-tag.spec.mts +250 -0
  127. package/src/tags/index.mts +2 -0
  128. package/src/types/component.mts +16 -0
  129. package/src/types/config.mts +15 -0
  130. package/src/types/index.mts +23 -0
  131. package/src/types/jsx.d.ts +21 -0
  132. package/src/types/xml-node.mts +50 -0
  133. package/tsconfig.json +24 -0
  134. package/tsconfig.lib.json +8 -0
  135. package/tsconfig.spec.json +25 -0
  136. package/tsup.config.mts +18 -0
  137. package/vitest.config.mts +9 -0
  138. package/vitest.e2e.fastify.config.mts +29 -0
@@ -0,0 +1,414 @@
1
+ import type { AbstractHttpHandlerAdapterInterface } from '@navios/core';
2
+ import type { AnyInjectableType } from '@navios/di';
3
+ import type { BaseStreamConfig } from '@navios/builder';
4
+ import type { ClassType } from '@navios/di';
5
+ import { Container } from '@navios/di';
6
+ import type { EndpointFunctionArgs } from '@navios/builder';
7
+ import type { HandlerMetadata } from '@navios/core';
8
+ import type { HttpMethod } from '@navios/builder';
9
+ import { InjectionToken } from '@navios/di';
10
+ import type { Registry } from '@navios/di';
11
+ import type { RequestContextHolder } from '@navios/di';
12
+ import type { Util_FlatObject } from '@navios/builder';
13
+ import type { z } from 'zod/v4';
14
+ import type { ZodObject } from 'zod/v4';
15
+ import type { ZodRawShape } from 'zod/v4';
16
+ import type { ZodType } from 'zod/v4';
17
+
18
+ /** Union type for all possible node types */
19
+ declare type AnyXmlNode = XmlNode | AsyncXmlNode | CDataNode | RawXmlNode | ClassComponentNode | string | number | null | undefined;
20
+ export { AnyXmlNode }
21
+ export { AnyXmlNode as AnyXmlNode_alias_1 }
22
+ export { AnyXmlNode as AnyXmlNode_alias_2 }
23
+
24
+ declare const AsyncComponent: unique symbol;
25
+ export { AsyncComponent }
26
+ export { AsyncComponent as AsyncComponent_alias_1 }
27
+ export { AsyncComponent as AsyncComponent_alias_2 }
28
+
29
+ declare type AsyncComponentFn = (props: any) => Promise<XmlNode | AsyncXmlNode | ClassComponentNode>;
30
+
31
+ /** Represents an async component that needs to be resolved before rendering */
32
+ declare interface AsyncXmlNode {
33
+ type: typeof AsyncComponent;
34
+ promise: Promise<AnyXmlNode>;
35
+ }
36
+ export { AsyncXmlNode }
37
+ export { AsyncXmlNode as AsyncXmlNode_alias_1 }
38
+ export { AsyncXmlNode as AsyncXmlNode_alias_2 }
39
+
40
+ declare interface BaseXmlStreamConfig<Method extends HttpMethod = HttpMethod, Url extends string = string, QuerySchema = undefined, RequestSchema = undefined> extends BaseStreamConfig<Method, Url, QuerySchema, RequestSchema> {
41
+ /** Content-Type header, defaults to 'application/xml' */
42
+ contentType?: 'application/xml' | 'text/xml' | 'application/rss+xml' | 'application/atom+xml';
43
+ /** Include XML declaration (<?xml version="1.0"?>) - defaults to true */
44
+ xmlDeclaration?: boolean;
45
+ /** XML encoding, defaults to 'UTF-8' */
46
+ encoding?: string;
47
+ }
48
+ export { BaseXmlStreamConfig }
49
+ export { BaseXmlStreamConfig as BaseXmlStreamConfig_alias_1 }
50
+ export { BaseXmlStreamConfig as BaseXmlStreamConfig_alias_2 }
51
+
52
+ /**
53
+ * CDATA component - wraps content in <![CDATA[...]]>
54
+ * Use for text content that may contain characters like < > &
55
+ * that would otherwise need escaping.
56
+ *
57
+ * Note: If content contains "]]>", it will be split into multiple CDATA sections.
58
+ */
59
+ declare function CData({ children }: {
60
+ children: string;
61
+ }): CDataNode;
62
+ export { CData }
63
+ export { CData as CData_alias_1 }
64
+ export { CData as CData_alias_2 }
65
+
66
+ /** Represents a CDATA section - content is wrapped in <![CDATA[...]]> */
67
+ declare interface CDataNode {
68
+ type: typeof CDataSymbol;
69
+ content: string;
70
+ }
71
+ export { CDataNode }
72
+ export { CDataNode as CDataNode_alias_1 }
73
+ export { CDataNode as CDataNode_alias_2 }
74
+
75
+ declare const CDataSymbol: unique symbol;
76
+ export { CDataSymbol }
77
+ export { CDataSymbol as CDataSymbol_alias_1 }
78
+ export { CDataSymbol as CDataSymbol_alias_2 }
79
+
80
+ declare const ClassComponent: unique symbol;
81
+ export { ClassComponent }
82
+ export { ClassComponent as ClassComponent_alias_1 }
83
+ export { ClassComponent as ClassComponent_alias_2 }
84
+
85
+ /** Represents a class component that needs to be resolved via DI */
86
+ declare interface ClassComponentNode {
87
+ type: typeof ClassComponent;
88
+ componentClass: ComponentClass;
89
+ props: Record<string, unknown>;
90
+ }
91
+ export { ClassComponentNode }
92
+ export { ClassComponentNode as ClassComponentNode_alias_1 }
93
+ export { ClassComponentNode as ClassComponentNode_alias_2 }
94
+
95
+ declare function Component(): <T extends ComponentClass>(target: T, context?: ClassDecoratorContext) => T;
96
+
97
+ declare function Component<Schema extends ZodObject<ZodRawShape>>(options: {
98
+ schema: Schema;
99
+ registry?: Registry;
100
+ }): <T extends new (props: z.output<Schema>, ...args: any[]) => XmlComponent>(target: T, context?: ClassDecoratorContext) => T;
101
+
102
+ declare function Component(options: {
103
+ registry: Registry;
104
+ }): <T extends ComponentClass>(target: T, context?: ClassDecoratorContext) => T;
105
+ export { Component }
106
+ export { Component as Component_alias_1 }
107
+ export { Component as Component_alias_2 }
108
+
109
+ /**
110
+ * Type for class component constructors.
111
+ */
112
+ declare interface ComponentClass {
113
+ new (...args: any[]): XmlComponent;
114
+ }
115
+ export { ComponentClass }
116
+ export { ComponentClass as ComponentClass_alias_1 }
117
+ export { ComponentClass as ComponentClass_alias_2 }
118
+
119
+ declare const ComponentMeta: unique symbol;
120
+ export { ComponentMeta }
121
+ export { ComponentMeta as ComponentMeta_alias_1 }
122
+
123
+ declare type ComponentType = FunctionalComponent | ComponentClass;
124
+
125
+ /**
126
+ * Classic createElement for manual usage.
127
+ * Children are passed as rest arguments.
128
+ */
129
+ declare function createElement(type: string | typeof Fragment | ComponentType, props: Record<string, unknown> | null, ...children: any[]): XmlNode | AsyncXmlNode | ClassComponentNode;
130
+ export { createElement }
131
+ export { createElement as createElement_alias_1 }
132
+ export { createElement as createElement_alias_2 }
133
+
134
+ /**
135
+ * DangerouslyInsertRawXml - inserts raw XML/HTML without any escaping or wrapping
136
+ *
137
+ * WARNING: This bypasses all XML escaping. Only use with trusted content!
138
+ * Use cases:
139
+ * - Pre-rendered XML fragments
140
+ * - HTML content in RSS/Atom feeds (in description/content:encoded)
141
+ * - Including XML from external sources that's already valid
142
+ */
143
+ declare function DangerouslyInsertRawXml({ children }: {
144
+ children: string;
145
+ }): RawXmlNode;
146
+ export { DangerouslyInsertRawXml }
147
+ export { DangerouslyInsertRawXml as DangerouslyInsertRawXml_alias_1 }
148
+ export { DangerouslyInsertRawXml as DangerouslyInsertRawXml_alias_2 }
149
+
150
+ /**
151
+ * Declares an XML Stream endpoint configuration for use with @XmlStream decorator.
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * import { declareXmlStream } from '@navios/adapter-xml'
156
+ *
157
+ * export const getRssFeed = declareXmlStream({
158
+ * method: 'GET',
159
+ * url: '/feed.xml',
160
+ * querySchema: undefined,
161
+ * requestSchema: undefined,
162
+ * contentType: 'application/rss+xml',
163
+ * xmlDeclaration: true,
164
+ * })
165
+ * ```
166
+ */
167
+ declare function declareXmlStream<Method extends HttpMethod, Url extends string, QuerySchema = undefined, RequestSchema = undefined>(config: BaseXmlStreamConfig<Method, Url, QuerySchema, RequestSchema>): {
168
+ config: BaseXmlStreamConfig<Method, Url, QuerySchema, RequestSchema>;
169
+ };
170
+ export { declareXmlStream }
171
+ export { declareXmlStream as declareXmlStream_alias_1 }
172
+ export { declareXmlStream as declareXmlStream_alias_2 }
173
+
174
+ /**
175
+ * Creates a type-safe XML tag component with optional Zod schema validation.
176
+ *
177
+ * @param name - The tag name (supports namespace prefixes like 'atom:link')
178
+ * @param propsSchema - Optional Zod schema for validating props
179
+ * @returns A component function that can be used in JSX
180
+ *
181
+ * @example
182
+ * ```tsx
183
+ * // Simple tag
184
+ * const item = defineTag('item')
185
+ * <item>Content</item>
186
+ *
187
+ * // Namespaced tag with Zod validation
188
+ * const atomLink = defineTag('atom:link', z.object({
189
+ * href: z.string().url(),
190
+ * rel: z.enum(['self', 'alternate']),
191
+ * type: z.string().optional(),
192
+ * }))
193
+ * <atomLink href="https://example.com/feed" rel="self" />
194
+ * ```
195
+ */
196
+ declare function defineTag<T extends ZodRawShape>(name: string, propsSchema?: ZodObject<T>): TagComponent<T extends ZodRawShape ? z.infer<ZodObject<T>> : Record<string, never>>;
197
+ export { defineTag }
198
+ export { defineTag as defineTag_alias_1 }
199
+ export { defineTag as defineTag_alias_2 }
200
+
201
+ /**
202
+ * Creates the XML environment configuration to be merged with base adapter (Fastify/Bun).
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * import { defineFastifyEnvironment } from '@navios/adapter-fastify'
207
+ * import { defineXmlEnvironment } from '@navios/adapter-xml'
208
+ * import { NaviosFactory } from '@navios/core'
209
+ *
210
+ * const fastifyEnv = defineFastifyEnvironment()
211
+ * const xmlEnv = defineXmlEnvironment()
212
+ *
213
+ * // Merge environments
214
+ * const mergedEnv = {
215
+ * httpTokens: new Map([
216
+ * ...fastifyEnv.httpTokens,
217
+ * ...xmlEnv.httpTokens,
218
+ * ]),
219
+ * }
220
+ *
221
+ * const app = await NaviosFactory.create(AppModule, {
222
+ * adapter: mergedEnv,
223
+ * })
224
+ * ```
225
+ */
226
+ declare function defineXmlEnvironment(): {
227
+ httpTokens: Map<InjectionToken<any, undefined, false>, AnyInjectableType>;
228
+ };
229
+ export { defineXmlEnvironment }
230
+ export { defineXmlEnvironment as defineXmlEnvironment_alias_1 }
231
+
232
+ declare const Fragment: unique symbol;
233
+ export { Fragment }
234
+ export { Fragment as Fragment_alias_1 }
235
+ export { Fragment as Fragment_alias_2 }
236
+ export { Fragment as Fragment_alias_3 }
237
+ export { Fragment as Fragment_alias_4 }
238
+ export { Fragment as Fragment_alias_5 }
239
+ export { Fragment as Fragment_alias_6 }
240
+ export { Fragment as Fragment_alias_7 }
241
+
242
+ declare type FunctionalComponent = SyncComponent | AsyncComponentFn;
243
+
244
+ /**
245
+ * Type guard to check if a class is a component
246
+ */
247
+ declare function isComponentClass(value: unknown): value is ComponentClass;
248
+ export { isComponentClass }
249
+ export { isComponentClass as isComponentClass_alias_1 }
250
+ export { isComponentClass as isComponentClass_alias_2 }
251
+
252
+ /**
253
+ * JSX automatic runtime function.
254
+ * Used by the JSX transformer when jsxImportSource is set.
255
+ * Children are passed as part of props.children.
256
+ */
257
+ declare function jsx(type: string | typeof Fragment | ComponentType, props: Record<string, unknown> | null): XmlNode | AsyncXmlNode | ClassComponentNode;
258
+ export { jsx }
259
+ export { jsx as jsx_alias_1 }
260
+ export { jsx as jsx_alias_2 }
261
+
262
+ export declare const jsxDEV: typeof jsx;
263
+
264
+ /**
265
+ * JSX automatic runtime function for static children.
266
+ * Identical to jsx() for XML - React uses this for optimization hints.
267
+ */
268
+ declare const jsxs: typeof jsx;
269
+ export { jsxs }
270
+ export { jsxs as jsxs_alias_1 }
271
+ export { jsxs as jsxs_alias_2 }
272
+
273
+ declare class MissingContainerError extends Error {
274
+ constructor(componentName: string);
275
+ }
276
+ export { MissingContainerError }
277
+ export { MissingContainerError as MissingContainerError_alias_1 }
278
+ export { MissingContainerError as MissingContainerError_alias_2 }
279
+
280
+ /** Represents raw XML content - inserted without any escaping or wrapping */
281
+ declare interface RawXmlNode {
282
+ type: typeof RawXmlSymbol;
283
+ content: string;
284
+ }
285
+ export { RawXmlNode }
286
+ export { RawXmlNode as RawXmlNode_alias_1 }
287
+ export { RawXmlNode as RawXmlNode_alias_2 }
288
+
289
+ declare const RawXmlSymbol: unique symbol;
290
+ export { RawXmlSymbol }
291
+ export { RawXmlSymbol as RawXmlSymbol_alias_1 }
292
+ export { RawXmlSymbol as RawXmlSymbol_alias_2 }
293
+
294
+ declare interface RenderOptions {
295
+ /** Include XML declaration (<?xml version="1.0"?>) - defaults to true */
296
+ declaration?: boolean;
297
+ /** XML encoding, defaults to 'UTF-8' */
298
+ encoding?: string;
299
+ /** Pretty print with indentation */
300
+ pretty?: boolean;
301
+ /**
302
+ * DI container for resolving class components.
303
+ * Required if the tree contains any class components.
304
+ */
305
+ container?: Container;
306
+ }
307
+ export { RenderOptions }
308
+ export { RenderOptions as RenderOptions_alias_1 }
309
+ export { RenderOptions as RenderOptions_alias_2 }
310
+
311
+ declare function renderToXml(node: AnyXmlNode, options?: RenderOptions): Promise<string>;
312
+ export { renderToXml }
313
+ export { renderToXml as renderToXml_alias_1 }
314
+ export { renderToXml as renderToXml_alias_2 }
315
+
316
+ declare type SyncComponent = (props: any) => XmlNode | AsyncXmlNode | ClassComponentNode;
317
+
318
+ declare interface TagComponent<Props extends Record<string, unknown>> {
319
+ (props: Props & {
320
+ children?: AnyXmlNode | AnyXmlNode[];
321
+ }): XmlNode;
322
+ tagName: string;
323
+ }
324
+ export { TagComponent }
325
+ export { TagComponent as TagComponent_alias_1 }
326
+ export { TagComponent as TagComponent_alias_2 }
327
+
328
+ /**
329
+ * Base interface for class components.
330
+ * The render method takes no arguments - props are received via constructor.
331
+ */
332
+ declare interface XmlComponent {
333
+ render(): AnyXmlNode | Promise<AnyXmlNode>;
334
+ }
335
+ export { XmlComponent }
336
+ export { XmlComponent as XmlComponent_alias_1 }
337
+ export { XmlComponent as XmlComponent_alias_2 }
338
+
339
+ declare interface XmlNode {
340
+ type: string | typeof Fragment;
341
+ props: Record<string, unknown>;
342
+ children: AnyXmlNode[];
343
+ }
344
+ export { XmlNode }
345
+ export { XmlNode as XmlNode_alias_1 }
346
+ export { XmlNode as XmlNode_alias_2 }
347
+
348
+ /**
349
+ * Decorator for XML Stream endpoints that return JSX-based XML responses.
350
+ *
351
+ * @example
352
+ * ```typescript
353
+ * import { XmlStream } from '@navios/adapter-xml'
354
+ * import { Controller } from '@navios/core'
355
+ *
356
+ * const getRssFeed = declareXmlStream({
357
+ * method: 'GET',
358
+ * url: '/feed.xml',
359
+ * querySchema: undefined,
360
+ * requestSchema: undefined,
361
+ * contentType: 'application/rss+xml',
362
+ * })
363
+ *
364
+ * @Controller('/api')
365
+ * class FeedController {
366
+ * @XmlStream(getRssFeed)
367
+ * async getFeed() {
368
+ * return (
369
+ * <rss version="2.0">
370
+ * <channel>
371
+ * <title>My Feed</title>
372
+ * </channel>
373
+ * </rss>
374
+ * )
375
+ * }
376
+ * }
377
+ * ```
378
+ */
379
+ declare function XmlStream<Method extends HttpMethod = HttpMethod, Url extends string = string, QuerySchema = undefined, RequestSchema = ZodType>(endpoint: {
380
+ config: BaseXmlStreamConfig<Method, Url, QuerySchema, RequestSchema>;
381
+ }): (target: (params: QuerySchema extends ZodObject ? RequestSchema extends ZodType ? Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, RequestSchema, true>> : Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, undefined, true>> : RequestSchema extends ZodType ? Util_FlatObject<EndpointFunctionArgs<Url, undefined, RequestSchema, true>> : Util_FlatObject<EndpointFunctionArgs<Url, undefined, undefined, true>>) => Promise<any>, // Returns XmlNode
382
+ context: ClassMethodDecoratorContext) => (params: QuerySchema extends ZodObject ? RequestSchema extends ZodType ? Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, RequestSchema, true>> : Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, undefined, true>> : RequestSchema extends ZodType ? Util_FlatObject<EndpointFunctionArgs<Url, undefined, RequestSchema, true>> : Util_FlatObject<EndpointFunctionArgs<Url, undefined, undefined, true>>) => Promise<any>;
383
+ export { XmlStream }
384
+ export { XmlStream as XmlStream_alias_1 }
385
+ export { XmlStream as XmlStream_alias_2 }
386
+
387
+ declare class XmlStreamAdapterService implements AbstractHttpHandlerAdapterInterface {
388
+ protected container: Container;
389
+ /** Base stream adapter - we proxy hasSchema, prepareArguments, provideSchema to it */
390
+ protected streamAdapter: AbstractHttpHandlerAdapterInterface;
391
+ /**
392
+ * Proxy to base StreamAdapter - reuses existing argument preparation logic
393
+ * (handles querySchema, requestSchema, URL params for both Fastify and Bun)
394
+ */
395
+ prepareArguments(handlerMetadata: HandlerMetadata<BaseXmlStreamConfig>): ((target: Record<string, any>, request: any) => Promise<void> | void)[];
396
+ provideSchema(handlerMetadata: HandlerMetadata<BaseXmlStreamConfig>): Record<string, any>;
397
+ hasSchema(handlerMetadata: HandlerMetadata<any>): boolean;
398
+ /**
399
+ * Custom handler - renders JSX to XML and handles response for both Fastify and Bun
400
+ */
401
+ provideHandler(controller: ClassType, handlerMetadata: HandlerMetadata<BaseXmlStreamConfig>): (context: RequestContextHolder, request: any, reply: any) => Promise<any>;
402
+ }
403
+ export { XmlStreamAdapterService }
404
+ export { XmlStreamAdapterService as XmlStreamAdapterService_alias_1 }
405
+ export { XmlStreamAdapterService as XmlStreamAdapterService_alias_2 }
406
+
407
+ declare type XmlStreamParams<EndpointDeclaration extends {
408
+ config: BaseXmlStreamConfig<any, any, any, any>;
409
+ }, Url extends string = EndpointDeclaration['config']['url'], QuerySchema = EndpointDeclaration['config']['querySchema']> = QuerySchema extends ZodObject ? EndpointDeclaration['config']['requestSchema'] extends ZodType ? Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, EndpointDeclaration['config']['requestSchema'], true>> : Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, undefined, true>> : EndpointDeclaration['config']['requestSchema'] extends ZodType ? Util_FlatObject<EndpointFunctionArgs<Url, undefined, EndpointDeclaration['config']['requestSchema'], true>> : Util_FlatObject<EndpointFunctionArgs<Url, undefined, undefined, true>>;
410
+ export { XmlStreamParams }
411
+ export { XmlStreamParams as XmlStreamParams_alias_1 }
412
+ export { XmlStreamParams as XmlStreamParams_alias_2 }
413
+
414
+ export { }
@@ -0,0 +1,153 @@
1
+ import { InjectionToken, globalRegistry, InjectableScope, InjectableType, InjectableTokenMeta } from '@navios/di';
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
7
+ var __typeError = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
12
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
13
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
14
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
15
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
16
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
17
+ var __runInitializers = (array, flags, self, value) => {
18
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
19
+ return value;
20
+ };
21
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
22
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
23
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
24
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
25
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
26
+ return __privateGet(this, extra);
27
+ }, set [name](x) {
28
+ return __privateSet(this, extra, x);
29
+ } }, name));
30
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
31
+ for (var i = decorators.length - 1; i >= 0; i--) {
32
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
33
+ if (k) {
34
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
35
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
36
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
37
+ }
38
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
39
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
40
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
41
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
42
+ }
43
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
44
+ };
45
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
46
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
47
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
48
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
49
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
50
+
51
+ // src/types/xml-node.mts
52
+ var Fragment = /* @__PURE__ */ Symbol.for("xml.fragment");
53
+ var AsyncComponent = /* @__PURE__ */ Symbol.for("xml.async");
54
+ var CDataSymbol = /* @__PURE__ */ Symbol.for("xml.cdata");
55
+ var RawXmlSymbol = /* @__PURE__ */ Symbol.for("xml.raw");
56
+ var ClassComponent = /* @__PURE__ */ Symbol.for("xml.class-component");
57
+ var ComponentMeta = /* @__PURE__ */ Symbol.for("xml.component.meta");
58
+ function Component(options = {}) {
59
+ const { schema, registry = globalRegistry } = options;
60
+ return (target, context) => {
61
+ if (context && context.kind !== "class" || target instanceof Function && !context) {
62
+ throw new Error(
63
+ "[@navios/adapter-xml] @Component decorator can only be used on classes."
64
+ );
65
+ }
66
+ if (typeof target.prototype.render !== "function") {
67
+ throw new Error(
68
+ `[@navios/adapter-xml] @Component class "${target.name}" must implement render() method.`
69
+ );
70
+ }
71
+ const injectableToken = schema ? InjectionToken.create(target, schema) : InjectionToken.create(target);
72
+ registry.set(
73
+ injectableToken,
74
+ InjectableScope.Request,
75
+ target,
76
+ InjectableType.Class
77
+ );
78
+ target[InjectableTokenMeta] = injectableToken;
79
+ target[ComponentMeta] = true;
80
+ return target;
81
+ };
82
+ }
83
+ function isComponentClass(value) {
84
+ return typeof value === "function" && // @ts-expect-error - Checking metadata
85
+ value[ComponentMeta] === true;
86
+ }
87
+
88
+ // src/runtime/create-element.mts
89
+ function flattenChildren(children) {
90
+ if (children == null || children === false) {
91
+ return [];
92
+ }
93
+ if (Array.isArray(children)) {
94
+ return children.flat(Infinity).filter((c) => c != null && c !== false);
95
+ }
96
+ return [children];
97
+ }
98
+ function jsx(type, props) {
99
+ const { children, ...restProps } = props ?? {};
100
+ const flatChildren = flattenChildren(children);
101
+ if (isComponentClass(type)) {
102
+ return {
103
+ type: ClassComponent,
104
+ componentClass: type,
105
+ props: { ...restProps, children: flatChildren }
106
+ };
107
+ }
108
+ if (typeof type === "function") {
109
+ const result = type({ ...restProps, children: flatChildren });
110
+ if (result instanceof Promise) {
111
+ return {
112
+ type: AsyncComponent,
113
+ promise: result
114
+ };
115
+ }
116
+ return result;
117
+ }
118
+ return {
119
+ type,
120
+ props: restProps,
121
+ children: flatChildren
122
+ };
123
+ }
124
+ var jsxs = jsx;
125
+ function createElement(type, props, ...children) {
126
+ const flatChildren = flattenChildren(children);
127
+ if (isComponentClass(type)) {
128
+ return {
129
+ type: ClassComponent,
130
+ componentClass: type,
131
+ props: { ...props, children: flatChildren }
132
+ };
133
+ }
134
+ if (typeof type === "function") {
135
+ const result = type({ ...props, children: flatChildren });
136
+ if (result instanceof Promise) {
137
+ return {
138
+ type: AsyncComponent,
139
+ promise: result
140
+ };
141
+ }
142
+ return result;
143
+ }
144
+ return {
145
+ type,
146
+ props: props ?? {},
147
+ children: flatChildren
148
+ };
149
+ }
150
+
151
+ export { AsyncComponent, CDataSymbol, ClassComponent, Component, Fragment, RawXmlSymbol, __decorateElement, __decoratorStart, __runInitializers, createElement, isComponentClass, jsx, jsxs };
152
+ //# sourceMappingURL=chunk-6OR6LGJA.mjs.map
153
+ //# sourceMappingURL=chunk-6OR6LGJA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/xml-node.mts","../src/decorators/component.decorator.mts","../src/runtime/create-element.mts"],"names":[],"mappings":"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","file":"chunk-6OR6LGJA.mjs","sourcesContent":["import type { ComponentClass } from './component.mjs'\n\nexport const Fragment = Symbol.for('xml.fragment')\nexport const AsyncComponent = Symbol.for('xml.async')\nexport const CDataSymbol = Symbol.for('xml.cdata')\nexport const RawXmlSymbol = Symbol.for('xml.raw')\nexport const ClassComponent = Symbol.for('xml.class-component')\n\n/** Represents a CDATA section - content is wrapped in <![CDATA[...]]> */\nexport interface CDataNode {\n type: typeof CDataSymbol\n content: string\n}\n\n/** Represents raw XML content - inserted without any escaping or wrapping */\nexport interface RawXmlNode {\n type: typeof RawXmlSymbol\n content: string\n}\n\n/** Represents a class component that needs to be resolved via DI */\nexport interface ClassComponentNode {\n type: typeof ClassComponent\n componentClass: ComponentClass\n props: Record<string, unknown>\n}\n\nexport interface XmlNode {\n type: string | typeof Fragment\n props: Record<string, unknown>\n children: AnyXmlNode[]\n}\n\n/** Represents an async component that needs to be resolved before rendering */\nexport interface AsyncXmlNode {\n type: typeof AsyncComponent\n promise: Promise<AnyXmlNode>\n}\n\n/** Union type for all possible node types */\nexport type AnyXmlNode =\n | XmlNode\n | AsyncXmlNode\n | CDataNode\n | RawXmlNode\n | ClassComponentNode\n | string\n | number\n | null\n | undefined\n","import type { z, ZodObject, ZodRawShape } from 'zod/v4'\n\nimport type { Registry } from '@navios/di'\n\nimport {\n InjectableScope,\n InjectableType,\n InjectableTokenMeta,\n InjectionToken,\n globalRegistry,\n} from '@navios/di'\n\nimport type { ComponentClass, XmlComponent } from '../types/component.mjs'\n\nexport const ComponentMeta = Symbol.for('xml.component.meta')\n\n// #1 Component without props (no schema)\nexport function Component(): <T extends ComponentClass>(\n target: T,\n context?: ClassDecoratorContext,\n) => T\n\n// #2 Component with props schema\nexport function Component<Schema extends ZodObject<ZodRawShape>>(options: {\n schema: Schema\n registry?: Registry\n}): <T extends new (props: z.output<Schema>, ...args: any[]) => XmlComponent>(\n target: T,\n context?: ClassDecoratorContext,\n) => T\n\n// #3 Component with custom registry only\nexport function Component(options: {\n registry: Registry\n}): <T extends ComponentClass>(\n target: T,\n context?: ClassDecoratorContext,\n) => T\n\nexport function Component(\n options: {\n schema?: ZodObject<ZodRawShape>\n registry?: Registry\n } = {},\n) {\n const { schema, registry = globalRegistry } = options\n\n return <T extends ComponentClass>(\n target: T,\n context?: ClassDecoratorContext,\n ): T => {\n if (\n (context && context.kind !== 'class') ||\n (target instanceof Function && !context)\n ) {\n throw new Error(\n '[@navios/adapter-xml] @Component decorator can only be used on classes.',\n )\n }\n\n // Verify the class has a render method\n if (typeof target.prototype.render !== 'function') {\n throw new Error(\n `[@navios/adapter-xml] @Component class \"${target.name}\" must implement render() method.`,\n )\n }\n\n // Create token with schema if provided\n const injectableToken = schema\n ? InjectionToken.create(target, schema)\n : InjectionToken.create(target)\n\n // Register with Request scope - each render gets fresh instances\n registry.set(\n injectableToken,\n InjectableScope.Request,\n target,\n InjectableType.Class,\n )\n\n // Store token metadata on the class (same pattern as @Injectable)\n // @ts-expect-error - Adding metadata to class\n target[InjectableTokenMeta] = injectableToken\n\n // Mark as component for JSX runtime detection\n // @ts-expect-error - Adding metadata to class\n target[ComponentMeta] = true\n\n return target\n }\n}\n\n/**\n * Type guard to check if a class is a component\n */\nexport function isComponentClass(value: unknown): value is ComponentClass {\n return (\n typeof value === 'function' &&\n // @ts-expect-error - Checking metadata\n value[ComponentMeta] === true\n )\n}\n","import type { AnyXmlNode, AsyncXmlNode, ClassComponentNode, XmlNode } from '../types/xml-node.mjs'\nimport type { ComponentClass } from '../types/component.mjs'\n\nimport { isComponentClass } from '../decorators/component.decorator.mjs'\nimport { AsyncComponent, ClassComponent, Fragment } from '../types/xml-node.mjs'\n\ntype SyncComponent = (props: any) => XmlNode | AsyncXmlNode | ClassComponentNode\ntype AsyncComponentFn = (props: any) => Promise<XmlNode | AsyncXmlNode | ClassComponentNode>\ntype FunctionalComponent = SyncComponent | AsyncComponentFn\ntype ComponentType = FunctionalComponent | ComponentClass\n\nfunction flattenChildren(children: any): AnyXmlNode[] {\n if (children == null || children === false) {\n return []\n }\n if (Array.isArray(children)) {\n return children.flat(Infinity).filter((c) => c != null && c !== false)\n }\n return [children]\n}\n\n/**\n * JSX automatic runtime function.\n * Used by the JSX transformer when jsxImportSource is set.\n * Children are passed as part of props.children.\n */\nexport function jsx(\n type: string | typeof Fragment | ComponentType,\n props: Record<string, unknown> | null,\n): XmlNode | AsyncXmlNode | ClassComponentNode {\n const { children, ...restProps } = props ?? {}\n const flatChildren = flattenChildren(children)\n\n // Handle class components - create ClassComponentNode for later resolution\n if (isComponentClass(type)) {\n return {\n type: ClassComponent,\n componentClass: type,\n props: { ...restProps, children: flatChildren },\n }\n }\n\n // Handle function components (sync or async)\n if (typeof type === 'function') {\n const result = type({ ...restProps, children: flatChildren })\n\n // If component returns a Promise, wrap it in AsyncXmlNode\n if (result instanceof Promise) {\n return {\n type: AsyncComponent,\n promise: result,\n }\n }\n\n return result\n }\n\n return {\n type,\n props: restProps,\n children: flatChildren,\n }\n}\n\n/**\n * JSX automatic runtime function for static children.\n * Identical to jsx() for XML - React uses this for optimization hints.\n */\nexport const jsxs = jsx\n\n/**\n * Classic createElement for manual usage.\n * Children are passed as rest arguments.\n */\nexport function createElement(\n type: string | typeof Fragment | ComponentType,\n props: Record<string, unknown> | null,\n ...children: any[]\n): XmlNode | AsyncXmlNode | ClassComponentNode {\n const flatChildren = flattenChildren(children)\n\n // Handle class components - create ClassComponentNode for later resolution\n if (isComponentClass(type)) {\n return {\n type: ClassComponent,\n componentClass: type,\n props: { ...props, children: flatChildren },\n }\n }\n\n // Handle function components (sync or async)\n if (typeof type === 'function') {\n const result = type({ ...props, children: flatChildren })\n\n // If component returns a Promise, wrap it in AsyncXmlNode\n if (result instanceof Promise) {\n return {\n type: AsyncComponent,\n promise: result,\n }\n }\n\n return result\n }\n\n return {\n type,\n props: props ?? {},\n children: flatChildren,\n }\n}\n\nexport { Fragment }\n"]}
@@ -0,0 +1,29 @@
1
+ export { XmlNode } from './_tsup-dts-rollup.mjs';
2
+ export { AsyncXmlNode } from './_tsup-dts-rollup.mjs';
3
+ export { CDataNode } from './_tsup-dts-rollup.mjs';
4
+ export { RawXmlNode } from './_tsup-dts-rollup.mjs';
5
+ export { ClassComponentNode } from './_tsup-dts-rollup.mjs';
6
+ export { AnyXmlNode } from './_tsup-dts-rollup.mjs';
7
+ export { BaseXmlStreamConfig } from './_tsup-dts-rollup.mjs';
8
+ export { XmlComponent } from './_tsup-dts-rollup.mjs';
9
+ export { ComponentClass } from './_tsup-dts-rollup.mjs';
10
+ export { Fragment } from './_tsup-dts-rollup.mjs';
11
+ export { AsyncComponent } from './_tsup-dts-rollup.mjs';
12
+ export { CDataSymbol } from './_tsup-dts-rollup.mjs';
13
+ export { RawXmlSymbol } from './_tsup-dts-rollup.mjs';
14
+ export { ClassComponent } from './_tsup-dts-rollup.mjs';
15
+ export { createElement } from './_tsup-dts-rollup.mjs';
16
+ export { CData } from './_tsup-dts-rollup.mjs';
17
+ export { DangerouslyInsertRawXml } from './_tsup-dts-rollup.mjs';
18
+ export { renderToXml } from './_tsup-dts-rollup.mjs';
19
+ export { MissingContainerError } from './_tsup-dts-rollup.mjs';
20
+ export { RenderOptions } from './_tsup-dts-rollup.mjs';
21
+ export { defineTag } from './_tsup-dts-rollup.mjs';
22
+ export { TagComponent } from './_tsup-dts-rollup.mjs';
23
+ export { XmlStream } from './_tsup-dts-rollup.mjs';
24
+ export { Component } from './_tsup-dts-rollup.mjs';
25
+ export { isComponentClass } from './_tsup-dts-rollup.mjs';
26
+ export { XmlStreamParams } from './_tsup-dts-rollup.mjs';
27
+ export { declareXmlStream } from './_tsup-dts-rollup.mjs';
28
+ export { XmlStreamAdapterService } from './_tsup-dts-rollup.mjs';
29
+ export { defineXmlEnvironment_alias_1 as defineXmlEnvironment } from './_tsup-dts-rollup.mjs';
package/lib/index.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ export { XmlNode } from './_tsup-dts-rollup.js';
2
+ export { AsyncXmlNode } from './_tsup-dts-rollup.js';
3
+ export { CDataNode } from './_tsup-dts-rollup.js';
4
+ export { RawXmlNode } from './_tsup-dts-rollup.js';
5
+ export { ClassComponentNode } from './_tsup-dts-rollup.js';
6
+ export { AnyXmlNode } from './_tsup-dts-rollup.js';
7
+ export { BaseXmlStreamConfig } from './_tsup-dts-rollup.js';
8
+ export { XmlComponent } from './_tsup-dts-rollup.js';
9
+ export { ComponentClass } from './_tsup-dts-rollup.js';
10
+ export { Fragment } from './_tsup-dts-rollup.js';
11
+ export { AsyncComponent } from './_tsup-dts-rollup.js';
12
+ export { CDataSymbol } from './_tsup-dts-rollup.js';
13
+ export { RawXmlSymbol } from './_tsup-dts-rollup.js';
14
+ export { ClassComponent } from './_tsup-dts-rollup.js';
15
+ export { createElement } from './_tsup-dts-rollup.js';
16
+ export { CData } from './_tsup-dts-rollup.js';
17
+ export { DangerouslyInsertRawXml } from './_tsup-dts-rollup.js';
18
+ export { renderToXml } from './_tsup-dts-rollup.js';
19
+ export { MissingContainerError } from './_tsup-dts-rollup.js';
20
+ export { RenderOptions } from './_tsup-dts-rollup.js';
21
+ export { defineTag } from './_tsup-dts-rollup.js';
22
+ export { TagComponent } from './_tsup-dts-rollup.js';
23
+ export { XmlStream } from './_tsup-dts-rollup.js';
24
+ export { Component } from './_tsup-dts-rollup.js';
25
+ export { isComponentClass } from './_tsup-dts-rollup.js';
26
+ export { XmlStreamParams } from './_tsup-dts-rollup.js';
27
+ export { declareXmlStream } from './_tsup-dts-rollup.js';
28
+ export { XmlStreamAdapterService } from './_tsup-dts-rollup.js';
29
+ export { defineXmlEnvironment_alias_1 as defineXmlEnvironment } from './_tsup-dts-rollup.js';