@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.
- package/README.md +18 -1
- package/dist/agents/core/agent.d.ts.map +1 -1
- package/dist/agents/core/agent.js +3 -1
- package/dist/agents/core/agent.js.map +1 -1
- package/dist/agents/core/prompt.d.ts +2 -1
- package/dist/agents/core/prompt.d.ts.map +1 -1
- package/dist/agents/core/prompt.js +3 -2
- package/dist/agents/core/prompt.js.map +1 -1
- package/dist/mocks/router.d.ts.map +1 -1
- package/dist/mocks/router.js +16 -2
- package/dist/mocks/router.js.map +1 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +2 -0
- package/dist/serve.js.map +1 -1
- package/dist/shared/mock-store.d.ts +59 -0
- package/dist/shared/mock-store.d.ts.map +1 -0
- package/dist/shared/mock-store.js +146 -0
- package/dist/shared/mock-store.js.map +1 -0
- package/dist/shared/mock-template.d.ts +11 -0
- package/dist/shared/mock-template.d.ts.map +1 -0
- package/dist/shared/mock-template.js +21 -0
- package/dist/shared/mock-template.js.map +1 -0
- package/dist/shared/requirement.d.ts +27 -0
- package/dist/shared/requirement.d.ts.map +1 -0
- package/dist/shared/requirement.js +70 -0
- package/dist/shared/requirement.js.map +1 -0
- package/dist/shared/schema-utils.d.ts.map +1 -1
- package/dist/shared/schema-utils.js +3 -1
- package/dist/shared/schema-utils.js.map +1 -1
- package/dist/tui/app.d.ts.map +1 -1
- package/dist/tui/app.js +18 -0
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/components/Input.d.ts.map +1 -1
- package/dist/tui/components/Input.js +1 -0
- package/dist/tui/components/Input.js.map +1 -1
- package/dist/view/public/bundle.js +4267 -82915
- package/dist/view/public/bundle.js.map +4 -4
- package/dist/view/routes/mocks.d.ts +19 -0
- package/dist/view/routes/mocks.d.ts.map +1 -0
- package/dist/view/routes/mocks.js +165 -0
- package/dist/view/routes/mocks.js.map +1 -0
- package/dist/view/server.d.ts.map +1 -1
- package/dist/view/server.js.map +1 -1
- package/package.json +3 -5
package/README.md
CHANGED
|
@@ -165,7 +165,7 @@ Options:
|
|
|
165
165
|
- ๐ Module browsing with endpoint counts
|
|
166
166
|
- ๐งฉ Entity browsing from `docs/entities`
|
|
167
167
|
- ๐ Real-time search across modules and endpoints
|
|
168
|
-
- ๐
|
|
168
|
+
- ๐ Swagger-like schema table viewer for all request/response sections (query params, path params, headers, body)
|
|
169
169
|
- ๐ `x-entity-ref` auto-resolve in endpoint request/response rendering
|
|
170
170
|
- ๐จ Clean, responsive UI with dark sidebar
|
|
171
171
|
- ๐ Direct links to specific endpoints
|
|
@@ -424,6 +424,23 @@ Package configuration:
|
|
|
424
424
|
- `.npmignore` excludes source files and development artifacts
|
|
425
425
|
- All runtime dependencies are correctly specified
|
|
426
426
|
|
|
427
|
+
## ๐ Changelog
|
|
428
|
+
|
|
429
|
+
### v0.1.6
|
|
430
|
+
- **Added**: Mock view / Mock edit pages for each endpoint, accessible from the module list
|
|
431
|
+
- **Added**: Sidecar `<name>.mock.json` storage for hand-written mock responses (one active override per endpoint)
|
|
432
|
+
- **Added**: Mock server now responds with the override's HTTP status code (e.g. saving a 400 mock makes `/mock/<path>` return real HTTP 400)
|
|
433
|
+
- **Added**: Status code switcher in Mock view/edit, marking which statuses already have a saved override
|
|
434
|
+
- **Added**: cURL example block on Mock view, generated from the endpoint's `request` schema (path params, query, headers, body all filled with samples)
|
|
435
|
+
- **Added**: Mock.js expression support inside saved mock bodies (`@cname`, `@integer(1,100)`, `'list|1-5': [...]` etc.) โ templates are stored as-is and expanded on each request
|
|
436
|
+
- **Removed**: Inline "Mock Testing" section from the endpoint detail page (superseded by the dedicated Mock pages)
|
|
437
|
+
|
|
438
|
+
### v0.1.4
|
|
439
|
+
- **Fixed**: Query parameters, path parameters, and headers for GET endpoints now display correctly in the Web Viewer
|
|
440
|
+
- **Improved**: All request/response sections use a consistent Swagger-like table view (SchemaTableViewer) with type badges, constraints, and expand/collapse support
|
|
441
|
+
- **Fixed**: Duplicate `setNotFoundHandler` error when starting the Web Viewer (`loom view`) or combined server (`loom serve`)
|
|
442
|
+
- **Removed**: Broken `@stoplight/json-schema-viewer` dependency (incompatible with React 19)
|
|
443
|
+
|
|
427
444
|
## ๐ค Contributing
|
|
428
445
|
|
|
429
446
|
Contributions are welcome! Please follow these steps:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agents/core/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agents/core/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAmBH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAc,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKtG,qBAAa,KAAK;IAChB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,eAAe,CAAgC;IAEvD,WAAW;IACJ,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAEpC,kBAAkB;IACX,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;gBAEvF,MAAM,EAAE,WAAW;IAmC/B;;;;OAIG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAoJpD;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;YACW,OAAO;IAQrB;;;;OAIG;YACW,gBAAgB;IAsB9B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,IAAI;CAGb"}
|
|
@@ -23,6 +23,7 @@ import { Memory } from '../memory/memory.js';
|
|
|
23
23
|
import { buildSystemPrompt } from './prompt.js';
|
|
24
24
|
import { listSchemaFiles } from '../../shared/schema-utils.js';
|
|
25
25
|
import { listEntityFiles } from '../../shared/entity-utils.js';
|
|
26
|
+
import { loadRequirement } from '../../shared/requirement.js';
|
|
26
27
|
import { getOutDir } from '../../shared/config.js';
|
|
27
28
|
import { logger } from '../../shared/logger.js';
|
|
28
29
|
import { schemaGenTool } from '../../tools/schema-gen.js';
|
|
@@ -261,7 +262,8 @@ export class Agent {
|
|
|
261
262
|
initSystemPrompt() {
|
|
262
263
|
const existing = listSchemaFiles(this.toolContext.outDir);
|
|
263
264
|
const existingEntities = listEntityFiles(this.toolContext.outDir);
|
|
264
|
-
const
|
|
265
|
+
const requirementContent = loadRequirement(this.config.projectDir);
|
|
266
|
+
const prompt = buildSystemPrompt(existing.map((f) => f.filename), existingEntities.map((f) => f.filename), requirementContent);
|
|
265
267
|
this.memory.add({ role: 'system', content: prompt });
|
|
266
268
|
}
|
|
267
269
|
setState(state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/agents/core/agent.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/agents/core/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @param existingSchemas ๅฝๅๅทฒๆ็ schema ๆไปถๅ่กจ (ๆไพไธไธๆ)
|
|
8
8
|
* @param existingEntities ๅฝๅๅทฒๆ็ๅฎไฝๆไปถๅ่กจ
|
|
9
|
+
* @param requirementContent requirement.md ็ๅ
ๅฎน (ๅฆๆๅญๅจ)
|
|
9
10
|
*/
|
|
10
|
-
export declare function buildSystemPrompt(existingSchemas?: string[], existingEntities?: string[]): string;
|
|
11
|
+
export declare function buildSystemPrompt(existingSchemas?: string[], existingEntities?: string[], requirementContent?: string | null): string;
|
|
11
12
|
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/agents/core/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/agents/core/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,eAAe,GAAE,MAAM,EAAO,EAC9B,gBAAgB,GAAE,MAAM,EAAO,EAC/B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,GACjC,MAAM,CA6GR"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @param existingSchemas ๅฝๅๅทฒๆ็ schema ๆไปถๅ่กจ (ๆไพไธไธๆ)
|
|
8
8
|
* @param existingEntities ๅฝๅๅทฒๆ็ๅฎไฝๆไปถๅ่กจ
|
|
9
|
+
* @param requirementContent requirement.md ็ๅ
ๅฎน (ๅฆๆๅญๅจ)
|
|
9
10
|
*/
|
|
10
|
-
export function buildSystemPrompt(existingSchemas = [], existingEntities = []) {
|
|
11
|
+
export function buildSystemPrompt(existingSchemas = [], existingEntities = [], requirementContent) {
|
|
11
12
|
const schemaList = existingSchemas.length > 0
|
|
12
13
|
? `\nExisting schema files in docs directory:\n${existingSchemas.map((s) => `- ${s}`).join('\n')}`
|
|
13
14
|
: '\nNo existing schema files yet.';
|
|
@@ -112,6 +113,6 @@ Each schema file groups related API endpoints (e.g., all user-related APIs in on
|
|
|
112
113
|
|
|
113
114
|
## Current State
|
|
114
115
|
${schemaList}
|
|
115
|
-
${entityList}`;
|
|
116
|
+
${entityList}${requirementContent ? `\n\n## Project Requirements (from requirement.md)\n\nThe user has provided the following requirements document. Use it as context when designing APIs:\n\n${requirementContent}` : ''}`;
|
|
116
117
|
}
|
|
117
118
|
//# sourceMappingURL=prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/agents/core/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/agents/core/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,kBAA4B,EAAE,EAC9B,mBAA6B,EAAE,EAC/B,kBAAkC;IAElC,MAAM,UAAU,GACd,eAAe,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,+CAA+C,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClG,CAAC,CAAC,iCAAiC,CAAC;IACxC,MAAM,UAAU,GACd,gBAAgB,CAAC,MAAM,GAAG,CAAC;QACzB,CAAC,CAAC,8CAA8C,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClG,CAAC,CAAC,iCAAiC,CAAC;IAExC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiGP,UAAU;EACV,UAAU,GAAG,kBAAkB,CAAC,CAAC,CAAC,6JAA6J,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7N,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/mocks/router.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/mocks/router.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAe/C;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
|
package/dist/mocks/router.js
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { listSchemaFiles, readSchemaFile } from '../shared/schema-utils.js';
|
|
7
7
|
import { generateMockData } from './generator.js';
|
|
8
|
+
import { getActiveMockOverride } from '../shared/mock-store.js';
|
|
9
|
+
import { expandMockTemplate } from '../shared/mock-template.js';
|
|
8
10
|
import { logger } from '../shared/logger.js';
|
|
9
11
|
/**
|
|
10
12
|
* ๅฐ schema ไธญ็่ทฏๅพๅๆฐๆ ผๅผ่ฝฌๆขไธบ Fastify ๆ ผๅผ
|
|
@@ -26,8 +28,20 @@ export async function registerMockRoutes(fastify, docsDir, prefix = '') {
|
|
|
26
28
|
for (const endpoint of doc.endpoints) {
|
|
27
29
|
const fullPath = normalizePath(endpoint.path, prefix);
|
|
28
30
|
const method = endpoint.method.toLowerCase();
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
const schemaFilename = fileMeta.filename;
|
|
32
|
+
const endpointPath = endpoint.path;
|
|
33
|
+
const endpointMethod = endpoint.method;
|
|
34
|
+
fastify[method](fullPath, async (_request, reply) => {
|
|
35
|
+
// 1. ไผๅ
็จ active override (ไธไธช endpoint ๅฝๅๅชๆไธไปฝ):
|
|
36
|
+
// ๆขๅณๅฎ body, ไนๅณๅฎ HTTP ๅๅบ็ถๆ็
|
|
37
|
+
const active = getActiveMockOverride(docsDir, schemaFilename, endpointMethod, endpointPath);
|
|
38
|
+
if (active) {
|
|
39
|
+
const code = parseInt(active.statusCode, 10);
|
|
40
|
+
if (!Number.isNaN(code))
|
|
41
|
+
reply.code(code);
|
|
42
|
+
return expandMockTemplate(active.body);
|
|
43
|
+
}
|
|
44
|
+
// 2. fallback: ็จ็ฌฌไธไธช 2xx ็ schema ็ๆ้ป่ฎคๆฐๆฎ
|
|
31
45
|
const successStatus = Object.keys(endpoint.response).find((s) => s.startsWith('2')) || '200';
|
|
32
46
|
const responseSchema = endpoint.response[successStatus];
|
|
33
47
|
if (responseSchema) {
|
package/dist/mocks/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/mocks/router.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C;;;GAGG;AACH,SAAS,aAAa,CAAC,UAAkB,EAAE,MAAc;IACvD,OAAO,MAAM,GAAG,UAAU,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAwB,EACxB,OAAe,EACf,SAAiB,EAAE;IAEnB,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE9C,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAK/B,CAAC;YAEZ,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/mocks/router.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C;;;GAGG;AACH,SAAS,aAAa,CAAC,UAAkB,EAAE,MAAc;IACvD,OAAO,MAAM,GAAG,UAAU,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAwB,EACxB,OAAe,EACf,SAAiB,EAAE;IAEnB,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE9C,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAK/B,CAAC;YAEZ,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;YACnC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;YAEvC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAClD,+CAA+C;gBAC/C,8BAA8B;gBAC9B,MAAM,MAAM,GAAG,qBAAqB,CAClC,OAAO,EACP,cAAc,EACd,cAAc,EACd,YAAY,CACb,CAAC;gBACF,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;wBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1C,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzC,CAAC;gBAED,wCAAwC;gBACxC,MAAM,aAAa,GACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;gBACzE,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACxD,IAAI,cAAc,EAAE,CAAC;oBACnB,OAAO,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBAC1C,CAAC;gBAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,UAAU,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/serve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CrE"}
|
package/dist/serve.js
CHANGED
|
@@ -16,6 +16,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
16
16
|
import { schemaRoutes } from './view/routes/schema.js';
|
|
17
17
|
import { docsRoutes } from './view/routes/docs.js';
|
|
18
18
|
import { entityRoutes } from './view/routes/entities.js';
|
|
19
|
+
import { mockRoutes } from './view/routes/mocks.js';
|
|
19
20
|
import { registerMockRoutes } from './mocks/router.js';
|
|
20
21
|
import { logger } from './shared/logger.js';
|
|
21
22
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -33,6 +34,7 @@ export async function startServe(options) {
|
|
|
33
34
|
await app.register(schemaRoutes, { docsDir });
|
|
34
35
|
await app.register(docsRoutes, { docsDir });
|
|
35
36
|
await app.register(entityRoutes, { docsDir });
|
|
37
|
+
await app.register(mockRoutes, { docsDir });
|
|
36
38
|
// Mock ่ทฏ็ฑ (ๅธฆ /mock ๅ็ผ)
|
|
37
39
|
const routeCount = await registerMockRoutes(app, docsDir, '/mock');
|
|
38
40
|
// SPA fallback: BrowserRouter ๅทๆฐๅญ่ทฏๅพๆถ็ปไธๅ้ๅฐ index.html
|
package/dist/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,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,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAQ/D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAqB;IACpD,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEpD,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,MAAM,EAAE,QAAQ,CAAC;QAC5C,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;IAEH,oBAAoB;IACpB,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;
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock ๅญๆกฃ่ฏปๅ
|
|
3
|
+
*
|
|
4
|
+
* ไผด็ๆไปถๆนๆก: docs/foo.schema.json โ docs/foo.mock.json
|
|
5
|
+
*
|
|
6
|
+
* ๆไปถ็ปๆ (version 1):
|
|
7
|
+
* {
|
|
8
|
+
* "version": 1,
|
|
9
|
+
* "endpoints": [
|
|
10
|
+
* {
|
|
11
|
+
* "method": "GET",
|
|
12
|
+
* "path": "/users/:id",
|
|
13
|
+
* "responses": {
|
|
14
|
+
* "200": { "default": <body> }
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* ]
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* ไธญ้ด็ "default" ่ฟไธๅฑๆฏๅ ไฝ, ๅ็ปญๆฏๆ OpenAPI ็ๅค mediaType /
|
|
21
|
+
* ๅค scenario ๆถ, ๅฏๆผๅๆ "application/json" / "happy-path" ็ญ key,
|
|
22
|
+
* ่ๆ ้็ ดๅๆขๆ็ปๆใ
|
|
23
|
+
*/
|
|
24
|
+
export interface MockEndpointEntry {
|
|
25
|
+
method: string;
|
|
26
|
+
path: string;
|
|
27
|
+
responses: {
|
|
28
|
+
[statusCode: string]: {
|
|
29
|
+
[variant: string]: unknown;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export interface MockDocument {
|
|
34
|
+
version: 1;
|
|
35
|
+
endpoints: MockEndpointEntry[];
|
|
36
|
+
}
|
|
37
|
+
/** ๆ foo.schema.json ๆ ๅฐๅฐ foo.mock.json */
|
|
38
|
+
export declare function mockFilenameFromSchema(schemaFilename: string): string;
|
|
39
|
+
export declare function mockFilepathFromSchema(docsDir: string, schemaFilename: string): string;
|
|
40
|
+
export declare function readMockDocument(filepath: string): MockDocument;
|
|
41
|
+
export declare function writeMockDocument(filepath: string, doc: MockDocument): void;
|
|
42
|
+
/** ๆฅๆพไธไธช endpoint ๅจๆๅฎ status ไธ็ mock ่ฆ็ๅผ, ๆฒกๆๅฐฑ่ฟๅ undefined */
|
|
43
|
+
export declare function getMockOverride(docsDir: string, schemaFilename: string, method: string, endpointPath: string, statusCode: string, variant?: string): unknown | undefined;
|
|
44
|
+
/** ่ทจๆๆ schema ๆไปถๆฅๆพ mock ่ฆ็ (mock ๆๅก็จ, ไธ็ฅ้ๆฅๆบ schema) */
|
|
45
|
+
export declare function findMockOverrideAcrossDocs(docsDir: string, method: string, endpointPath: string, statusCode: string, variant?: string): unknown | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* ๆฅๆพไธไธช endpoint ๅฝๅๆฟๆดป็ override (status + body)ใ
|
|
48
|
+
* ไธไธช endpoint ๅไธๆถ้ดๅชๆไธไปฝ active overrideใ
|
|
49
|
+
* ๅจๆๅฎ schema ๆไปถไธญๆฅๆพใ
|
|
50
|
+
*/
|
|
51
|
+
export declare function getActiveMockOverride(docsDir: string, schemaFilename: string, method: string, endpointPath: string, variant?: string): {
|
|
52
|
+
statusCode: string;
|
|
53
|
+
body: unknown;
|
|
54
|
+
} | undefined;
|
|
55
|
+
/** ๅๅ
ฅ/ๆดๆฐไธไธช endpoint ๅจๆๅฎ status ไธ็ mock ่ฆ็ๅผ */
|
|
56
|
+
export declare function setMockOverride(docsDir: string, schemaFilename: string, method: string, endpointPath: string, statusCode: string, body: unknown, variant?: string): void;
|
|
57
|
+
/** ๅ ้ค mock ่ฆ็, ่ฎฉ endpoint ๅ้ๅฐ generator ้ป่ฎค */
|
|
58
|
+
export declare function deleteMockOverride(docsDir: string, schemaFilename: string, method: string, endpointPath: string, statusCode: string, variant?: string): void;
|
|
59
|
+
//# sourceMappingURL=mock-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-store.d.ts","sourceRoot":"","sources":["../../src/shared/mock-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE;QACT,CAAC,UAAU,EAAE,MAAM,GAAG;YACpB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;SAC5B,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC;AAID,0CAA0C;AAC1C,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAEtF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAc/D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAM3E;AAYD,4DAA4D;AAC5D,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAwB,GAChC,OAAO,GAAG,SAAS,CAKrB;AAED,uDAAuD;AACvD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAwB,GAChC,OAAO,GAAG,SAAS,CAUrB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,MAAwB,GAChC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAWnD;AAED,8CAA8C;AAC9C,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,MAAwB,GAChC,IAAI,CAwBN;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAwB,GAChC,IAAI,CAgBN"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock ๅญๆกฃ่ฏปๅ
|
|
3
|
+
*
|
|
4
|
+
* ไผด็ๆไปถๆนๆก: docs/foo.schema.json โ docs/foo.mock.json
|
|
5
|
+
*
|
|
6
|
+
* ๆไปถ็ปๆ (version 1):
|
|
7
|
+
* {
|
|
8
|
+
* "version": 1,
|
|
9
|
+
* "endpoints": [
|
|
10
|
+
* {
|
|
11
|
+
* "method": "GET",
|
|
12
|
+
* "path": "/users/:id",
|
|
13
|
+
* "responses": {
|
|
14
|
+
* "200": { "default": <body> }
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* ]
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* ไธญ้ด็ "default" ่ฟไธๅฑๆฏๅ ไฝ, ๅ็ปญๆฏๆ OpenAPI ็ๅค mediaType /
|
|
21
|
+
* ๅค scenario ๆถ, ๅฏๆผๅๆ "application/json" / "happy-path" ็ญ key,
|
|
22
|
+
* ่ๆ ้็ ดๅๆขๆ็ปๆใ
|
|
23
|
+
*/
|
|
24
|
+
import fs from 'node:fs';
|
|
25
|
+
import path from 'node:path';
|
|
26
|
+
const DEFAULT_VARIANT = 'default';
|
|
27
|
+
/** ๆ foo.schema.json ๆ ๅฐๅฐ foo.mock.json */
|
|
28
|
+
export function mockFilenameFromSchema(schemaFilename) {
|
|
29
|
+
return schemaFilename.replace(/\.schema\.json$/, '.mock.json');
|
|
30
|
+
}
|
|
31
|
+
export function mockFilepathFromSchema(docsDir, schemaFilename) {
|
|
32
|
+
return path.join(docsDir, mockFilenameFromSchema(schemaFilename));
|
|
33
|
+
}
|
|
34
|
+
export function readMockDocument(filepath) {
|
|
35
|
+
if (!fs.existsSync(filepath)) {
|
|
36
|
+
return { version: 1, endpoints: [] };
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const raw = fs.readFileSync(filepath, 'utf-8');
|
|
40
|
+
const parsed = JSON.parse(raw);
|
|
41
|
+
if (typeof parsed !== 'object' || parsed === null || !Array.isArray(parsed.endpoints)) {
|
|
42
|
+
return { version: 1, endpoints: [] };
|
|
43
|
+
}
|
|
44
|
+
return { version: 1, endpoints: parsed.endpoints };
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return { version: 1, endpoints: [] };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function writeMockDocument(filepath, doc) {
|
|
51
|
+
const dir = path.dirname(filepath);
|
|
52
|
+
if (!fs.existsSync(dir)) {
|
|
53
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
fs.writeFileSync(filepath, JSON.stringify(doc, null, 2), 'utf-8');
|
|
56
|
+
}
|
|
57
|
+
function findEntry(doc, method, endpointPath) {
|
|
58
|
+
return doc.endpoints.find((e) => e.method.toUpperCase() === method.toUpperCase() && e.path === endpointPath);
|
|
59
|
+
}
|
|
60
|
+
/** ๆฅๆพไธไธช endpoint ๅจๆๅฎ status ไธ็ mock ่ฆ็ๅผ, ๆฒกๆๅฐฑ่ฟๅ undefined */
|
|
61
|
+
export function getMockOverride(docsDir, schemaFilename, method, endpointPath, statusCode, variant = DEFAULT_VARIANT) {
|
|
62
|
+
const filepath = mockFilepathFromSchema(docsDir, schemaFilename);
|
|
63
|
+
const doc = readMockDocument(filepath);
|
|
64
|
+
const entry = findEntry(doc, method, endpointPath);
|
|
65
|
+
return entry?.responses?.[statusCode]?.[variant];
|
|
66
|
+
}
|
|
67
|
+
/** ่ทจๆๆ schema ๆไปถๆฅๆพ mock ่ฆ็ (mock ๆๅก็จ, ไธ็ฅ้ๆฅๆบ schema) */
|
|
68
|
+
export function findMockOverrideAcrossDocs(docsDir, method, endpointPath, statusCode, variant = DEFAULT_VARIANT) {
|
|
69
|
+
if (!fs.existsSync(docsDir))
|
|
70
|
+
return undefined;
|
|
71
|
+
const files = fs.readdirSync(docsDir).filter((f) => f.endsWith('.mock.json'));
|
|
72
|
+
for (const f of files) {
|
|
73
|
+
const doc = readMockDocument(path.join(docsDir, f));
|
|
74
|
+
const entry = findEntry(doc, method, endpointPath);
|
|
75
|
+
const value = entry?.responses?.[statusCode]?.[variant];
|
|
76
|
+
if (value !== undefined)
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* ๆฅๆพไธไธช endpoint ๅฝๅๆฟๆดป็ override (status + body)ใ
|
|
83
|
+
* ไธไธช endpoint ๅไธๆถ้ดๅชๆไธไปฝ active overrideใ
|
|
84
|
+
* ๅจๆๅฎ schema ๆไปถไธญๆฅๆพใ
|
|
85
|
+
*/
|
|
86
|
+
export function getActiveMockOverride(docsDir, schemaFilename, method, endpointPath, variant = DEFAULT_VARIANT) {
|
|
87
|
+
const filepath = mockFilepathFromSchema(docsDir, schemaFilename);
|
|
88
|
+
const doc = readMockDocument(filepath);
|
|
89
|
+
const entry = findEntry(doc, method, endpointPath);
|
|
90
|
+
if (!entry)
|
|
91
|
+
return undefined;
|
|
92
|
+
for (const [statusCode, variants] of Object.entries(entry.responses)) {
|
|
93
|
+
if (variants && variants[variant] !== undefined) {
|
|
94
|
+
return { statusCode, body: variants[variant] };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
/** ๅๅ
ฅ/ๆดๆฐไธไธช endpoint ๅจๆๅฎ status ไธ็ mock ่ฆ็ๅผ */
|
|
100
|
+
export function setMockOverride(docsDir, schemaFilename, method, endpointPath, statusCode, body, variant = DEFAULT_VARIANT) {
|
|
101
|
+
const filepath = mockFilepathFromSchema(docsDir, schemaFilename);
|
|
102
|
+
const doc = readMockDocument(filepath);
|
|
103
|
+
let entry = findEntry(doc, method, endpointPath);
|
|
104
|
+
if (!entry) {
|
|
105
|
+
entry = { method: method.toUpperCase(), path: endpointPath, responses: {} };
|
|
106
|
+
doc.endpoints.push(entry);
|
|
107
|
+
}
|
|
108
|
+
// ๅไธ endpoint ๅไธๆถ้ดๅชๅ
่ฎธไธไปฝ active override:
|
|
109
|
+
// ๅๅ
ฅๆฐ status ๅ, ๆธ
ๆๅ
ถๅฎ status ๅจๅ variant ไธ็่ฆ็
|
|
110
|
+
for (const code of Object.keys(entry.responses)) {
|
|
111
|
+
if (code === statusCode)
|
|
112
|
+
continue;
|
|
113
|
+
if (entry.responses[code] && variant in entry.responses[code]) {
|
|
114
|
+
delete entry.responses[code][variant];
|
|
115
|
+
if (Object.keys(entry.responses[code]).length === 0) {
|
|
116
|
+
delete entry.responses[code];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (!entry.responses[statusCode]) {
|
|
121
|
+
entry.responses[statusCode] = {};
|
|
122
|
+
}
|
|
123
|
+
entry.responses[statusCode][variant] = body;
|
|
124
|
+
writeMockDocument(filepath, doc);
|
|
125
|
+
}
|
|
126
|
+
/** ๅ ้ค mock ่ฆ็, ่ฎฉ endpoint ๅ้ๅฐ generator ้ป่ฎค */
|
|
127
|
+
export function deleteMockOverride(docsDir, schemaFilename, method, endpointPath, statusCode, variant = DEFAULT_VARIANT) {
|
|
128
|
+
const filepath = mockFilepathFromSchema(docsDir, schemaFilename);
|
|
129
|
+
if (!fs.existsSync(filepath))
|
|
130
|
+
return;
|
|
131
|
+
const doc = readMockDocument(filepath);
|
|
132
|
+
const entry = findEntry(doc, method, endpointPath);
|
|
133
|
+
if (!entry)
|
|
134
|
+
return;
|
|
135
|
+
if (entry.responses[statusCode]) {
|
|
136
|
+
delete entry.responses[statusCode][variant];
|
|
137
|
+
if (Object.keys(entry.responses[statusCode]).length === 0) {
|
|
138
|
+
delete entry.responses[statusCode];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (Object.keys(entry.responses).length === 0) {
|
|
142
|
+
doc.endpoints = doc.endpoints.filter((e) => e !== entry);
|
|
143
|
+
}
|
|
144
|
+
writeMockDocument(filepath, doc);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=mock-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-store.js","sourceRoot":"","sources":["../../src/shared/mock-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAiB7B,MAAM,eAAe,GAAG,SAAS,CAAC;AAElC,0CAA0C;AAC1C,MAAM,UAAU,sBAAsB,CAAC,cAAsB;IAC3D,OAAO,cAAc,CAAC,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,cAAsB;IAC5E,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACtF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,GAAiB;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAChB,GAAiB,EACjB,MAAc,EACd,YAAoB;IAEpB,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAClF,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,cAAsB,EACtB,MAAc,EACd,YAAoB,EACpB,UAAkB,EAClB,UAAkB,eAAe;IAEjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACnD,OAAO,KAAK,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,MAAc,EACd,YAAoB,EACpB,UAAkB,EAClB,UAAkB,eAAe;IAEjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,cAAsB,EACtB,MAAc,EACd,YAAoB,EACpB,UAAkB,eAAe;IAEjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACrE,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YAChD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,cAAsB,EACtB,MAAc,EACd,YAAoB,EACpB,UAAkB,EAClB,IAAa,EACb,UAAkB,eAAe;IAEjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QAC5E,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,yCAAyC;IACzC,4CAA4C;IAC5C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,KAAK,UAAU;YAAE,SAAS;QAClC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,cAAsB,EACtB,MAAc,EACd,YAAoB,EACpB,UAAkB,EAClB,UAAkB,eAAe;IAEjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO;IACrC,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;IAC3D,CAAC;IACD,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock ๆจกๆฟๅฑๅผ
|
|
3
|
+
*
|
|
4
|
+
* ๅ
่ฃ
mockjs, ๆๅญๆกฃ้็ override body ๅฝไฝ Mock.js ๆจกๆฟ:
|
|
5
|
+
* - ๅญ็ฌฆไธฒ้็ "@cname" / "@integer(1,100)" ็ญไผ่ขซๆฑๅผ
|
|
6
|
+
* - ๆฐ็ป็ 'key|1-10' ่ฟ็ฑป่งๅไนไผๅฑๅผ
|
|
7
|
+
*
|
|
8
|
+
* ๅคฑ่ดฅๆถ่ฟๅๅๅผ, ไธๅฝฑๅ mock ๆๅกๅฏ็จๆงใ
|
|
9
|
+
*/
|
|
10
|
+
export declare function expandMockTemplate(value: unknown): unknown;
|
|
11
|
+
//# sourceMappingURL=mock-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-template.d.ts","sourceRoot":"","sources":["../../src/shared/mock-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAO1D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock ๆจกๆฟๅฑๅผ
|
|
3
|
+
*
|
|
4
|
+
* ๅ
่ฃ
mockjs, ๆๅญๆกฃ้็ override body ๅฝไฝ Mock.js ๆจกๆฟ:
|
|
5
|
+
* - ๅญ็ฌฆไธฒ้็ "@cname" / "@integer(1,100)" ็ญไผ่ขซๆฑๅผ
|
|
6
|
+
* - ๆฐ็ป็ 'key|1-10' ่ฟ็ฑป่งๅไนไผๅฑๅผ
|
|
7
|
+
*
|
|
8
|
+
* ๅคฑ่ดฅๆถ่ฟๅๅๅผ, ไธๅฝฑๅ mock ๆๅกๅฏ็จๆงใ
|
|
9
|
+
*/
|
|
10
|
+
import Mock from 'mockjs';
|
|
11
|
+
export function expandMockTemplate(value) {
|
|
12
|
+
if (value === undefined || value === null)
|
|
13
|
+
return value;
|
|
14
|
+
try {
|
|
15
|
+
return Mock.mock(value);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=mock-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-template.js","sourceRoot":"","sources":["../../src/shared/mock-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* requirement.md ็ฎก็ๆจกๅ
|
|
3
|
+
*
|
|
4
|
+
* ๆไพ requirement.md ็็ๆใๅ ่ฝฝๅ่ฝ
|
|
5
|
+
* requirement.md ็จไบ็จๆทๅ Agent ๅไฝๆด็้ๆฑ๏ผไฝไธบ Agent ็ไธไธๆ
|
|
6
|
+
*/
|
|
7
|
+
interface GenerateResult {
|
|
8
|
+
status: 'created' | 'overwritten' | 'confirm';
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Generate a requirement.md file in the project directory.
|
|
13
|
+
*
|
|
14
|
+
* @param projectDir Project root directory
|
|
15
|
+
* @param force If true, overwrite existing file without prompting
|
|
16
|
+
* @returns Result indicating what happened
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateRequirement(projectDir: string, force?: boolean): GenerateResult;
|
|
19
|
+
/**
|
|
20
|
+
* Load the content of requirement.md from the project directory, if it exists.
|
|
21
|
+
*
|
|
22
|
+
* @param projectDir Project root directory
|
|
23
|
+
* @returns The file content, or null if the file doesn't exist
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadRequirement(projectDir: string): string | null;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=requirement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirement.d.ts","sourceRoot":"","sources":["../../src/shared/requirement.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8BH,UAAU,cAAc;IACtB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,cAAc,CAmB9F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOjE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* requirement.md ็ฎก็ๆจกๅ
|
|
3
|
+
*
|
|
4
|
+
* ๆไพ requirement.md ็็ๆใๅ ่ฝฝๅ่ฝ
|
|
5
|
+
* requirement.md ็จไบ็จๆทๅ Agent ๅไฝๆด็้ๆฑ๏ผไฝไธบ Agent ็ไธไธๆ
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
const REQUIREMENT_FILENAME = 'requirement.md';
|
|
10
|
+
const REQUIREMENT_TEMPLATE = `# Project Requirements
|
|
11
|
+
|
|
12
|
+
> This file is used to collaboratively organize requirements between you and the AI agent.
|
|
13
|
+
> It will be automatically loaded as context in each session.
|
|
14
|
+
> Feel free to edit this file to describe your API requirements, business rules, and design decisions.
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
<!-- Describe the overall purpose of your API project -->
|
|
19
|
+
|
|
20
|
+
## API Modules
|
|
21
|
+
|
|
22
|
+
<!-- List the main API modules and their responsibilities -->
|
|
23
|
+
|
|
24
|
+
## Business Rules
|
|
25
|
+
|
|
26
|
+
<!-- Document important business rules and constraints -->
|
|
27
|
+
|
|
28
|
+
## Notes
|
|
29
|
+
|
|
30
|
+
<!-- Any additional notes or context for the agent -->
|
|
31
|
+
`;
|
|
32
|
+
/**
|
|
33
|
+
* Generate a requirement.md file in the project directory.
|
|
34
|
+
*
|
|
35
|
+
* @param projectDir Project root directory
|
|
36
|
+
* @param force If true, overwrite existing file without prompting
|
|
37
|
+
* @returns Result indicating what happened
|
|
38
|
+
*/
|
|
39
|
+
export function generateRequirement(projectDir, force = false) {
|
|
40
|
+
const filePath = join(projectDir, REQUIREMENT_FILENAME);
|
|
41
|
+
const exists = existsSync(filePath);
|
|
42
|
+
if (exists && !force) {
|
|
43
|
+
return {
|
|
44
|
+
status: 'confirm',
|
|
45
|
+
message: `requirement.md already exists in ${projectDir}. Run /init again to overwrite it.`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
writeFileSync(filePath, REQUIREMENT_TEMPLATE, 'utf-8');
|
|
49
|
+
return {
|
|
50
|
+
status: exists ? 'overwritten' : 'created',
|
|
51
|
+
message: exists
|
|
52
|
+
? `requirement.md has been overwritten in ${projectDir}.`
|
|
53
|
+
: `requirement.md has been created in ${projectDir}. Edit it to describe your requirements โ it will be loaded as agent context in each session.`,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Load the content of requirement.md from the project directory, if it exists.
|
|
58
|
+
*
|
|
59
|
+
* @param projectDir Project root directory
|
|
60
|
+
* @returns The file content, or null if the file doesn't exist
|
|
61
|
+
*/
|
|
62
|
+
export function loadRequirement(projectDir) {
|
|
63
|
+
const filePath = join(projectDir, REQUIREMENT_FILENAME);
|
|
64
|
+
if (!existsSync(filePath)) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const content = readFileSync(filePath, 'utf-8').trim();
|
|
68
|
+
return content || null;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=requirement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirement.js","sourceRoot":"","sources":["../../src/shared/requirement.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAE9C,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB5B,CAAC;AAOF;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,QAAiB,KAAK;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,oCAAoC,UAAU,oCAAoC;SAC5F,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,QAAQ,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAEvD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC1C,OAAO,EAAE,MAAM;YACb,CAAC,CAAC,0CAA0C,UAAU,GAAG;YACzD,CAAC,CAAC,sCAAsC,UAAU,+FAA+F;KACpJ,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-utils.d.ts","sourceRoot":"","sources":["../../src/shared/schema-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAG/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"schema-utils.d.ts","sourceRoot":"","sources":["../../src/shared/schema-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAG/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAuBjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAM3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAQzE"}
|
|
@@ -17,7 +17,9 @@ export function listSchemaFiles(docsDir) {
|
|
|
17
17
|
if (!fs.existsSync(docsDir)) {
|
|
18
18
|
return [];
|
|
19
19
|
}
|
|
20
|
-
const files = fs
|
|
20
|
+
const files = fs
|
|
21
|
+
.readdirSync(docsDir)
|
|
22
|
+
.filter((f) => f.endsWith('.schema.json') && !f.endsWith('.mock.json'));
|
|
21
23
|
return files.map((filename) => {
|
|
22
24
|
const filepath = path.join(docsDir, filename);
|
|
23
25
|
const stat = fs.statSync(filepath);
|