@vegamo/loom 0.1.1

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 (196) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +465 -0
  3. package/dist/agents/core/agent.d.ts +65 -0
  4. package/dist/agents/core/agent.d.ts.map +1 -0
  5. package/dist/agents/core/agent.js +277 -0
  6. package/dist/agents/core/agent.js.map +1 -0
  7. package/dist/agents/core/prompt.d.ts +11 -0
  8. package/dist/agents/core/prompt.d.ts.map +1 -0
  9. package/dist/agents/core/prompt.js +117 -0
  10. package/dist/agents/core/prompt.js.map +1 -0
  11. package/dist/agents/core/types.d.ts +49 -0
  12. package/dist/agents/core/types.d.ts.map +1 -0
  13. package/dist/agents/core/types.js +5 -0
  14. package/dist/agents/core/types.js.map +1 -0
  15. package/dist/agents/memory/memory.d.ts +62 -0
  16. package/dist/agents/memory/memory.d.ts.map +1 -0
  17. package/dist/agents/memory/memory.js +113 -0
  18. package/dist/agents/memory/memory.js.map +1 -0
  19. package/dist/agents/memory/types.d.ts +15 -0
  20. package/dist/agents/memory/types.d.ts.map +1 -0
  21. package/dist/agents/memory/types.js +5 -0
  22. package/dist/agents/memory/types.js.map +1 -0
  23. package/dist/index.d.ts +13 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +104 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/llm/client.d.ts +49 -0
  28. package/dist/llm/client.d.ts.map +1 -0
  29. package/dist/llm/client.js +256 -0
  30. package/dist/llm/client.js.map +1 -0
  31. package/dist/llm/config.d.ts +13 -0
  32. package/dist/llm/config.d.ts.map +1 -0
  33. package/dist/llm/config.js +50 -0
  34. package/dist/llm/config.js.map +1 -0
  35. package/dist/llm/types.d.ts +74 -0
  36. package/dist/llm/types.d.ts.map +1 -0
  37. package/dist/llm/types.js +17 -0
  38. package/dist/llm/types.js.map +1 -0
  39. package/dist/mocks/generator.d.ts +10 -0
  40. package/dist/mocks/generator.d.ts.map +1 -0
  41. package/dist/mocks/generator.js +19 -0
  42. package/dist/mocks/generator.js.map +1 -0
  43. package/dist/mocks/router.d.ts +13 -0
  44. package/dist/mocks/router.d.ts.map +1 -0
  45. package/dist/mocks/router.js +44 -0
  46. package/dist/mocks/router.js.map +1 -0
  47. package/dist/mocks/server.d.ts +21 -0
  48. package/dist/mocks/server.d.ts.map +1 -0
  49. package/dist/mocks/server.js +36 -0
  50. package/dist/mocks/server.js.map +1 -0
  51. package/dist/serve.d.ts +17 -0
  52. package/dist/serve.d.ts.map +1 -0
  53. package/dist/serve.js +56 -0
  54. package/dist/serve.js.map +1 -0
  55. package/dist/shared/config-wizard.d.ts +7 -0
  56. package/dist/shared/config-wizard.d.ts.map +1 -0
  57. package/dist/shared/config-wizard.js +84 -0
  58. package/dist/shared/config-wizard.js.map +1 -0
  59. package/dist/shared/config.d.ts +32 -0
  60. package/dist/shared/config.d.ts.map +1 -0
  61. package/dist/shared/config.js +77 -0
  62. package/dist/shared/config.js.map +1 -0
  63. package/dist/shared/entity-utils.d.ts +30 -0
  64. package/dist/shared/entity-utils.d.ts.map +1 -0
  65. package/dist/shared/entity-utils.js +207 -0
  66. package/dist/shared/entity-utils.js.map +1 -0
  67. package/dist/shared/logger.d.ts +13 -0
  68. package/dist/shared/logger.d.ts.map +1 -0
  69. package/dist/shared/logger.js +45 -0
  70. package/dist/shared/logger.js.map +1 -0
  71. package/dist/shared/manifest-utils.d.ts +9 -0
  72. package/dist/shared/manifest-utils.d.ts.map +1 -0
  73. package/dist/shared/manifest-utils.js +110 -0
  74. package/dist/shared/manifest-utils.js.map +1 -0
  75. package/dist/shared/schema-entity-resolver.d.ts +15 -0
  76. package/dist/shared/schema-entity-resolver.d.ts.map +1 -0
  77. package/dist/shared/schema-entity-resolver.js +134 -0
  78. package/dist/shared/schema-entity-resolver.js.map +1 -0
  79. package/dist/shared/schema-utils.d.ts +21 -0
  80. package/dist/shared/schema-utils.d.ts.map +1 -0
  81. package/dist/shared/schema-utils.js +56 -0
  82. package/dist/shared/schema-utils.js.map +1 -0
  83. package/dist/shared/types.d.ts +130 -0
  84. package/dist/shared/types.d.ts.map +1 -0
  85. package/dist/shared/types.js +5 -0
  86. package/dist/shared/types.js.map +1 -0
  87. package/dist/tools/entity-file-ops.d.ts +10 -0
  88. package/dist/tools/entity-file-ops.d.ts.map +1 -0
  89. package/dist/tools/entity-file-ops.js +183 -0
  90. package/dist/tools/entity-file-ops.js.map +1 -0
  91. package/dist/tools/entity-workflow.d.ts +10 -0
  92. package/dist/tools/entity-workflow.d.ts.map +1 -0
  93. package/dist/tools/entity-workflow.js +447 -0
  94. package/dist/tools/entity-workflow.js.map +1 -0
  95. package/dist/tools/file-ops.d.ts +9 -0
  96. package/dist/tools/file-ops.d.ts.map +1 -0
  97. package/dist/tools/file-ops.js +83 -0
  98. package/dist/tools/file-ops.js.map +1 -0
  99. package/dist/tools/registry.d.ts +31 -0
  100. package/dist/tools/registry.d.ts.map +1 -0
  101. package/dist/tools/registry.js +58 -0
  102. package/dist/tools/registry.js.map +1 -0
  103. package/dist/tools/schema-gen.d.ts +8 -0
  104. package/dist/tools/schema-gen.d.ts.map +1 -0
  105. package/dist/tools/schema-gen.js +82 -0
  106. package/dist/tools/schema-gen.js.map +1 -0
  107. package/dist/tools/schema-validate.d.ts +8 -0
  108. package/dist/tools/schema-validate.d.ts.map +1 -0
  109. package/dist/tools/schema-validate.js +79 -0
  110. package/dist/tools/schema-validate.js.map +1 -0
  111. package/dist/tools/types.d.ts +29 -0
  112. package/dist/tools/types.d.ts.map +1 -0
  113. package/dist/tools/types.js +5 -0
  114. package/dist/tools/types.js.map +1 -0
  115. package/dist/tui/app.d.ts +13 -0
  116. package/dist/tui/app.d.ts.map +1 -0
  117. package/dist/tui/app.js +357 -0
  118. package/dist/tui/app.js.map +1 -0
  119. package/dist/tui/components/Chat.d.ts +14 -0
  120. package/dist/tui/components/Chat.d.ts.map +1 -0
  121. package/dist/tui/components/Chat.js +24 -0
  122. package/dist/tui/components/Chat.js.map +1 -0
  123. package/dist/tui/components/Header.d.ts +14 -0
  124. package/dist/tui/components/Header.d.ts.map +1 -0
  125. package/dist/tui/components/Header.js +6 -0
  126. package/dist/tui/components/Header.js.map +1 -0
  127. package/dist/tui/components/Input.d.ts +15 -0
  128. package/dist/tui/components/Input.d.ts.map +1 -0
  129. package/dist/tui/components/Input.js +74 -0
  130. package/dist/tui/components/Input.js.map +1 -0
  131. package/dist/tui/components/SchemaPreview.d.ts +13 -0
  132. package/dist/tui/components/SchemaPreview.d.ts.map +1 -0
  133. package/dist/tui/components/SchemaPreview.js +9 -0
  134. package/dist/tui/components/SchemaPreview.js.map +1 -0
  135. package/dist/tui/components/StatusBar.d.ts +15 -0
  136. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  137. package/dist/tui/components/StatusBar.js +7 -0
  138. package/dist/tui/components/StatusBar.js.map +1 -0
  139. package/dist/tui/hooks/useAgent.d.ts +41 -0
  140. package/dist/tui/hooks/useAgent.d.ts.map +1 -0
  141. package/dist/tui/hooks/useAgent.js +180 -0
  142. package/dist/tui/hooks/useAgent.js.map +1 -0
  143. package/dist/view/frontend/components/App.d.ts +4 -0
  144. package/dist/view/frontend/components/App.d.ts.map +1 -0
  145. package/dist/view/frontend/components/App.js +35 -0
  146. package/dist/view/frontend/components/App.js.map +1 -0
  147. package/dist/view/frontend/components/EndpointDetailPage.d.ts +4 -0
  148. package/dist/view/frontend/components/EndpointDetailPage.d.ts.map +1 -0
  149. package/dist/view/frontend/components/EndpointDetailPage.js +103 -0
  150. package/dist/view/frontend/components/EndpointDetailPage.js.map +1 -0
  151. package/dist/view/frontend/components/HomePage.d.ts +4 -0
  152. package/dist/view/frontend/components/HomePage.d.ts.map +1 -0
  153. package/dist/view/frontend/components/HomePage.js +6 -0
  154. package/dist/view/frontend/components/HomePage.js.map +1 -0
  155. package/dist/view/frontend/components/ModuleDetailPage.d.ts +4 -0
  156. package/dist/view/frontend/components/ModuleDetailPage.d.ts.map +1 -0
  157. package/dist/view/frontend/components/ModuleDetailPage.js +64 -0
  158. package/dist/view/frontend/components/ModuleDetailPage.js.map +1 -0
  159. package/dist/view/frontend/components/ModulesPage.d.ts +4 -0
  160. package/dist/view/frontend/components/ModulesPage.d.ts.map +1 -0
  161. package/dist/view/frontend/components/ModulesPage.js +40 -0
  162. package/dist/view/frontend/components/ModulesPage.js.map +1 -0
  163. package/dist/view/frontend/index.d.ts +2 -0
  164. package/dist/view/frontend/index.d.ts.map +1 -0
  165. package/dist/view/frontend/index.js +15 -0
  166. package/dist/view/frontend/index.js.map +1 -0
  167. package/dist/view/frontend/types.d.ts +35 -0
  168. package/dist/view/frontend/types.d.ts.map +1 -0
  169. package/dist/view/frontend/types.js +2 -0
  170. package/dist/view/frontend/types.js.map +1 -0
  171. package/dist/view/frontend/utils/api.d.ts +5 -0
  172. package/dist/view/frontend/utils/api.d.ts.map +1 -0
  173. package/dist/view/frontend/utils/api.js +28 -0
  174. package/dist/view/frontend/utils/api.js.map +1 -0
  175. package/dist/view/public/bundle.js +104633 -0
  176. package/dist/view/public/bundle.js.map +7 -0
  177. package/dist/view/public/index.html +50 -0
  178. package/dist/view/routes/docs.d.ts +13 -0
  179. package/dist/view/routes/docs.d.ts.map +1 -0
  180. package/dist/view/routes/docs.js +53 -0
  181. package/dist/view/routes/docs.js.map +1 -0
  182. package/dist/view/routes/entities.d.ts +11 -0
  183. package/dist/view/routes/entities.d.ts.map +1 -0
  184. package/dist/view/routes/entities.js +39 -0
  185. package/dist/view/routes/entities.js.map +1 -0
  186. package/dist/view/routes/schema.d.ts +11 -0
  187. package/dist/view/routes/schema.d.ts.map +1 -0
  188. package/dist/view/routes/schema.js +43 -0
  189. package/dist/view/routes/schema.js.map +1 -0
  190. package/dist/view/server.d.ts +20 -0
  191. package/dist/view/server.d.ts.map +1 -0
  192. package/dist/view/server.js +54 -0
  193. package/dist/view/server.js.map +1 -0
  194. package/docgen.config.json +19 -0
  195. package/docgen.config.json.example +19 -0
  196. package/package.json +79 -0
