nitrostack 1.0.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 (290) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/CONTRIBUTING.md +182 -0
  3. package/LICENSE +201 -0
  4. package/LICENSE_URLS_UPDATE_COMPLETE.md +388 -0
  5. package/NOTICE +153 -0
  6. package/README.md +571 -0
  7. package/dist/auth/api-key.d.ts +118 -0
  8. package/dist/auth/api-key.d.ts.map +1 -0
  9. package/dist/auth/api-key.js +168 -0
  10. package/dist/auth/api-key.js.map +1 -0
  11. package/dist/auth/client.d.ts +151 -0
  12. package/dist/auth/client.d.ts.map +1 -0
  13. package/dist/auth/client.js +330 -0
  14. package/dist/auth/client.js.map +1 -0
  15. package/dist/auth/index.d.ts +30 -0
  16. package/dist/auth/index.d.ts.map +1 -0
  17. package/dist/auth/index.js +43 -0
  18. package/dist/auth/index.js.map +1 -0
  19. package/dist/auth/middleware.d.ts +95 -0
  20. package/dist/auth/middleware.d.ts.map +1 -0
  21. package/dist/auth/middleware.js +260 -0
  22. package/dist/auth/middleware.js.map +1 -0
  23. package/dist/auth/pkce.d.ts +53 -0
  24. package/dist/auth/pkce.d.ts.map +1 -0
  25. package/dist/auth/pkce.js +105 -0
  26. package/dist/auth/pkce.js.map +1 -0
  27. package/dist/auth/quick-setup.d.ts +94 -0
  28. package/dist/auth/quick-setup.d.ts.map +1 -0
  29. package/dist/auth/quick-setup.js +210 -0
  30. package/dist/auth/quick-setup.js.map +1 -0
  31. package/dist/auth/server-integration.d.ts +97 -0
  32. package/dist/auth/server-integration.d.ts.map +1 -0
  33. package/dist/auth/server-integration.js +182 -0
  34. package/dist/auth/server-integration.js.map +1 -0
  35. package/dist/auth/server-metadata.d.ts +51 -0
  36. package/dist/auth/server-metadata.d.ts.map +1 -0
  37. package/dist/auth/server-metadata.js +106 -0
  38. package/dist/auth/server-metadata.js.map +1 -0
  39. package/dist/auth/simple-jwt.d.ts +88 -0
  40. package/dist/auth/simple-jwt.d.ts.map +1 -0
  41. package/dist/auth/simple-jwt.js +152 -0
  42. package/dist/auth/simple-jwt.js.map +1 -0
  43. package/dist/auth/token-store.d.ts +104 -0
  44. package/dist/auth/token-store.d.ts.map +1 -0
  45. package/dist/auth/token-store.js +205 -0
  46. package/dist/auth/token-store.js.map +1 -0
  47. package/dist/auth/token-validation.d.ts +47 -0
  48. package/dist/auth/token-validation.d.ts.map +1 -0
  49. package/dist/auth/token-validation.js +237 -0
  50. package/dist/auth/token-validation.js.map +1 -0
  51. package/dist/auth/types.d.ts +215 -0
  52. package/dist/auth/types.d.ts.map +1 -0
  53. package/dist/auth/types.js +6 -0
  54. package/dist/auth/types.js.map +1 -0
  55. package/dist/cli/commands/build.d.ts +6 -0
  56. package/dist/cli/commands/build.d.ts.map +1 -0
  57. package/dist/cli/commands/build.js +104 -0
  58. package/dist/cli/commands/build.js.map +1 -0
  59. package/dist/cli/commands/dev.d.ts +7 -0
  60. package/dist/cli/commands/dev.d.ts.map +1 -0
  61. package/dist/cli/commands/dev.js +312 -0
  62. package/dist/cli/commands/dev.js.map +1 -0
  63. package/dist/cli/commands/generate-types.d.ts +8 -0
  64. package/dist/cli/commands/generate-types.d.ts.map +1 -0
  65. package/dist/cli/commands/generate-types.js +220 -0
  66. package/dist/cli/commands/generate-types.js.map +1 -0
  67. package/dist/cli/commands/generate.d.ts +5 -0
  68. package/dist/cli/commands/generate.d.ts.map +1 -0
  69. package/dist/cli/commands/generate.js +365 -0
  70. package/dist/cli/commands/generate.js.map +1 -0
  71. package/dist/cli/commands/init.d.ts +7 -0
  72. package/dist/cli/commands/init.d.ts.map +1 -0
  73. package/dist/cli/commands/init.js +365 -0
  74. package/dist/cli/commands/init.js.map +1 -0
  75. package/dist/cli/commands/start.d.ts +6 -0
  76. package/dist/cli/commands/start.d.ts.map +1 -0
  77. package/dist/cli/commands/start.js +61 -0
  78. package/dist/cli/commands/start.js.map +1 -0
  79. package/dist/cli/index.d.ts +3 -0
  80. package/dist/cli/index.d.ts.map +1 -0
  81. package/dist/cli/index.js +47 -0
  82. package/dist/cli/index.js.map +1 -0
  83. package/dist/cli/mcp-dev-wrapper.d.ts +3 -0
  84. package/dist/cli/mcp-dev-wrapper.d.ts.map +1 -0
  85. package/dist/cli/mcp-dev-wrapper.js +116 -0
  86. package/dist/cli/mcp-dev-wrapper.js.map +1 -0
  87. package/dist/core/apikey-module.d.ts +69 -0
  88. package/dist/core/apikey-module.d.ts.map +1 -0
  89. package/dist/core/apikey-module.js +114 -0
  90. package/dist/core/apikey-module.js.map +1 -0
  91. package/dist/core/app-decorator.d.ts +58 -0
  92. package/dist/core/app-decorator.d.ts.map +1 -0
  93. package/dist/core/app-decorator.js +261 -0
  94. package/dist/core/app-decorator.js.map +1 -0
  95. package/dist/core/builders.d.ts +38 -0
  96. package/dist/core/builders.d.ts.map +1 -0
  97. package/dist/core/builders.js +129 -0
  98. package/dist/core/builders.js.map +1 -0
  99. package/dist/core/component.d.ts +105 -0
  100. package/dist/core/component.d.ts.map +1 -0
  101. package/dist/core/component.js +182 -0
  102. package/dist/core/component.js.map +1 -0
  103. package/dist/core/config-module.d.ts +55 -0
  104. package/dist/core/config-module.d.ts.map +1 -0
  105. package/dist/core/config-module.js +94 -0
  106. package/dist/core/config-module.js.map +1 -0
  107. package/dist/core/decorators/cache.decorator.d.ts +61 -0
  108. package/dist/core/decorators/cache.decorator.d.ts.map +1 -0
  109. package/dist/core/decorators/cache.decorator.js +115 -0
  110. package/dist/core/decorators/cache.decorator.js.map +1 -0
  111. package/dist/core/decorators/health-check.decorator.d.ts +80 -0
  112. package/dist/core/decorators/health-check.decorator.d.ts.map +1 -0
  113. package/dist/core/decorators/health-check.decorator.js +153 -0
  114. package/dist/core/decorators/health-check.decorator.js.map +1 -0
  115. package/dist/core/decorators/rate-limit.decorator.d.ts +62 -0
  116. package/dist/core/decorators/rate-limit.decorator.d.ts.map +1 -0
  117. package/dist/core/decorators/rate-limit.decorator.js +129 -0
  118. package/dist/core/decorators/rate-limit.decorator.js.map +1 -0
  119. package/dist/core/decorators.d.ts +151 -0
  120. package/dist/core/decorators.d.ts.map +1 -0
  121. package/dist/core/decorators.js +142 -0
  122. package/dist/core/decorators.js.map +1 -0
  123. package/dist/core/di/container.d.ts +42 -0
  124. package/dist/core/di/container.d.ts.map +1 -0
  125. package/dist/core/di/container.js +76 -0
  126. package/dist/core/di/container.js.map +1 -0
  127. package/dist/core/di/injectable.decorator.d.ts +35 -0
  128. package/dist/core/di/injectable.decorator.d.ts.map +1 -0
  129. package/dist/core/di/injectable.decorator.js +57 -0
  130. package/dist/core/di/injectable.decorator.js.map +1 -0
  131. package/dist/core/errors.d.ts +54 -0
  132. package/dist/core/errors.d.ts.map +1 -0
  133. package/dist/core/errors.js +87 -0
  134. package/dist/core/errors.js.map +1 -0
  135. package/dist/core/events/event-emitter.d.ts +50 -0
  136. package/dist/core/events/event-emitter.d.ts.map +1 -0
  137. package/dist/core/events/event-emitter.js +94 -0
  138. package/dist/core/events/event-emitter.js.map +1 -0
  139. package/dist/core/events/event.decorator.d.ts +48 -0
  140. package/dist/core/events/event.decorator.d.ts.map +1 -0
  141. package/dist/core/events/event.decorator.js +68 -0
  142. package/dist/core/events/event.decorator.js.map +1 -0
  143. package/dist/core/filters/exception-filter.decorator.d.ts +40 -0
  144. package/dist/core/filters/exception-filter.decorator.d.ts.map +1 -0
  145. package/dist/core/filters/exception-filter.decorator.js +54 -0
  146. package/dist/core/filters/exception-filter.decorator.js.map +1 -0
  147. package/dist/core/filters/exception-filter.interface.d.ts +30 -0
  148. package/dist/core/filters/exception-filter.interface.d.ts.map +1 -0
  149. package/dist/core/filters/exception-filter.interface.js +2 -0
  150. package/dist/core/filters/exception-filter.interface.js.map +1 -0
  151. package/dist/core/guards/apikey.guard.d.ts +22 -0
  152. package/dist/core/guards/apikey.guard.d.ts.map +1 -0
  153. package/dist/core/guards/apikey.guard.js +11 -0
  154. package/dist/core/guards/apikey.guard.js.map +1 -0
  155. package/dist/core/guards/guard.interface.d.ts +18 -0
  156. package/dist/core/guards/guard.interface.d.ts.map +1 -0
  157. package/dist/core/guards/guard.interface.js +2 -0
  158. package/dist/core/guards/guard.interface.js.map +1 -0
  159. package/dist/core/guards/jwt.guard.d.ts +18 -0
  160. package/dist/core/guards/jwt.guard.d.ts.map +1 -0
  161. package/dist/core/guards/jwt.guard.js +2 -0
  162. package/dist/core/guards/jwt.guard.js.map +1 -0
  163. package/dist/core/guards/oauth.guard.d.ts +35 -0
  164. package/dist/core/guards/oauth.guard.d.ts.map +1 -0
  165. package/dist/core/guards/oauth.guard.js +2 -0
  166. package/dist/core/guards/oauth.guard.js.map +1 -0
  167. package/dist/core/guards/use-guards.decorator.d.ts +25 -0
  168. package/dist/core/guards/use-guards.decorator.d.ts.map +1 -0
  169. package/dist/core/guards/use-guards.decorator.js +32 -0
  170. package/dist/core/guards/use-guards.decorator.js.map +1 -0
  171. package/dist/core/health/health-checks.resource.d.ts +14 -0
  172. package/dist/core/health/health-checks.resource.d.ts.map +1 -0
  173. package/dist/core/health/health-checks.resource.js +29 -0
  174. package/dist/core/health/health-checks.resource.js.map +1 -0
  175. package/dist/core/index.d.ts +55 -0
  176. package/dist/core/index.d.ts.map +1 -0
  177. package/dist/core/index.js +57 -0
  178. package/dist/core/index.js.map +1 -0
  179. package/dist/core/interceptors/interceptor.decorator.d.ts +37 -0
  180. package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -0
  181. package/dist/core/interceptors/interceptor.decorator.js +51 -0
  182. package/dist/core/interceptors/interceptor.decorator.js.map +1 -0
  183. package/dist/core/interceptors/interceptor.interface.d.ts +31 -0
  184. package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -0
  185. package/dist/core/interceptors/interceptor.interface.js +2 -0
  186. package/dist/core/interceptors/interceptor.interface.js.map +1 -0
  187. package/dist/core/jwt-module.d.ts +51 -0
  188. package/dist/core/jwt-module.d.ts.map +1 -0
  189. package/dist/core/jwt-module.js +52 -0
  190. package/dist/core/jwt-module.js.map +1 -0
  191. package/dist/core/logger.d.ts +18 -0
  192. package/dist/core/logger.d.ts.map +1 -0
  193. package/dist/core/logger.js +51 -0
  194. package/dist/core/logger.js.map +1 -0
  195. package/dist/core/middleware/middleware.decorator.d.ts +39 -0
  196. package/dist/core/middleware/middleware.decorator.d.ts.map +1 -0
  197. package/dist/core/middleware/middleware.decorator.js +53 -0
  198. package/dist/core/middleware/middleware.decorator.js.map +1 -0
  199. package/dist/core/middleware/middleware.interface.d.ts +29 -0
  200. package/dist/core/middleware/middleware.interface.d.ts.map +1 -0
  201. package/dist/core/middleware/middleware.interface.js +2 -0
  202. package/dist/core/middleware/middleware.interface.js.map +1 -0
  203. package/dist/core/module.d.ts +74 -0
  204. package/dist/core/module.d.ts.map +1 -0
  205. package/dist/core/module.js +82 -0
  206. package/dist/core/module.js.map +1 -0
  207. package/dist/core/oauth-module.d.ts +144 -0
  208. package/dist/core/oauth-module.d.ts.map +1 -0
  209. package/dist/core/oauth-module.js +190 -0
  210. package/dist/core/oauth-module.js.map +1 -0
  211. package/dist/core/pipes/pipe.decorator.d.ts +55 -0
  212. package/dist/core/pipes/pipe.decorator.d.ts.map +1 -0
  213. package/dist/core/pipes/pipe.decorator.js +85 -0
  214. package/dist/core/pipes/pipe.decorator.js.map +1 -0
  215. package/dist/core/pipes/pipe.interface.d.ts +36 -0
  216. package/dist/core/pipes/pipe.interface.d.ts.map +1 -0
  217. package/dist/core/pipes/pipe.interface.js +2 -0
  218. package/dist/core/pipes/pipe.interface.js.map +1 -0
  219. package/dist/core/prompt.d.ts +37 -0
  220. package/dist/core/prompt.d.ts.map +1 -0
  221. package/dist/core/prompt.js +76 -0
  222. package/dist/core/prompt.js.map +1 -0
  223. package/dist/core/resource.d.ts +42 -0
  224. package/dist/core/resource.d.ts.map +1 -0
  225. package/dist/core/resource.js +90 -0
  226. package/dist/core/resource.js.map +1 -0
  227. package/dist/core/server.d.ts +72 -0
  228. package/dist/core/server.d.ts.map +1 -0
  229. package/dist/core/server.js +406 -0
  230. package/dist/core/server.js.map +1 -0
  231. package/dist/core/tool.d.ts +78 -0
  232. package/dist/core/tool.d.ts.map +1 -0
  233. package/dist/core/tool.js +190 -0
  234. package/dist/core/tool.js.map +1 -0
  235. package/dist/core/transports/http-server.d.ts +102 -0
  236. package/dist/core/transports/http-server.d.ts.map +1 -0
  237. package/dist/core/transports/http-server.js +265 -0
  238. package/dist/core/transports/http-server.js.map +1 -0
  239. package/dist/core/types.d.ts +123 -0
  240. package/dist/core/types.d.ts.map +1 -0
  241. package/dist/core/types.js +2 -0
  242. package/dist/core/types.js.map +1 -0
  243. package/dist/core/widgets/widget-examples.resource.d.ts +17 -0
  244. package/dist/core/widgets/widget-examples.resource.d.ts.map +1 -0
  245. package/dist/core/widgets/widget-examples.resource.js +28 -0
  246. package/dist/core/widgets/widget-examples.resource.js.map +1 -0
  247. package/dist/core/widgets/widget-registry.d.ts +56 -0
  248. package/dist/core/widgets/widget-registry.d.ts.map +1 -0
  249. package/dist/core/widgets/widget-registry.js +75 -0
  250. package/dist/core/widgets/widget-registry.js.map +1 -0
  251. package/dist/testing/index.d.ts +82 -0
  252. package/dist/testing/index.d.ts.map +1 -0
  253. package/dist/testing/index.js +164 -0
  254. package/dist/testing/index.js.map +1 -0
  255. package/dist/ui-next/index.d.ts +31 -0
  256. package/dist/ui-next/index.d.ts.map +1 -0
  257. package/dist/ui-next/index.js +687 -0
  258. package/dist/ui-next/index.js.map +1 -0
  259. package/dist/widgets/index.d.ts +9 -0
  260. package/dist/widgets/index.d.ts.map +1 -0
  261. package/dist/widgets/index.js +9 -0
  262. package/dist/widgets/index.js.map +1 -0
  263. package/dist/widgets/metadata.d.ts +53 -0
  264. package/dist/widgets/metadata.d.ts.map +1 -0
  265. package/dist/widgets/metadata.js +29 -0
  266. package/dist/widgets/metadata.js.map +1 -0
  267. package/dist/widgets/withToolData.d.ts +19 -0
  268. package/dist/widgets/withToolData.d.ts.map +1 -0
  269. package/dist/widgets/withToolData.js +240 -0
  270. package/dist/widgets/withToolData.js.map +1 -0
  271. package/jest.config.js +21 -0
  272. package/package.json +108 -0
  273. package/templates/typescript-auth/AI_AGENT_CLI_REFERENCE.md +702 -0
  274. package/templates/typescript-auth/AI_AGENT_SDK_REFERENCE.md +1260 -0
  275. package/templates/typescript-auth/README.md +400 -0
  276. package/templates/typescript-auth/package.json +44 -0
  277. package/templates/typescript-auth-api-key/AI_AGENT_CLI_REFERENCE.md +701 -0
  278. package/templates/typescript-auth-api-key/AI_AGENT_SDK_REFERENCE.md +1260 -0
  279. package/templates/typescript-auth-api-key/README.md +483 -0
  280. package/templates/typescript-auth-api-key/package-lock.json +124 -0
  281. package/templates/typescript-auth-api-key/package.json +29 -0
  282. package/templates/typescript-oauth/AI_AGENT_CLI_REFERENCE.md +701 -0
  283. package/templates/typescript-oauth/AI_AGENT_SDK_REFERENCE.md +1260 -0
  284. package/templates/typescript-oauth/OAUTH_SETUP.md +406 -0
  285. package/templates/typescript-oauth/README.md +350 -0
  286. package/templates/typescript-oauth/package.json +30 -0
  287. package/templates/typescript-starter/AI_AGENT_CLI_REFERENCE.md +701 -0
  288. package/templates/typescript-starter/AI_AGENT_SDK_REFERENCE.md +1260 -0
  289. package/templates/typescript-starter/README.md +312 -0
  290. package/templates/typescript-starter/package.json +32 -0
