@vegamo/loom 0.1.3 → 0.1.6

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 (44) hide show
  1. package/README.md +18 -1
  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/mocks/router.d.ts.map +1 -1
  10. package/dist/mocks/router.js +16 -2
  11. package/dist/mocks/router.js.map +1 -1
  12. package/dist/serve.d.ts.map +1 -1
  13. package/dist/serve.js +2 -0
  14. package/dist/serve.js.map +1 -1
  15. package/dist/shared/mock-store.d.ts +59 -0
  16. package/dist/shared/mock-store.d.ts.map +1 -0
  17. package/dist/shared/mock-store.js +146 -0
  18. package/dist/shared/mock-store.js.map +1 -0
  19. package/dist/shared/mock-template.d.ts +11 -0
  20. package/dist/shared/mock-template.d.ts.map +1 -0
  21. package/dist/shared/mock-template.js +21 -0
  22. package/dist/shared/mock-template.js.map +1 -0
  23. package/dist/shared/requirement.d.ts +27 -0
  24. package/dist/shared/requirement.d.ts.map +1 -0
  25. package/dist/shared/requirement.js +70 -0
  26. package/dist/shared/requirement.js.map +1 -0
  27. package/dist/shared/schema-utils.d.ts.map +1 -1
  28. package/dist/shared/schema-utils.js +3 -1
  29. package/dist/shared/schema-utils.js.map +1 -1
  30. package/dist/tui/app.d.ts.map +1 -1
  31. package/dist/tui/app.js +18 -0
  32. package/dist/tui/app.js.map +1 -1
  33. package/dist/tui/components/Input.d.ts.map +1 -1
  34. package/dist/tui/components/Input.js +1 -0
  35. package/dist/tui/components/Input.js.map +1 -1
  36. package/dist/view/public/bundle.js +4267 -82915
  37. package/dist/view/public/bundle.js.map +4 -4
  38. package/dist/view/routes/mocks.d.ts +19 -0
  39. package/dist/view/routes/mocks.d.ts.map +1 -0
  40. package/dist/view/routes/mocks.js +165 -0
  41. package/dist/view/routes/mocks.js.map +1 -0
  42. package/dist/view/server.d.ts.map +1 -1
  43. package/dist/view/server.js.map +1 -1
  44. package/package.json +3 -5
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/view/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAY/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8C3F"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/view/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAY/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+C3F"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/view/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAgB/D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA0B;IAC9D,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpE,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAEvC,OAAO;IACP,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,cAAc;IACd,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;QACpC,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;IAEH,SAAS;IACT,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAE9C,qDAAqD;IACrD,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACrD,MAAM,SAAS,GAAG,WAAW,KAAK,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;QAElF,IAAI,mBAAmB,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,GAAG;QACH,IAAI;QACJ,IAAI;QACJ,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/view/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAgB/D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA0B;IAC9D,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpE,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAEvC,OAAO;IACP,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,cAAc;IACd,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;QACpC,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;IAEH,SAAS;IACT,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAE9C,qDAAqD;IACrD,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACrD,MAAM,SAAS,GAAG,WAAW,KAAK,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;QAElF,IAAI,mBAAmB,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAGH,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,GAAG;QACH,IAAI;QACJ,IAAI;QACJ,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vegamo/loom",
3
- "version": "0.1.3",
3
+ "version": "0.1.6",
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,13 +63,10 @@
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": {
68
- "@stoplight/json-schema-viewer": "^2.0.0",
69
- "@stoplight/markdown-viewer": "^3.8.1",
70
- "@stoplight/tree-list": "^4.12.1",
71
- "@stoplight/ui-kit": "^2.17.2",
72
70
  "@types/node": "^25.5.0",
73
71
  "@types/react": "^19.2.14",
74
72
  "@types/react-dom": "^19.2.3",