@@ -0,0 +1,103 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { useParams, useSearchParams, Link } from 'react-router-dom';
4
+ import { fetchModuleDetail } from '../utils/api.ts';
5
+ const EndpointDetailPage = () => {
6
+ const { filename, endpointPath } = useParams();
7
+ const [searchParams] = useSearchParams();
8
+ const method = searchParams.get('method') || 'GET';
9
+ const [endpoint, setEndpoint] = useState(null);
10
+ const [loading, setLoading] = useState(true);
11
+ const [error, setError] = useState(null);
12
+ useEffect(() => {
13
+ if (!filename)
14
+ return;
15
+ fetchModuleDetail(filename)
16
+ .then(data => {
17
+ const found = data.endpoints.find(ep => ep.path === decodeURIComponent(endpointPath || '') && ep.method === method);
18
+ if (found) {
19
+ setEndpoint(found);
20
+ }
21
+ else {
22
+ setError('Endpoint not found');
23
+ }
24
+ setLoading(false);
25
+ })
26
+ .catch((err) => {
27
+ setError(err.message);
28
+ setLoading(false);
29
+ });
30
+ }, [filename, endpointPath, method]);
31
+ if (loading)
32
+ return _jsx("div", { children: "Loading endpoint details..." });
33
+ if (error)
34
+ return _jsxs("div", { style: { color: '#d32f2f' }, children: ["Error: ", error] });
35
+ if (!endpoint)
36
+ return _jsx("div", { children: "Endpoint not found" });
37
+ return (_jsxs("div", { children: [_jsx("nav", { style: { marginBottom: '1.5rem' }, children: _jsx(Link, { to: `/modules/${filename}`, style: { color: '#4a6bff', textDecoration: 'none' }, children: "\u2190 Back to Module" }) }), _jsxs("header", { style: { marginBottom: '2rem' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', marginBottom: '0.5rem' }, children: [_jsx("span", { style: {
38
+ background: methodColor[endpoint.method] || '#999',
39
+ color: '#fff',
40
+ fontWeight: 'bold',
41
+ fontSize: '1rem',
42
+ padding: '4px 12px',
43
+ borderRadius: '4px',
44
+ marginRight: '1rem',
45
+ }, children: endpoint.method }), _jsx("code", { style: { fontSize: '1.5rem', fontWeight: '600' }, children: endpoint.path })] }), _jsx("h1", { style: { marginBottom: '0.5rem' }, children: endpoint.summary }), endpoint.description && (_jsx("p", { style: { color: '#666', fontSize: '1.1rem' }, children: endpoint.description }))] }), _jsxs("div", { style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '2rem' }, children: [_jsxs("div", { children: [_jsx("h2", { children: "Request" }), _jsx(RequestDetails, { endpoint: endpoint })] }), _jsxs("div", { children: [_jsx("h2", { children: "Response" }), _jsx(ResponseDetails, { endpoint: endpoint })] })] }), _jsxs("section", { style: { marginTop: '3rem' }, children: [_jsx("h2", { children: "Mock Testing" }), _jsx("p", { children: "Test this endpoint with generated mock data." }), _jsx("div", { style: { background: '#f8f9fa', padding: '1.5rem', borderRadius: '8px' }, children: _jsx(MockTestInterface, { endpoint: endpoint, filename: filename }) })] })] }));
46
+ };
47
+ const methodColor = {
48
+ GET: '#61affe',
49
+ POST: '#49cc90',
50
+ PUT: '#fca130',
51
+ DELETE: '#f93e3e',
52
+ PATCH: '#50e3c2',
53
+ };
54
+ const RequestDetails = ({ endpoint }) => {
55
+ const { request } = endpoint;
56
+ if (!request)
57
+ return _jsx("p", { children: "No request details defined." });
58
+ return (_jsxs("div", { children: [request.headers && (_jsxs("div", { children: [_jsx("h4", { children: "Headers" }), _jsx("pre", { style: { background: '#fff', padding: '1rem', borderRadius: '4px', overflow: 'auto' }, children: JSON.stringify(request.headers, null, 2) })] })), request.params && (_jsxs("div", { children: [_jsx("h4", { children: "Path Parameters" }), _jsx("pre", { style: { background: '#fff', padding: '1rem', borderRadius: '4px', overflow: 'auto' }, children: JSON.stringify(request.params, null, 2) })] })), request.query && (_jsxs("div", { children: [_jsx("h4", { children: "Query Parameters" }), _jsx("pre", { style: { background: '#fff', padding: '1rem', borderRadius: '4px', overflow: 'auto' }, children: JSON.stringify(request.query, null, 2) })] })), request.body && (_jsxs("div", { children: [_jsx("h4", { children: "Request Body" }), _jsx("pre", { style: { background: '#fff', padding: '1rem', borderRadius: '4px', overflow: 'auto' }, children: JSON.stringify(request.body, null, 2) })] }))] }));
59
+ };
60
+ const ResponseDetails = ({ endpoint }) => {
61
+ const { response } = endpoint;
62
+ if (!response)
63
+ return _jsx("p", { children: "No response details defined." });
64
+ return (_jsx("div", { children: Object.entries(response).map(([statusCode, schema]) => (_jsxs("div", { style: { marginBottom: '1.5rem' }, children: [_jsxs("h4", { children: ["Status ", statusCode] }), _jsx("pre", { style: { background: '#fff', padding: '1rem', borderRadius: '4px', overflow: 'auto' }, children: JSON.stringify(schema, null, 2) })] }, statusCode))) }));
65
+ };
66
+ const MockTestInterface = ({ endpoint, filename }) => {
67
+ const [loading, setLoading] = useState(false);
68
+ const [result, setResult] = useState(null);
69
+ const [error, setError] = useState(null);
70
+ const handleTest = async () => {
71
+ setLoading(true);
72
+ setError(null);
73
+ try {
74
+ // TODO: call the mock server endpoint
75
+ const mockBase = `http://localhost:3001`; // mock server port (should be configurable)
76
+ const url = `${mockBase}${endpoint.path}`;
77
+ const options = {
78
+ method: endpoint.method,
79
+ headers: { 'Content-Type': 'application/json' },
80
+ };
81
+ const res = await fetch(url, options);
82
+ const data = await res.json();
83
+ setResult({ status: res.status, data });
84
+ }
85
+ catch (err) {
86
+ setError(err.message);
87
+ }
88
+ finally {
89
+ setLoading(false);
90
+ }
91
+ };
92
+ return (_jsxs("div", { children: [_jsx("button", { onClick: handleTest, disabled: loading, style: {
93
+ background: '#4a6bff',
94
+ color: '#fff',
95
+ border: 'none',
96
+ padding: '0.75rem 1.5rem',
97
+ borderRadius: '4px',
98
+ fontSize: '1rem',
99
+ cursor: 'pointer',
100
+ }, children: loading ? 'Testing...' : 'Test Endpoint' }), error && (_jsxs("div", { style: { marginTop: '1rem', color: '#d32f2f' }, children: ["Error: ", error] })), result && (_jsxs("div", { style: { marginTop: '1rem' }, children: [_jsx("h4", { children: "Response" }), _jsx("pre", { style: { background: '#fff', padding: '1rem', borderRadius: '4px', overflow: 'auto' }, children: JSON.stringify(result, null, 2) })] }))] }));
101
+ };
102
+ export default EndpointDetailPage;
103
+ //# sourceMappingURL=EndpointDetailPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndpointDetailPage.js","sourceRoot":"","sources":["../../../../src/view/frontend/components/EndpointDetailPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ declare const HomePage: React.FC;
3
+ export default HomePage;
4
+ //# sourceMappingURL=HomePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomePage.d.ts","sourceRoot":"","sources":["../../../../src/view/frontend/components/HomePage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAqBrB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const HomePage = () => {
3
+ return (_jsxs("div", { style: { maxWidth: '800px', margin: '0 auto' }, children: [_jsx("h1", { children: "Welcome to DocuGen API Viewer" }), _jsx("p", { children: "Browse your generated API documentation, inspect endpoints, and test mock responses." }), _jsxs("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(250px, 1fr))', gap: '1.5rem', marginTop: '2rem' }, children: [_jsxs("div", { style: { background: '#fff', padding: '1.5rem', borderRadius: '8px', boxShadow: '0 2px 8px rgba(0,0,0,0.1)' }, children: [_jsxs("h3", { children: [_jsx("i", { className: "fas fa-book" }), " Modules"] }), _jsx("p", { children: "View all API modules generated from your JSON Schema files." })] }), _jsxs("div", { style: { background: '#fff', padding: '1.5rem', borderRadius: '8px', boxShadow: '0 2px 8px rgba(0,0,0,0.1)' }, children: [_jsxs("h3", { children: [_jsx("i", { className: "fas fa-bolt" }), " Mock Testing"] }), _jsx("p", { children: "Test endpoints with generated mock data directly from the UI." })] }), _jsxs("div", { style: { background: '#fff', padding: '1.5rem', borderRadius: '8px', boxShadow: '0 2px 8px rgba(0,0,0,0.1)' }, children: [_jsxs("h3", { children: [_jsx("i", { className: "fas fa-search" }), " Search"] }), _jsx("p", { children: "Find endpoints by path, method, or description." })] })] })] }));
4
+ };
5
+ export default HomePage;
6
+ //# sourceMappingURL=HomePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomePage.js","sourceRoot":"","sources":["../../../../src/view/frontend/components/HomePage.tsx"],"names":[],"mappings":";AAEA,MAAM,QAAQ,GAAa,GAAG,EAAE;IAC9B,OAAO,CACL,eAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aACjD,yDAAsC,EACtC,+GAA2F,EAC3F,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,sCAAsC,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,aAC5H,eAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,2BAA2B,EAAE,aAChH,yBAAI,YAAG,SAAS,EAAC,aAAa,GAAK,gBAAa,EAChD,sFAAkE,IAC9D,EACN,eAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,2BAA2B,EAAE,aAChH,yBAAI,YAAG,SAAS,EAAC,aAAa,GAAK,qBAAkB,EACrD,wFAAoE,IAChE,EACN,eAAK,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,2BAA2B,EAAE,aAChH,yBAAI,YAAG,SAAS,EAAC,eAAe,GAAK,eAAY,EACjD,0EAAsD,IAClD,IACF,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ declare const ModuleDetailPage: React.FC;
3
+ export default ModuleDetailPage;
4
+ //# sourceMappingURL=ModuleDetailPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/view/frontend/components/ModuleDetailPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAkD7B,CAAC;AAgEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { useParams, Link } from 'react-router-dom';
4
+ import { fetchModuleDetail } from '../utils/api.ts';
5
+ const ModuleDetailPage = () => {
6
+ const { filename } = useParams();
7
+ const [module, setModule] = useState(null);
8
+ const [loading, setLoading] = useState(true);
9
+ const [error, setError] = useState(null);
10
+ useEffect(() => {
11
+ if (!filename)
12
+ return;
13
+ fetchModuleDetail(filename)
14
+ .then((data) => {
15
+ setModule(data);
16
+ setLoading(false);
17
+ })
18
+ .catch((err) => {
19
+ setError(err.message);
20
+ setLoading(false);
21
+ });
22
+ }, [filename]);
23
+ if (loading)
24
+ return _jsx("div", { children: "Loading module details..." });
25
+ if (error)
26
+ return _jsxs("div", { style: { color: '#d32f2f' }, children: ["Error: ", error] });
27
+ if (!module)
28
+ return _jsx("div", { children: "Module not found" });
29
+ return (_jsxs("div", { children: [_jsx("nav", { style: { marginBottom: '1.5rem' }, children: _jsx(Link, { to: "/modules", style: { color: '#4a6bff', textDecoration: 'none' }, children: "\u2190 Back to Modules" }) }), _jsxs("header", { style: { marginBottom: '2rem' }, children: [_jsx("h1", { style: { marginBottom: '0.5rem' }, children: module.title }), _jsx("p", { style: { color: '#666', fontSize: '1.1rem' }, children: module.description }), module.version && (_jsxs("span", { style: { background: '#e0e7ff', color: '#4a6bff', padding: '0.25rem 0.75rem', borderRadius: '12px', fontSize: '0.9rem' }, children: ["Version ", module.version] }))] }), _jsxs("section", { children: [_jsx("h2", { children: "Endpoints" }), _jsx("div", { style: { marginTop: '1rem' }, children: module.endpoints.map((ep, idx) => (_jsx(EndpointCard, { endpoint: ep, moduleFilename: filename }, idx))) })] })] }));
30
+ };
31
+ const EndpointCard = ({ endpoint, moduleFilename }) => {
32
+ const methodColor = {
33
+ GET: '#61affe',
34
+ POST: '#49cc90',
35
+ PUT: '#fca130',
36
+ DELETE: '#f93e3e',
37
+ PATCH: '#50e3c2',
38
+ };
39
+ return (_jsxs("div", { style: {
40
+ background: '#fff',
41
+ borderRadius: '8px',
42
+ padding: '1.5rem',
43
+ marginBottom: '1rem',
44
+ boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
45
+ borderLeft: `4px solid ${methodColor[endpoint.method] || '#999'}`,
46
+ }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', marginBottom: '0.75rem' }, children: [_jsx("span", { style: {
47
+ background: methodColor[endpoint.method] || '#999',
48
+ color: '#fff',
49
+ fontWeight: 'bold',
50
+ fontSize: '0.85rem',
51
+ padding: '2px 8px',
52
+ borderRadius: '4px',
53
+ marginRight: '0.75rem',
54
+ }, children: endpoint.method }), _jsx("code", { style: { fontSize: '1rem', fontWeight: '600' }, children: endpoint.path }), _jsx("span", { style: { marginLeft: 'auto' }, children: _jsx(Link, { to: `/modules/${moduleFilename}/endpoints/${encodeURIComponent(endpoint.path)}?method=${endpoint.method}`, style: { color: '#4a6bff', textDecoration: 'none', fontSize: '0.9rem' }, children: "View details \u2192" }) })] }), _jsx("p", { style: { marginBottom: '0.5rem' }, children: endpoint.summary }), endpoint.description && (_jsx("p", { style: { color: '#666', fontSize: '0.95rem' }, children: endpoint.description })), endpoint.tags && endpoint.tags.length > 0 && (_jsx("div", { style: { marginTop: '0.75rem' }, children: endpoint.tags.map(tag => (_jsx("span", { style: {
55
+ background: '#f0f0f0',
56
+ color: '#555',
57
+ fontSize: '0.8rem',
58
+ padding: '2px 8px',
59
+ borderRadius: '12px',
60
+ marginRight: '0.5rem',
61
+ }, children: tag }, tag))) }))] }));
62
+ };
63
+ export default ModuleDetailPage;
64
+ //# sourceMappingURL=ModuleDetailPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleDetailPage.js","sourceRoot":"","sources":["../../../../src/view/frontend/components/ModuleDetailPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ declare const ModulesPage: React.FC;
3
+ export default ModulesPage;
4
+ //# sourceMappingURL=ModulesPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModulesPage.d.ts","sourceRoot":"","sources":["../../../../src/view/frontend/components/ModulesPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EA2DxB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { Link } from 'react-router-dom';
4
+ import { fetchModules } from '../utils/api.ts';
5
+ const ModulesPage = () => {
6
+ const [modules, setModules] = useState([]);
7
+ const [loading, setLoading] = useState(true);
8
+ const [error, setError] = useState(null);
9
+ useEffect(() => {
10
+ fetchModules()
11
+ .then((data) => {
12
+ setModules(data);
13
+ setLoading(false);
14
+ })
15
+ .catch((err) => {
16
+ setError(err.message);
17
+ setLoading(false);
18
+ });
19
+ }, []);
20
+ if (loading)
21
+ return _jsx("div", { children: "Loading modules..." });
22
+ if (error)
23
+ return _jsxs("div", { style: { color: '#d32f2f' }, children: ["Error: ", error] });
24
+ return (_jsxs("div", { children: [_jsx("h1", { children: "API Modules" }), _jsx("p", { children: "Select a module to explore its endpoints." }), _jsx("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))', gap: '1.5rem', marginTop: '2rem' }, children: modules.map(mod => (_jsxs("div", { style: {
25
+ background: '#fff',
26
+ borderRadius: '8px',
27
+ padding: '1.5rem',
28
+ boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
29
+ borderLeft: '4px solid #4a6bff',
30
+ }, children: [_jsx("h3", { style: { marginTop: 0 }, children: _jsx(Link, { to: `/modules/${mod.filename}`, style: { color: '#1a1a2e', textDecoration: 'none' }, children: mod.title }) }), _jsx("p", { style: { color: '#666', fontSize: '0.95rem' }, children: mod.description }), _jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginTop: '1rem' }, children: [_jsxs("span", { style: { fontSize: '0.9rem', color: '#888' }, children: [_jsx("i", { className: "fas fa-code-branch" }), " ", mod.endpointCount, " endpoint(s)"] }), _jsx(Link, { to: `/modules/${mod.filename}`, style: {
31
+ background: '#4a6bff',
32
+ color: '#fff',
33
+ padding: '0.5rem 1rem',
34
+ borderRadius: '4px',
35
+ textDecoration: 'none',
36
+ fontSize: '0.9rem',
37
+ }, children: "Explore" })] })] }, mod.filename))) })] }));
38
+ };
39
+ export default ModulesPage;
40
+ //# sourceMappingURL=ModulesPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModulesPage.js","sourceRoot":"","sources":["../../../../src/view/frontend/components/ModulesPage.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,MAAM,WAAW,GAAa,GAAG,EAAE;IACjC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAkB,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,EAAE;aACX,IAAI,CAAC,CAAC,IAAqB,EAAE,EAAE;YAC9B,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;YACpB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,OAAO;QAAE,OAAO,+CAA6B,CAAC;IAClD,IAAI,KAAK;QAAE,OAAO,eAAK,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,wBAAU,KAAK,IAAO,CAAC;IAEzE,OAAO,CACL,0BACE,uCAAoB,EACpB,oEAAgD,EAChD,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,uCAAuC,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,YAC5H,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAClB,eAAwB,KAAK,EAAE;wBAC7B,UAAU,EAAE,MAAM;wBAClB,YAAY,EAAE,KAAK;wBACnB,OAAO,EAAE,QAAQ;wBACjB,SAAS,EAAE,2BAA2B;wBACtC,UAAU,EAAE,mBAAmB;qBAChC,aACC,aAAI,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,YACzB,KAAC,IAAI,IAAC,EAAE,EAAE,YAAY,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,YACtF,GAAG,CAAC,KAAK,GACL,GACJ,EACL,YAAG,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAG,GAAG,CAAC,WAAW,GAAK,EACvE,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,aACvG,gBAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,aAChD,YAAG,SAAS,EAAC,oBAAoB,GAAK,OAAE,GAAG,CAAC,aAAa,oBACpD,EACP,KAAC,IAAI,IAAC,EAAE,EAAE,YAAY,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE;wCAC3C,UAAU,EAAE,SAAS;wCACrB,KAAK,EAAE,MAAM;wCACb,OAAO,EAAE,aAAa;wCACtB,YAAY,EAAE,KAAK;wCACnB,cAAc,EAAE,MAAM;wCACtB,QAAQ,EAAE,QAAQ;qCACnB,wBAEM,IACH,KA3BE,GAAG,CAAC,QAAQ,CA4BhB,CACP,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/view/frontend/index.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { createRoot } from 'react-dom/client';
4
+ import { BrowserRouter, Routes, Route } from 'react-router-dom';
5
+ import App from './components/App.tsx';
6
+ import HomePage from './components/HomePage.tsx';
7
+ import ModulesPage from './components/ModulesPage.tsx';
8
+ import ModuleDetailPage from './components/ModuleDetailPage.tsx';
9
+ import EndpointDetailPage from './components/EndpointDetailPage.tsx';
10
+ const container = document.getElementById('root');
11
+ if (!container)
12
+ throw new Error('Root element not found');
13
+ const root = createRoot(container);
14
+ root.render(_jsx(React.StrictMode, { children: _jsx(BrowserRouter, { children: _jsxs(Routes, { children: [_jsxs(Route, { path: "/", element: _jsx(App, {}), children: [_jsx(Route, { index: true, element: _jsx(HomePage, {}) }), _jsx(Route, { path: "modules", element: _jsx(ModulesPage, {}) }), _jsx(Route, { path: "modules/:filename", element: _jsx(ModuleDetailPage, {}) }), _jsx(Route, { path: "modules/:filename/endpoints/:endpointPath", element: _jsx(EndpointDetailPage, {}) }), _jsx(Route, { path: "search", element: _jsx("div", { children: "Search (coming soon)" }) })] }), _jsx(Route, { path: "*", element: _jsx("div", { children: "Not Found" }) })] }) }) }));
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/view/frontend/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAY,MAAM,kBAAkB,CAAC;AAC1E,OAAO,GAAG,MAAM,sBAAsB,CAAC;AACvC,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,WAAW,MAAM,8BAA8B,CAAC;AACvD,OAAO,gBAAgB,MAAM,mCAAmC,CAAC;AACjE,OAAO,kBAAkB,MAAM,qCAAqC,CAAC;AAErE,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAClD,IAAI,CAAC,SAAS;IAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAE1D,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AACnC,IAAI,CAAC,MAAM,CACT,KAAC,KAAK,CAAC,UAAU,cACf,KAAC,aAAa,cACZ,MAAC,MAAM,eACL,MAAC,KAAK,IAAC,IAAI,EAAC,GAAG,EAAC,OAAO,EAAE,KAAC,GAAG,KAAG,aAC9B,KAAC,KAAK,IAAC,KAAK,QAAC,OAAO,EAAE,KAAC,QAAQ,KAAG,GAAI,EACtC,KAAC,KAAK,IAAC,IAAI,EAAC,SAAS,EAAC,OAAO,EAAE,KAAC,WAAW,KAAG,GAAI,EAClD,KAAC,KAAK,IAAC,IAAI,EAAC,mBAAmB,EAAC,OAAO,EAAE,KAAC,gBAAgB,KAAG,GAAI,EACjE,KAAC,KAAK,IAAC,IAAI,EAAC,2CAA2C,EAAC,OAAO,EAAE,KAAC,kBAAkB,KAAG,GAAI,EAC3F,KAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,iDAA+B,GAAI,IAC3D,EACR,KAAC,KAAK,IAAC,IAAI,EAAC,GAAG,EAAC,OAAO,EAAE,sCAAoB,GAAI,IAC1C,GACK,GACC,CACpB,CAAC"}
@@ -0,0 +1,35 @@
1
+ export interface ModuleSummary {
2
+ filename: string;
3
+ title: string;
4
+ description: string;
5
+ endpointCount: number;
6
+ endpoints: EndpointSummary[];
7
+ }
8
+ export interface EndpointSummary {
9
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
10
+ path: string;
11
+ summary: string;
12
+ }
13
+ export interface ModuleDetail {
14
+ title: string;
15
+ description: string;
16
+ version?: string;
17
+ endpoints: EndpointDefinition[];
18
+ }
19
+ export interface EndpointDefinition {
20
+ path: string;
21
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
22
+ summary: string;
23
+ description?: string;
24
+ tags?: string[];
25
+ request?: {
26
+ headers?: Record<string, unknown>;
27
+ params?: Record<string, unknown>;
28
+ query?: Record<string, unknown>;
29
+ body?: Record<string, unknown>;
30
+ };
31
+ response: {
32
+ [statusCode: string]: Record<string, unknown>;
33
+ };
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/view/frontend/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,CAAC;IACF,QAAQ,EAAE;QACR,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/C,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/view/frontend/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { ModuleSummary, ModuleDetail } from '../types.ts';
2
+ export declare function fetchModules(): Promise<ModuleSummary[]>;
3
+ export declare function fetchModuleDetail(filename: string): Promise<ModuleDetail>;
4
+ export declare function fetchSchema(filename: string): Promise<any>;
5
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/view/frontend/utils/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI/D,wBAAsB,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAY7D;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAI/E;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAIhE"}
@@ -0,0 +1,28 @@
1
+ const API_BASE = '/api';
2
+ export async function fetchModules() {
3
+ const res = await fetch(`${API_BASE}/docs`);
4
+ if (!res.ok)
5
+ throw new Error(`Failed to fetch modules: ${res.statusText}`);
6
+ const data = await res.json();
7
+ // Transform API response to ModuleSummary[]
8
+ return data.modules.map((mod) => ({
9
+ filename: mod.filename,
10
+ title: mod.title,
11
+ description: mod.description,
12
+ endpointCount: mod.endpoints.length,
13
+ endpoints: mod.endpoints,
14
+ }));
15
+ }
16
+ export async function fetchModuleDetail(filename) {
17
+ const res = await fetch(`${API_BASE}/docs/${filename}`);
18
+ if (!res.ok)
19
+ throw new Error(`Failed to fetch module ${filename}: ${res.statusText}`);
20
+ return await res.json();
21
+ }
22
+ export async function fetchSchema(filename) {
23
+ const res = await fetch(`${API_BASE}/schemas/${filename}`);
24
+ if (!res.ok)
25
+ throw new Error(`Failed to fetch schema ${filename}: ${res.statusText}`);
26
+ return await res.json();
27
+ }
28
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/view/frontend/utils/api.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;QACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM;QACnC,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,SAAS,QAAQ,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACtF,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,YAAY,QAAQ,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACtF,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC"}