@@ -0,0 +1,123 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Base configuration for MCP server
4
+ */
5
+ export interface McpServerConfig {
6
+ name: string;
7
+ version: string;
8
+ description?: string;
9
+ capabilities?: {
10
+ tools?: boolean;
11
+ resources?: boolean;
12
+ prompts?: boolean;
13
+ };
14
+ logging?: {
15
+ level: 'debug' | 'info' | 'warn' | 'error';
16
+ file?: string;
17
+ };
18
+ rateLimit?: {
19
+ maxRequests: number;
20
+ windowMs: number;
21
+ };
22
+ }
23
+ /**
24
+ * Tool definition with schema validation
25
+ */
26
+ export interface ToolDefinition<TInput = any, TOutput = any> {
27
+ name: string;
28
+ description: string;
29
+ inputSchema: z.ZodSchema<TInput>;
30
+ handler: (input: TInput, context: ExecutionContext) => Promise<TOutput>;
31
+ metadata?: {
32
+ category?: string;
33
+ tags?: string[];
34
+ rateLimit?: {
35
+ maxCalls: number;
36
+ windowMs: number;
37
+ };
38
+ };
39
+ }
40
+ /**
41
+ * Resource definition
42
+ */
43
+ export interface ResourceDefinition {
44
+ uri: string;
45
+ name: string;
46
+ description: string;
47
+ mimeType?: string;
48
+ handler: (context: ExecutionContext) => Promise<ResourceContent>;
49
+ metadata?: {
50
+ cacheable?: boolean;
51
+ cacheMaxAge?: number;
52
+ };
53
+ }
54
+ /**
55
+ * Resource content types
56
+ */
57
+ export type ResourceContent = {
58
+ type: 'text';
59
+ data: string;
60
+ } | {
61
+ type: 'binary';
62
+ data: Buffer;
63
+ } | {
64
+ type: 'json';
65
+ data: any;
66
+ };
67
+ /**
68
+ * Prompt definition
69
+ */
70
+ export interface PromptDefinition {
71
+ name: string;
72
+ description: string;
73
+ arguments?: PromptArgument[];
74
+ handler: (args: Record<string, any>, context: ExecutionContext) => Promise<PromptMessage[]>;
75
+ }
76
+ /**
77
+ * Prompt argument
78
+ */
79
+ export interface PromptArgument {
80
+ name: string;
81
+ description: string;
82
+ required?: boolean;
83
+ }
84
+ /**
85
+ * Prompt message
86
+ */
87
+ export interface PromptMessage {
88
+ role: 'user' | 'assistant' | 'system';
89
+ content: string;
90
+ }
91
+ /**
92
+ * Execution context passed to handlers
93
+ */
94
+ export interface ExecutionContext {
95
+ requestId: string;
96
+ toolName?: string;
97
+ logger: Logger;
98
+ metadata?: Record<string, any>;
99
+ auth?: {
100
+ subject?: string;
101
+ scopes?: string[];
102
+ [key: string]: any;
103
+ };
104
+ }
105
+ /**
106
+ * Logger interface
107
+ */
108
+ export interface Logger {
109
+ debug(message: string, meta?: any): void;
110
+ info(message: string, meta?: any): void;
111
+ warn(message: string, meta?: any): void;
112
+ error(message: string, meta?: any): void;
113
+ }
114
+ /**
115
+ * Server statistics
116
+ */
117
+ export interface ServerStats {
118
+ toolCalls: number;
119
+ resourceReads: number;
120
+ promptExecutions: number;
121
+ errors: number;
122
+ }
123
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Widget Examples Resource
3
+ *
4
+ * Exposes widget metadata and examples via MCP protocol
5
+ */
6
+ /**
7
+ * Build widget examples resource
8
+ * Returns resource definition for widget://examples
9
+ */
10
+ export declare function buildWidgetExamplesResource(): Promise<{
11
+ uri: string;
12
+ name: string;
13
+ description: string;
14
+ mimeType: string;
15
+ read: () => Promise<string>;
16
+ }>;
17
+ //# sourceMappingURL=widget-examples.resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-examples.resource.d.ts","sourceRoot":"","sources":["../../../src/core/widgets/widget-examples.resource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC,CAiBD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Widget Examples Resource
3
+ *
4
+ * Exposes widget metadata and examples via MCP protocol
5
+ */
6
+ import { getWidgetRegistry } from './widget-registry.js';
7
+ /**
8
+ * Build widget examples resource
9
+ * Returns resource definition for widget://examples
10
+ */
11
+ export async function buildWidgetExamplesResource() {
12
+ return {
13
+ uri: 'widget://examples',
14
+ name: 'Widget Examples',
15
+ description: 'Provides metadata and examples for all registered UI widgets',
16
+ mimeType: 'application/json',
17
+ read: async () => {
18
+ const registry = getWidgetRegistry();
19
+ const widgets = registry.getAllWidgets();
20
+ return JSON.stringify({
21
+ widgets,
22
+ count: widgets.length,
23
+ loaded: registry.isLoaded(),
24
+ }, null, 2);
25
+ },
26
+ };
27
+ }
28
+ //# sourceMappingURL=widget-examples.resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-examples.resource.js","sourceRoot":"","sources":["../../../src/core/widgets/widget-examples.resource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAO/C,OAAO;QACL,GAAG,EAAE,mBAAmB;QACxB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,8DAA8D;QAC3E,QAAQ,EAAE,kBAAkB;QAC5B,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;YAEzC,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;aAC5B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Widget Registry
3
+ *
4
+ * Manages widget metadata and example resolution
5
+ */
6
+ export interface WidgetExample {
7
+ name: string;
8
+ description: string;
9
+ data: Record<string, any>;
10
+ }
11
+ export interface WidgetMetadata {
12
+ uri: string;
13
+ name: string;
14
+ description: string;
15
+ examples: WidgetExample[];
16
+ tags?: string[];
17
+ }
18
+ export interface WidgetManifest {
19
+ version: string;
20
+ widgets: WidgetMetadata[];
21
+ generatedAt: string;
22
+ }
23
+ /**
24
+ * Widget Registry
25
+ * Loads and manages widget metadata from manifest
26
+ */
27
+ export declare class WidgetRegistry {
28
+ private widgets;
29
+ private loaded;
30
+ /**
31
+ * Load widget manifest from file
32
+ */
33
+ loadManifest(manifestPath: string): void;
34
+ /**
35
+ * Get all widgets
36
+ */
37
+ getAllWidgets(): WidgetMetadata[];
38
+ /**
39
+ * Get widget by URI
40
+ */
41
+ getWidget(uri: string): WidgetMetadata | undefined;
42
+ /**
43
+ * Get widget example data
44
+ * Returns the first example's data, or undefined if no examples
45
+ */
46
+ getWidgetExampleData(uri: string): Record<string, any> | undefined;
47
+ /**
48
+ * Check if manifest is loaded
49
+ */
50
+ isLoaded(): boolean;
51
+ }
52
+ /**
53
+ * Get the global widget registry instance
54
+ */
55
+ export declare function getWidgetRegistry(): WidgetRegistry;
56
+ //# sourceMappingURL=widget-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-registry.d.ts","sourceRoot":"","sources":["../../../src/core/widgets/widget-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,MAAM,CAAkB;IAEhC;;OAEG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAuBxC;;OAEG;IACH,aAAa,IAAI,cAAc,EAAE;IAIjC;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIlD;;;OAGG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;IAKlE;;OAEG;IACH,QAAQ,IAAI,OAAO;CAGpB;AAKD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Widget Registry
3
+ *
4
+ * Manages widget metadata and example resolution
5
+ */
6
+ import { readFileSync, existsSync } from 'fs';
7
+ /**
8
+ * Widget Registry
9
+ * Loads and manages widget metadata from manifest
10
+ */
11
+ export class WidgetRegistry {
12
+ widgets = new Map();
13
+ loaded = false;
14
+ /**
15
+ * Load widget manifest from file
16
+ */
17
+ loadManifest(manifestPath) {
18
+ if (!existsSync(manifestPath)) {
19
+ // Use stderr to avoid corrupting MCP stdio protocol
20
+ console.error(`[Widget Registry] Manifest not found at ${manifestPath}, skipping widget examples`);
21
+ return;
22
+ }
23
+ try {
24
+ const manifestContent = readFileSync(manifestPath, 'utf-8');
25
+ const manifest = JSON.parse(manifestContent);
26
+ for (const widget of manifest.widgets) {
27
+ this.widgets.set(widget.uri, widget);
28
+ }
29
+ this.loaded = true;
30
+ // Use stderr to avoid corrupting MCP stdio protocol
31
+ console.error(`[Widget Registry] Loaded ${this.widgets.size} widget(s) from manifest`);
32
+ }
33
+ catch (error) {
34
+ console.error(`[Widget Registry] Failed to load widget manifest:`, error.message);
35
+ }
36
+ }
37
+ /**
38
+ * Get all widgets
39
+ */
40
+ getAllWidgets() {
41
+ return Array.from(this.widgets.values());
42
+ }
43
+ /**
44
+ * Get widget by URI
45
+ */
46
+ getWidget(uri) {
47
+ return this.widgets.get(uri);
48
+ }
49
+ /**
50
+ * Get widget example data
51
+ * Returns the first example's data, or undefined if no examples
52
+ */
53
+ getWidgetExampleData(uri) {
54
+ const widget = this.widgets.get(uri);
55
+ return widget?.examples[0]?.data;
56
+ }
57
+ /**
58
+ * Check if manifest is loaded
59
+ */
60
+ isLoaded() {
61
+ return this.loaded;
62
+ }
63
+ }
64
+ // Global registry instance
65
+ let registryInstance = null;
66
+ /**
67
+ * Get the global widget registry instance
68
+ */
69
+ export function getWidgetRegistry() {
70
+ if (!registryInstance) {
71
+ registryInstance = new WidgetRegistry();
72
+ }
73
+ return registryInstance;
74
+ }
75
+ //# sourceMappingURL=widget-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-registry.js","sourceRoot":"","sources":["../../../src/core/widgets/widget-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAuB9C;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,OAAO,GAAgC,IAAI,GAAG,EAAE,CAAC;IACjD,MAAM,GAAY,KAAK,CAAC;IAEhC;;OAEG;IACH,YAAY,CAAC,YAAoB;QAC/B,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,oDAAoD;YACpD,OAAO,CAAC,KAAK,CAAC,2CAA2C,YAAY,4BAA4B,CAAC,CAAC;YACnG,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAmB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE7D,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,oDAAoD;YACpD,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,OAAO,CAAC,IAAI,0BAA0B,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,GAAW;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,2BAA2B;AAC3B,IAAI,gBAAgB,GAA0B,IAAI,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,IAAI,cAAc,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,82 @@
1
+ import 'reflect-metadata';
2
+ import { DIContainer } from '../core/di/container.js';
3
+ import { ExecutionContext, Logger } from '../core/types.js';
4
+ declare global {
5
+ var jest: any | undefined;
6
+ }
7
+ /**
8
+ * Testing utilities for NitroStack
9
+ */
10
+ /**
11
+ * Mock logger for testing
12
+ */
13
+ export declare class MockLogger implements Logger {
14
+ logs: {
15
+ level: string;
16
+ message: string;
17
+ meta?: any;
18
+ }[];
19
+ debug(message: string, meta?: any): void;
20
+ info(message: string, meta?: any): void;
21
+ warn(message: string, meta?: any): void;
22
+ error(message: string, meta?: any): void;
23
+ clear(): void;
24
+ hasLog(level: string, message: string): boolean;
25
+ }
26
+ /**
27
+ * Create a mock execution context for testing
28
+ */
29
+ export declare function createMockContext(overrides?: Partial<ExecutionContext>): ExecutionContext;
30
+ /**
31
+ * Testing module builder
32
+ */
33
+ export declare class TestingModule {
34
+ private container;
35
+ private providers;
36
+ private mocks;
37
+ private constructor();
38
+ /**
39
+ * Create a testing module
40
+ */
41
+ static create(): TestingModule;
42
+ /**
43
+ * Add a provider to the module
44
+ */
45
+ addProvider(token: any, provider?: any): this;
46
+ /**
47
+ * Add a mock to the module
48
+ */
49
+ addMock<T = any>(token: any, mock: T): this;
50
+ /**
51
+ * Compile the testing module
52
+ */
53
+ compile(): CompiledTestingModule;
54
+ }
55
+ /**
56
+ * Compiled testing module
57
+ */
58
+ export declare class CompiledTestingModule {
59
+ private container;
60
+ constructor(container: DIContainer);
61
+ /**
62
+ * Get an instance from the container
63
+ */
64
+ get<T>(token: any): T;
65
+ /**
66
+ * Cleanup the module
67
+ */
68
+ cleanup(): void;
69
+ }
70
+ /**
71
+ * Create a mock function (compatible with Jest)
72
+ */
73
+ export declare function createMockFn<T extends (...args: any[]) => any>(): any;
74
+ /**
75
+ * Wait for async operations to complete
76
+ */
77
+ export declare function flushPromises(): Promise<void>;
78
+ /**
79
+ * Spy on a method
80
+ */
81
+ export declare function spyOn<T extends object, K extends keyof T>(obj: T, method: K): any;
82
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,IAAI,EAAE,GAAG,GAAG,SAAS,CAAC;CAC3B;AAED;;GAEG;AAEH;;GAEG;AACH,qBAAa,UAAW,YAAW,MAAM;IACvC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,CAAM;IAE5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIvC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAIxC,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;CAGhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAUzF;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAA4B;IAEzC,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,aAAa;IAI9B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAK7C;;OAEG;IACH,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAK3C;;OAEG;IACH,OAAO,IAAI,qBAAqB;CAkBjC;AAED;;GAEG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,WAAW;IAE1C;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAIrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,CAwBrE;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EACvD,GAAG,EAAE,CAAC,EACN,MAAM,EAAE,CAAC,GACR,GAAG,CAmBL"}
@@ -0,0 +1,164 @@
1
+ import 'reflect-metadata';
2
+ import { DIContainer } from '../core/di/container.js';
3
+ /**
4
+ * Testing utilities for NitroStack
5
+ */
6
+ /**
7
+ * Mock logger for testing
8
+ */
9
+ export class MockLogger {
10
+ logs = [];
11
+ debug(message, meta) {
12
+ this.logs.push({ level: 'debug', message, meta });
13
+ }
14
+ info(message, meta) {
15
+ this.logs.push({ level: 'info', message, meta });
16
+ }
17
+ warn(message, meta) {
18
+ this.logs.push({ level: 'warn', message, meta });
19
+ }
20
+ error(message, meta) {
21
+ this.logs.push({ level: 'error', message, meta });
22
+ }
23
+ clear() {
24
+ this.logs = [];
25
+ }
26
+ hasLog(level, message) {
27
+ return this.logs.some(log => log.level === level && log.message.includes(message));
28
+ }
29
+ }
30
+ /**
31
+ * Create a mock execution context for testing
32
+ */
33
+ export function createMockContext(overrides) {
34
+ const mockLogger = new MockLogger();
35
+ return {
36
+ requestId: 'test-request-id',
37
+ logger: mockLogger,
38
+ metadata: {},
39
+ auth: undefined,
40
+ ...overrides,
41
+ };
42
+ }
43
+ /**
44
+ * Testing module builder
45
+ */
46
+ export class TestingModule {
47
+ container;
48
+ providers = new Map();
49
+ mocks = new Map();
50
+ constructor() {
51
+ this.container = DIContainer.getInstance();
52
+ }
53
+ /**
54
+ * Create a testing module
55
+ */
56
+ static create() {
57
+ return new TestingModule();
58
+ }
59
+ /**
60
+ * Add a provider to the module
61
+ */
62
+ addProvider(token, provider) {
63
+ this.providers.set(token, provider || token);
64
+ return this;
65
+ }
66
+ /**
67
+ * Add a mock to the module
68
+ */
69
+ addMock(token, mock) {
70
+ this.mocks.set(token, mock);
71
+ return this;
72
+ }
73
+ /**
74
+ * Compile the testing module
75
+ */
76
+ compile() {
77
+ // Clear existing container
78
+ this.container.clear();
79
+ // Register mocks first (they take precedence)
80
+ for (const [token, mock] of this.mocks.entries()) {
81
+ this.container.registerValue(token, mock);
82
+ }
83
+ // Register providers
84
+ for (const [token, provider] of this.providers.entries()) {
85
+ if (!this.mocks.has(token)) {
86
+ this.container.register(token, provider);
87
+ }
88
+ }
89
+ return new CompiledTestingModule(this.container);
90
+ }
91
+ }
92
+ /**
93
+ * Compiled testing module
94
+ */
95
+ export class CompiledTestingModule {
96
+ container;
97
+ constructor(container) {
98
+ this.container = container;
99
+ }
100
+ /**
101
+ * Get an instance from the container
102
+ */
103
+ get(token) {
104
+ return this.container.resolve(token);
105
+ }
106
+ /**
107
+ * Cleanup the module
108
+ */
109
+ cleanup() {
110
+ this.container.clear();
111
+ }
112
+ }
113
+ /**
114
+ * Create a mock function (compatible with Jest)
115
+ */
116
+ export function createMockFn() {
117
+ // If jest is available, use it
118
+ if (typeof jest !== 'undefined' && jest?.fn) {
119
+ return jest.fn();
120
+ }
121
+ // Otherwise, create a simple mock
122
+ const fn = (...args) => {
123
+ fn.calls.push(args);
124
+ return fn.mockReturnValue;
125
+ };
126
+ fn.calls = [];
127
+ fn.mockReturnValue = undefined;
128
+ fn.mockResolvedValue = (value) => {
129
+ fn.mockReturnValue = Promise.resolve(value);
130
+ return fn;
131
+ };
132
+ fn.mockRejectedValue = (error) => {
133
+ fn.mockReturnValue = Promise.reject(error);
134
+ return fn;
135
+ };
136
+ return fn;
137
+ }
138
+ /**
139
+ * Wait for async operations to complete
140
+ */
141
+ export async function flushPromises() {
142
+ return new Promise(resolve => setImmediate(resolve));
143
+ }
144
+ /**
145
+ * Spy on a method
146
+ */
147
+ export function spyOn(obj, method) {
148
+ if (typeof jest !== 'undefined' && jest?.spyOn) {
149
+ return jest.spyOn(obj, method);
150
+ }
151
+ // Simple spy implementation
152
+ const original = obj[method];
153
+ const spy = (...args) => {
154
+ spy.calls.push(args);
155
+ return original.apply(obj, args);
156
+ };
157
+ spy.calls = [];
158
+ spy.restore = () => {
159
+ obj[method] = original;
160
+ };
161
+ obj[method] = spy;
162
+ return spy;
163
+ }
164
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Component } from '../core/component.js';
2
+ import { ExecutionContext } from '../core/types.js';
3
+ export interface CreateNextComponentOptions {
4
+ id: string;
5
+ name: string;
6
+ projectDir: string;
7
+ entryHtml?: string;
8
+ description?: string;
9
+ prefersBorder?: boolean;
10
+ csp?: {
11
+ connectDomains?: string[];
12
+ resourceDomains?: string[];
13
+ };
14
+ transformer?: (data: any, context: ExecutionContext) => any;
15
+ build?: boolean;
16
+ buildScript?: string;
17
+ }
18
+ /**
19
+ * Build a Next.js widget and create a NitroStack Component from the exported HTML.
20
+ * Produces a single-file HTML bundle compatible with OpenAI Apps SDK widgets.
21
+ */
22
+ export declare function createComponentFromNext(opts: CreateNextComponentOptions): Component;
23
+ export declare const uiNext: {
24
+ createComponentFromNext: typeof createComponentFromNext;
25
+ };
26
+ export interface CreateNextRouteOptions extends Omit<CreateNextComponentOptions, 'entryHtml'> {
27
+ routePath: string;
28
+ }
29
+ export declare function createComponentFromNextRoute(routePath: string, options?: Partial<CreateNextRouteOptions>): Component;
30
+ export declare function createComponentFromNextRoute(opts: CreateNextRouteOptions): Component;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui-next/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA8DpD,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,GAAG,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,KAAK,GAAG,CAAC;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,0BAA0B,GAAG,SAAS,CAwCnF;AAED,eAAO,MAAM,MAAM;;CAA8B,CAAC;AAMlD,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,0BAA0B,EAAE,WAAW,CAAC;IAC3F,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;AACtH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,sBAAsB,GAAG,SAAS,CAAC"}