@vegamo/loom 0.1.5 → 0.1.7

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 (56) hide show
  1. package/README.md +21 -3
  2. package/dist/agents/core/agent.d.ts.map +1 -1
  3. package/dist/agents/core/agent.js +3 -1
  4. package/dist/agents/core/agent.js.map +1 -1
  5. package/dist/agents/core/prompt.d.ts +2 -1
  6. package/dist/agents/core/prompt.d.ts.map +1 -1
  7. package/dist/agents/core/prompt.js +3 -2
  8. package/dist/agents/core/prompt.js.map +1 -1
  9. package/dist/index.js +5 -5
  10. package/dist/index.js.map +1 -1
  11. package/dist/llm/client.js +1 -1
  12. package/dist/llm/client.js.map +1 -1
  13. package/dist/mocks/router.d.ts.map +1 -1
  14. package/dist/mocks/router.js +16 -2
  15. package/dist/mocks/router.js.map +1 -1
  16. package/dist/serve.d.ts.map +1 -1
  17. package/dist/serve.js +2 -0
  18. package/dist/serve.js.map +1 -1
  19. package/dist/shared/config-wizard.d.ts +1 -1
  20. package/dist/shared/config-wizard.d.ts.map +1 -1
  21. package/dist/shared/config-wizard.js +11 -12
  22. package/dist/shared/config-wizard.js.map +1 -1
  23. package/dist/shared/config.d.ts +15 -10
  24. package/dist/shared/config.d.ts.map +1 -1
  25. package/dist/shared/config.js +29 -15
  26. package/dist/shared/config.js.map +1 -1
  27. package/dist/shared/mock-store.d.ts +59 -0
  28. package/dist/shared/mock-store.d.ts.map +1 -0
  29. package/dist/shared/mock-store.js +146 -0
  30. package/dist/shared/mock-store.js.map +1 -0
  31. package/dist/shared/mock-template.d.ts +11 -0
  32. package/dist/shared/mock-template.d.ts.map +1 -0
  33. package/dist/shared/mock-template.js +21 -0
  34. package/dist/shared/mock-template.js.map +1 -0
  35. package/dist/shared/requirement.d.ts +27 -0
  36. package/dist/shared/requirement.d.ts.map +1 -0
  37. package/dist/shared/requirement.js +70 -0
  38. package/dist/shared/requirement.js.map +1 -0
  39. package/dist/shared/schema-utils.d.ts.map +1 -1
  40. package/dist/shared/schema-utils.js +3 -1
  41. package/dist/shared/schema-utils.js.map +1 -1
  42. package/dist/shared/types.d.ts +1 -1
  43. package/dist/shared/types.d.ts.map +1 -1
  44. package/dist/tui/app.d.ts.map +1 -1
  45. package/dist/tui/app.js +18 -0
  46. package/dist/tui/app.js.map +1 -1
  47. package/dist/tui/components/Input.d.ts.map +1 -1
  48. package/dist/tui/components/Input.js +1 -0
  49. package/dist/tui/components/Input.js.map +1 -1
  50. package/dist/view/public/bundle.js +705 -327
  51. package/dist/view/public/bundle.js.map +4 -4
  52. package/dist/view/routes/mocks.d.ts +19 -0
  53. package/dist/view/routes/mocks.d.ts.map +1 -0
  54. package/dist/view/routes/mocks.js +165 -0
  55. package/dist/view/routes/mocks.js.map +1 -0
  56. package/package.json +3 -1
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Mocks API 路由
3
+ *
4
+ * GET /api/mocks/:filename/:method/*?status=200
5
+ * 返回当前 mock 数据。如果存档里没有, 用 generator 生成默认值,
6
+ * 并在响应里标记 isDefault: true。
7
+ *
8
+ * PUT /api/mocks/:filename/:method/*?status=200
9
+ * 保存 mock 数据 (写到 docs/<filename>.mock.json)。
10
+ * body: { data: <任意 JSON> }
11
+ *
12
+ * DELETE /api/mocks/:filename/:method/*?status=200
13
+ * 删除存档, 让 endpoint 回退到 generator 默认。
14
+ */
15
+ import type { FastifyInstance } from 'fastify';
16
+ export declare function mockRoutes(fastify: FastifyInstance, opts: {
17
+ docsDir: string;
18
+ }): Promise<void>;
19
+ //# sourceMappingURL=mocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../../src/view/routes/mocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAwG/C,wBAAsB,UAAU,CAC9B,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CA8Gf"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Mocks API 路由
3
+ *
4
+ * GET /api/mocks/:filename/:method/*?status=200
5
+ * 返回当前 mock 数据。如果存档里没有, 用 generator 生成默认值,
6
+ * 并在响应里标记 isDefault: true。
7
+ *
8
+ * PUT /api/mocks/:filename/:method/*?status=200
9
+ * 保存 mock 数据 (写到 docs/<filename>.mock.json)。
10
+ * body: { data: <任意 JSON> }
11
+ *
12
+ * DELETE /api/mocks/:filename/:method/*?status=200
13
+ * 删除存档, 让 endpoint 回退到 generator 默认。
14
+ */
15
+ import path from 'node:path';
16
+ import { readSchemaFile } from '../../shared/schema-utils.js';
17
+ import { generateMockData } from '../../mocks/generator.js';
18
+ import { expandMockTemplate } from '../../shared/mock-template.js';
19
+ import { getMockOverride, setMockOverride, deleteMockOverride, getActiveMockOverride, } from '../../shared/mock-store.js';
20
+ function asObject(v) {
21
+ if (v && typeof v === 'object' && !Array.isArray(v))
22
+ return v;
23
+ return undefined;
24
+ }
25
+ /**
26
+ * 用 endpoint 的 request schema 构造一条示例 curl:
27
+ * - request.params → 替换路径里的 :name 占位
28
+ * - request.query → 拼成 ?k=v&...
29
+ * - request.headers→ 多条 -H
30
+ * - request.body → -d '<json>' (并加 Content-Type: application/json)
31
+ */
32
+ function buildCurlExample(origin, method, endpointPath, endpoint) {
33
+ const req = endpoint.request || {};
34
+ // 1. path params
35
+ let pathFilled = endpointPath;
36
+ const paramsObj = asObject(generateMockData(req.params || {}));
37
+ if (paramsObj) {
38
+ for (const [k, v] of Object.entries(paramsObj)) {
39
+ pathFilled = pathFilled.replace(new RegExp(':' + k + '(?![A-Za-z0-9_])', 'g'), encodeURIComponent(String(v)));
40
+ }
41
+ }
42
+ // 2. query string
43
+ const queryObj = asObject(generateMockData(req.query || {}));
44
+ let qs = '';
45
+ if (queryObj && Object.keys(queryObj).length > 0) {
46
+ qs =
47
+ '?' +
48
+ Object.entries(queryObj)
49
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)
50
+ .join('&');
51
+ }
52
+ const url = `${origin}/mock${pathFilled}${qs}`;
53
+ const lines = [`curl -i -X ${method.toUpperCase()} '${url}'`];
54
+ // 3. headers
55
+ const headersObj = asObject(generateMockData(req.headers || {}));
56
+ const hasHeaders = headersObj && Object.keys(headersObj).length > 0;
57
+ if (hasHeaders) {
58
+ for (const [k, v] of Object.entries(headersObj)) {
59
+ lines.push(`-H '${k}: ${String(v)}'`);
60
+ }
61
+ }
62
+ // 4. body (POST/PUT/PATCH)
63
+ const upper = method.toUpperCase();
64
+ const allowsBody = upper !== 'GET' && upper !== 'HEAD' && upper !== 'DELETE';
65
+ if (allowsBody && req.body) {
66
+ const sample = generateMockData(req.body);
67
+ const ctAlready = hasHeaders &&
68
+ Object.keys(headersObj).some((k) => k.toLowerCase() === 'content-type');
69
+ if (!ctAlready)
70
+ lines.push(`-H 'Content-Type: application/json'`);
71
+ // 单引号包裹 + 转义内嵌单引号
72
+ const bodyStr = JSON.stringify(sample).replace(/'/g, `'\\''`);
73
+ lines.push(`-d '${bodyStr}'`);
74
+ }
75
+ return lines.join(' \\\n ');
76
+ }
77
+ function findEndpoint(docsDir, filename, method, endpointPath) {
78
+ const filepath = path.join(docsDir, filename);
79
+ const doc = readSchemaFile(filepath);
80
+ return doc.endpoints.find((e) => e.method.toUpperCase() === method.toUpperCase() && e.path === endpointPath);
81
+ }
82
+ export async function mockRoutes(fastify, opts) {
83
+ const { docsDir } = opts;
84
+ fastify.get('/api/mocks/:filename/:method/*', async (request, reply) => {
85
+ const { filename, method } = request.params;
86
+ const endpointPath = decodeURIComponent('/' + (request.params['*'] || ''));
87
+ const requestedStatus = request.query.status;
88
+ let endpoint;
89
+ try {
90
+ endpoint = findEndpoint(docsDir, filename, method, endpointPath);
91
+ }
92
+ catch {
93
+ return reply.status(404).send({ error: `Schema "${filename}" not found` });
94
+ }
95
+ if (!endpoint) {
96
+ return reply.status(404).send({ error: 'Endpoint not found in schema' });
97
+ }
98
+ // 列出该 endpoint 所有声明过的 status, 标记是否有 saved override
99
+ const availableStatuses = {};
100
+ for (const code of Object.keys(endpoint.response)) {
101
+ const has = getMockOverride(docsDir, filename, method, endpointPath, code);
102
+ availableStatuses[code] = has !== undefined ? 'override' : 'default';
103
+ }
104
+ // 选择实际返回的 status:
105
+ // 1. URL 显式指定且 schema 里存在 → 用它
106
+ // 2. 否则用当前 active override 的 status (一个 endpoint 唯一)
107
+ // 3. 否则第一个 2xx, 再否则任意第一个
108
+ const codes = Object.keys(endpoint.response);
109
+ const active = getActiveMockOverride(docsDir, filename, method, endpointPath);
110
+ const first2xx = codes.find((c) => c.startsWith('2'));
111
+ const successStatus = (requestedStatus && requestedStatus in endpoint.response && requestedStatus) ||
112
+ (active && active.statusCode in endpoint.response ? active.statusCode : undefined) ||
113
+ first2xx ||
114
+ codes[0] ||
115
+ '200';
116
+ const override = getMockOverride(docsDir, filename, method, endpointPath, successStatus);
117
+ // 用请求自身的 host:port 拼 curl, 同源 /mock 在 loom serve 下可用
118
+ const proto = request.headers['x-forwarded-proto'] || 'http';
119
+ const host = request.headers.host || 'localhost';
120
+ const origin = `${proto}://${host}`;
121
+ const curl = buildCurlExample(origin, method, endpointPath, endpoint);
122
+ if (override !== undefined) {
123
+ return {
124
+ status: successStatus,
125
+ isDefault: false,
126
+ data: expandMockTemplate(override),
127
+ template: override,
128
+ availableStatuses,
129
+ curl,
130
+ };
131
+ }
132
+ const responseSchema = endpoint.response[successStatus];
133
+ const data = responseSchema ? generateMockData(responseSchema) : { message: 'ok' };
134
+ return { status: successStatus, isDefault: true, data, template: data, availableStatuses, curl };
135
+ });
136
+ fastify.put('/api/mocks/:filename/:method/*', async (request, reply) => {
137
+ const { filename, method } = request.params;
138
+ const endpointPath = decodeURIComponent('/' + (request.params['*'] || ''));
139
+ const status = request.query.status || '200';
140
+ const body = request.body;
141
+ if (!body || !('data' in body)) {
142
+ return reply.status(400).send({ error: 'Body must be { data: <value> }' });
143
+ }
144
+ let endpoint;
145
+ try {
146
+ endpoint = findEndpoint(docsDir, filename, method, endpointPath);
147
+ }
148
+ catch {
149
+ return reply.status(404).send({ error: `Schema "${filename}" not found` });
150
+ }
151
+ if (!endpoint) {
152
+ return reply.status(404).send({ error: 'Endpoint not found in schema' });
153
+ }
154
+ setMockOverride(docsDir, filename, method, endpointPath, status, body.data);
155
+ return { ok: true, status, data: body.data };
156
+ });
157
+ fastify.delete('/api/mocks/:filename/:method/*', async (request) => {
158
+ const { filename, method } = request.params;
159
+ const endpointPath = decodeURIComponent('/' + (request.params['*'] || ''));
160
+ const status = request.query.status || '200';
161
+ deleteMockOverride(docsDir, filename, method, endpointPath, status);
162
+ return { ok: true };
163
+ });
164
+ }
165
+ //# sourceMappingURL=mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../../src/view/routes/mocks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vegamo/loom",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "AI-powered JSON Schema document generator with TUI, web viewer and mock server",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -53,6 +53,7 @@
53
53
  "dependencies": {
54
54
  "@fastify/cors": "^11.2.0",
55
55
  "@fastify/static": "^9.0.0",
56
+ "@types/mockjs": "^1.0.10",
56
57
  "ajv": "^8.18.0",
57
58
  "chalk": "^5.6.2",
58
59
  "commander": "^14.0.3",
@@ -62,6 +63,7 @@
62
63
  "ink-spinner": "^5.0.0",
63
64
  "ink-text-input": "^6.0.0",
64
65
  "mock-json-schema": "^1.1.2",
66
+ "mockjs": "^1.1.0",
65
67
  "openai": "^6.32.0"
66
68
  },
67
69
  "devDependencies": {