@autoview/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +407 -0
- package/lib/AutoViewAgent.d.ts +109 -0
- package/lib/AutoViewAgent.js +123 -0
- package/lib/AutoViewAgent.js.map +1 -0
- package/lib/agent/emitMcpServer.d.ts +15 -0
- package/lib/agent/emitMcpServer.js +157 -0
- package/lib/agent/emitMcpServer.js.map +1 -0
- package/lib/agent/emitReport.d.ts +14 -0
- package/lib/agent/emitReport.js +85 -0
- package/lib/agent/emitReport.js.map +1 -0
- package/lib/agent/toolSurface.d.ts +130 -0
- package/lib/agent/toolSurface.js +342 -0
- package/lib/agent/toolSurface.js.map +1 -0
- package/lib/agent/verifyAgentTasks.d.ts +87 -0
- package/lib/agent/verifyAgentTasks.js +126 -0
- package/lib/agent/verifyAgentTasks.js.map +1 -0
- package/lib/cli/main.d.ts +2 -0
- package/lib/cli/main.js +295 -0
- package/lib/cli/main.js.map +1 -0
- package/lib/compiler/AutoViewInterfaceCompiler.d.ts +27 -0
- package/lib/compiler/AutoViewInterfaceCompiler.js +68 -0
- package/lib/compiler/AutoViewInterfaceCompiler.js.map +1 -0
- package/lib/constants/AutoViewFrontendTemplate.d.ts +1 -0
- package/lib/constants/AutoViewFrontendTemplate.js +46 -0
- package/lib/constants/AutoViewFrontendTemplate.js.map +1 -0
- package/lib/constants/AutoViewSystemPromptConstant.d.ts +5 -0
- package/lib/constants/AutoViewSystemPromptConstant.js +4 -0
- package/lib/constants/AutoViewSystemPromptConstant.js.map +1 -0
- package/lib/context/IAutoViewAgentContext.d.ts +60 -0
- package/lib/context/IAutoViewAgentContext.js +3 -0
- package/lib/context/IAutoViewAgentContext.js.map +1 -0
- package/lib/fromSwagger.d.ts +53 -0
- package/lib/fromSwagger.js +513 -0
- package/lib/fromSwagger.js.map +1 -0
- package/lib/generateDeterministic.d.ts +26 -0
- package/lib/generateDeterministic.js +75 -0
- package/lib/generateDeterministic.js.map +1 -0
- package/lib/index.d.ts +15 -0
- package/lib/index.js +41 -0
- package/lib/index.js.map +1 -0
- package/lib/orchestrate/orchestrateAutoView.d.ts +17 -0
- package/lib/orchestrate/orchestrateAutoView.js +491 -0
- package/lib/orchestrate/orchestrateAutoView.js.map +1 -0
- package/lib/orchestrate/orchestrateAutoViewProductPlan.d.ts +37 -0
- package/lib/orchestrate/orchestrateAutoViewProductPlan.js +109 -0
- package/lib/orchestrate/orchestrateAutoViewProductPlan.js.map +1 -0
- package/lib/orchestrate/orchestrateAutoViewRender.d.ts +133 -0
- package/lib/orchestrate/orchestrateAutoViewRender.js +943 -0
- package/lib/orchestrate/orchestrateAutoViewRender.js.map +1 -0
- package/lib/orchestrate/orchestrateAutoViewRenderDeterministic.d.ts +24 -0
- package/lib/orchestrate/orchestrateAutoViewRenderDeterministic.js +92 -0
- package/lib/orchestrate/orchestrateAutoViewRenderDeterministic.js.map +1 -0
- package/lib/orchestrate/orchestrateAutoViewReview.d.ts +48 -0
- package/lib/orchestrate/orchestrateAutoViewReview.js +328 -0
- package/lib/orchestrate/orchestrateAutoViewReview.js.map +1 -0
- package/lib/orchestrate/orchestrateAutoViewScaffold.d.ts +45 -0
- package/lib/orchestrate/orchestrateAutoViewScaffold.js +586 -0
- package/lib/orchestrate/orchestrateAutoViewScaffold.js.map +1 -0
- package/lib/orchestrate/orchestrateAutoViewSdkStudy.d.ts +26 -0
- package/lib/orchestrate/orchestrateAutoViewSdkStudy.js +85 -0
- package/lib/orchestrate/orchestrateAutoViewSdkStudy.js.map +1 -0
- package/lib/orchestrate/structures/IAutoViewProductPlan.d.ts +96 -0
- package/lib/orchestrate/structures/IAutoViewProductPlan.js +3 -0
- package/lib/orchestrate/structures/IAutoViewProductPlan.js.map +1 -0
- package/lib/orchestrate/structures/IAutoViewProductPlanApplication.d.ts +38 -0
- package/lib/orchestrate/structures/IAutoViewProductPlanApplication.js +3 -0
- package/lib/orchestrate/structures/IAutoViewProductPlanApplication.js.map +1 -0
- package/lib/orchestrate/structures/IAutoViewRenderApplication.d.ts +38 -0
- package/lib/orchestrate/structures/IAutoViewRenderApplication.js +3 -0
- package/lib/orchestrate/structures/IAutoViewRenderApplication.js.map +1 -0
- package/lib/orchestrate/structures/IAutoViewReviewApplication.d.ts +40 -0
- package/lib/orchestrate/structures/IAutoViewReviewApplication.js +3 -0
- package/lib/orchestrate/structures/IAutoViewReviewApplication.js.map +1 -0
- package/lib/orchestrate/structures/IAutoViewSdkMap.d.ts +63 -0
- package/lib/orchestrate/structures/IAutoViewSdkMap.js +3 -0
- package/lib/orchestrate/structures/IAutoViewSdkMap.js.map +1 -0
- package/lib/orchestrate/structures/IAutoViewSdkStudyApplication.d.ts +37 -0
- package/lib/orchestrate/structures/IAutoViewSdkStudyApplication.js +3 -0
- package/lib/orchestrate/structures/IAutoViewSdkStudyApplication.js.map +1 -0
- package/lib/orchestrate/utils/HistoryMessage.d.ts +10 -0
- package/lib/orchestrate/utils/HistoryMessage.js +25 -0
- package/lib/orchestrate/utils/HistoryMessage.js.map +1 -0
- package/lib/orchestrate/utils/auditFrontendRuntime.d.ts +53 -0
- package/lib/orchestrate/utils/auditFrontendRuntime.js +362 -0
- package/lib/orchestrate/utils/auditFrontendRuntime.js.map +1 -0
- package/lib/orchestrate/utils/buildDeterministicPlan.d.ts +4 -0
- package/lib/orchestrate/utils/buildDeterministicPlan.js +233 -0
- package/lib/orchestrate/utils/buildDeterministicPlan.js.map +1 -0
- package/lib/orchestrate/utils/buildDeterministicSdkMap.d.ts +22 -0
- package/lib/orchestrate/utils/buildDeterministicSdkMap.js +154 -0
- package/lib/orchestrate/utils/buildDeterministicSdkMap.js.map +1 -0
- package/lib/orchestrate/utils/cacheNodeModules.d.ts +31 -0
- package/lib/orchestrate/utils/cacheNodeModules.js +134 -0
- package/lib/orchestrate/utils/cacheNodeModules.js.map +1 -0
- package/lib/orchestrate/utils/describeEndpointPropsShape.d.ts +37 -0
- package/lib/orchestrate/utils/describeEndpointPropsShape.js +192 -0
- package/lib/orchestrate/utils/describeEndpointPropsShape.js.map +1 -0
- package/lib/orchestrate/utils/describeEndpointRequestBodyShape.d.ts +22 -0
- package/lib/orchestrate/utils/describeEndpointRequestBodyShape.js +29 -0
- package/lib/orchestrate/utils/describeEndpointRequestBodyShape.js.map +1 -0
- package/lib/orchestrate/utils/describeEndpointResponseShape.d.ts +19 -0
- package/lib/orchestrate/utils/describeEndpointResponseShape.js +30 -0
- package/lib/orchestrate/utils/describeEndpointResponseShape.js.map +1 -0
- package/lib/orchestrate/utils/executeCachedBatch.d.ts +22 -0
- package/lib/orchestrate/utils/executeCachedBatch.js +64 -0
- package/lib/orchestrate/utils/executeCachedBatch.js.map +1 -0
- package/lib/orchestrate/utils/loadShoppingFixture.d.ts +33 -0
- package/lib/orchestrate/utils/loadShoppingFixture.js +17 -0
- package/lib/orchestrate/utils/loadShoppingFixture.js.map +1 -0
- package/lib/orchestrate/utils/normalizeProductPlanPaths.d.ts +24 -0
- package/lib/orchestrate/utils/normalizeProductPlanPaths.js +77 -0
- package/lib/orchestrate/utils/normalizeProductPlanPaths.js.map +1 -0
- package/lib/orchestrate/utils/renderJsonSchema.d.ts +23 -0
- package/lib/orchestrate/utils/renderJsonSchema.js +122 -0
- package/lib/orchestrate/utils/renderJsonSchema.js.map +1 -0
- package/lib/orchestrate/utils/renderResourcePage.d.ts +36 -0
- package/lib/orchestrate/utils/renderResourcePage.js +1415 -0
- package/lib/orchestrate/utils/renderResourcePage.js.map +1 -0
- package/lib/orchestrate/utils/validateFrontendTypecheck.d.ts +109 -0
- package/lib/orchestrate/utils/validateFrontendTypecheck.js +274 -0
- package/lib/orchestrate/utils/validateFrontendTypecheck.js.map +1 -0
- package/lib/preview/renderPreview.d.ts +22 -0
- package/lib/preview/renderPreview.js +198 -0
- package/lib/preview/renderPreview.js.map +1 -0
- package/lib/typings/compiler.d.ts +39 -0
- package/lib/typings/compiler.js +3 -0
- package/lib/typings/compiler.js.map +1 -0
- package/lib/typings/events.d.ts +106 -0
- package/lib/typings/events.js +3 -0
- package/lib/typings/events.js.map +1 -0
- package/lib/typings/index.d.ts +10 -0
- package/lib/typings/index.js +27 -0
- package/lib/typings/index.js.map +1 -0
- package/lib/typings/misc.d.ts +78 -0
- package/lib/typings/misc.js +3 -0
- package/lib/typings/misc.js.map +1 -0
- package/lib/utils/ArrayUtil.d.ts +8 -0
- package/lib/utils/ArrayUtil.js +30 -0
- package/lib/utils/ArrayUtil.js.map +1 -0
- package/lib/utils/StringUtil.d.ts +11 -0
- package/lib/utils/StringUtil.js +28 -0
- package/lib/utils/StringUtil.js.map +1 -0
- package/lib/utils/classifyEndpoints.d.ts +62 -0
- package/lib/utils/classifyEndpoints.js +216 -0
- package/lib/utils/classifyEndpoints.js.map +1 -0
- package/lib/utils/endpointFilter.d.ts +26 -0
- package/lib/utils/endpointFilter.js +0 -0
- package/lib/utils/endpointFilter.js.map +1 -0
- package/lib/utils/extractFields.d.ts +85 -0
- package/lib/utils/extractFields.js +231 -0
- package/lib/utils/extractFields.js.map +1 -0
- package/lib/utils/index.d.ts +13 -0
- package/lib/utils/index.js +30 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/normalizeForNestia.d.ts +34 -0
- package/lib/utils/normalizeForNestia.js +133 -0
- package/lib/utils/normalizeForNestia.js.map +1 -0
- package/lib/utils/resourcePlan.d.ts +39 -0
- package/lib/utils/resourcePlan.js +95 -0
- package/lib/utils/resourcePlan.js.map +1 -0
- package/lib/utils/sliceDocument.d.ts +17 -0
- package/lib/utils/sliceDocument.js +114 -0
- package/lib/utils/sliceDocument.js.map +1 -0
- package/lib/utils/toEndpoints.d.ts +90 -0
- package/lib/utils/toEndpoints.js +227 -0
- package/lib/utils/toEndpoints.js.map +1 -0
- package/lib/verify/runWorkflows.d.ts +25 -0
- package/lib/verify/runWorkflows.js +366 -0
- package/lib/verify/runWorkflows.js.map +1 -0
- package/lib/verify/workflows.d.ts +53 -0
- package/lib/verify/workflows.js +107 -0
- package/lib/verify/workflows.js.map +1 -0
- package/package.json +82 -0
- package/prompts/AUTOVIEW_RENDER.md +398 -0
- package/prompts/AUTOVIEW_REVIEW.md +60 -0
- package/prompts/AUTOVIEW_SDK_STUDY.md +89 -0
- package/src/AutoViewAgent.ts +222 -0
- package/src/agent/emitMcpServer.integration.test.ts +168 -0
- package/src/agent/emitMcpServer.test.ts +51 -0
- package/src/agent/emitMcpServer.ts +178 -0
- package/src/agent/emitReport.ts +117 -0
- package/src/agent/toolSurface.test.ts +243 -0
- package/src/agent/toolSurface.ts +501 -0
- package/src/agent/verifyAgentTasks.test.ts +106 -0
- package/src/agent/verifyAgentTasks.ts +171 -0
- package/src/cli/main.ts +363 -0
- package/src/compiler/AutoViewInterfaceCompiler.ts +69 -0
- package/src/constants/AutoViewFrontendTemplate.ts +42 -0
- package/src/constants/AutoViewSystemPromptConstant.ts +6 -0
- package/src/context/IAutoViewAgentContext.ts +84 -0
- package/src/fromSwagger.test.ts +269 -0
- package/src/fromSwagger.ts +500 -0
- package/src/generateDeterministic.test.ts +39 -0
- package/src/generateDeterministic.ts +77 -0
- package/src/index.ts +30 -0
- package/src/orchestrate/orchestrateAutoView.ts +590 -0
- package/src/orchestrate/orchestrateAutoViewProductPlan.ts +121 -0
- package/src/orchestrate/orchestrateAutoViewRender.ts +1117 -0
- package/src/orchestrate/orchestrateAutoViewRenderDeterministic.ts +101 -0
- package/src/orchestrate/orchestrateAutoViewReview.ts +272 -0
- package/src/orchestrate/orchestrateAutoViewScaffold.ts +627 -0
- package/src/orchestrate/orchestrateAutoViewSdkStudy.ts +90 -0
- package/src/orchestrate/renderNavTs.test.ts +74 -0
- package/src/orchestrate/structures/IAutoViewProductPlan.ts +119 -0
- package/src/orchestrate/structures/IAutoViewProductPlanApplication.ts +41 -0
- package/src/orchestrate/structures/IAutoViewRenderApplication.ts +40 -0
- package/src/orchestrate/structures/IAutoViewReviewApplication.ts +42 -0
- package/src/orchestrate/structures/IAutoViewSdkMap.ts +72 -0
- package/src/orchestrate/structures/IAutoViewSdkStudyApplication.ts +40 -0
- package/src/orchestrate/utils/HistoryMessage.ts +41 -0
- package/src/orchestrate/utils/auditFrontendRuntime.test.ts +18 -0
- package/src/orchestrate/utils/auditFrontendRuntime.ts +454 -0
- package/src/orchestrate/utils/buildDeterministicPlan.test.ts +170 -0
- package/src/orchestrate/utils/buildDeterministicPlan.ts +289 -0
- package/src/orchestrate/utils/buildDeterministicSdkMap.test.ts +90 -0
- package/src/orchestrate/utils/buildDeterministicSdkMap.ts +169 -0
- package/src/orchestrate/utils/cacheNodeModules.ts +136 -0
- package/src/orchestrate/utils/describeEndpointPropsShape.test.ts +86 -0
- package/src/orchestrate/utils/describeEndpointPropsShape.ts +202 -0
- package/src/orchestrate/utils/describeEndpointRequestBodyShape.test.ts +87 -0
- package/src/orchestrate/utils/describeEndpointRequestBodyShape.ts +31 -0
- package/src/orchestrate/utils/describeEndpointResponseShape.test.ts +70 -0
- package/src/orchestrate/utils/describeEndpointResponseShape.ts +32 -0
- package/src/orchestrate/utils/executeCachedBatch.ts +59 -0
- package/src/orchestrate/utils/loadShoppingFixture.ts +52 -0
- package/src/orchestrate/utils/normalizeProductPlanPaths.ts +92 -0
- package/src/orchestrate/utils/renderJsonSchema.test.ts +162 -0
- package/src/orchestrate/utils/renderJsonSchema.ts +133 -0
- package/src/orchestrate/utils/renderResourcePage.test.ts +468 -0
- package/src/orchestrate/utils/renderResourcePage.ts +1624 -0
- package/src/orchestrate/utils/validateFrontendTypecheck.test.ts +32 -0
- package/src/orchestrate/utils/validateFrontendTypecheck.ts +335 -0
- package/src/preview/renderPreview.ts +273 -0
- package/src/typings/compiler.ts +47 -0
- package/src/typings/events.ts +155 -0
- package/src/typings/index.ts +10 -0
- package/src/typings/misc.ts +93 -0
- package/src/utils/ArrayUtil.ts +16 -0
- package/src/utils/StringUtil.ts +29 -0
- package/src/utils/classifyEndpoints.test.ts +86 -0
- package/src/utils/classifyEndpoints.ts +291 -0
- package/src/utils/endpointFilter.test.ts +50 -0
- package/src/utils/endpointFilter.ts +0 -0
- package/src/utils/extractFields.test.ts +82 -0
- package/src/utils/extractFields.ts +306 -0
- package/src/utils/index.ts +13 -0
- package/src/utils/normalizeForNestia.test.ts +93 -0
- package/src/utils/normalizeForNestia.ts +139 -0
- package/src/utils/resourcePlan.test.ts +104 -0
- package/src/utils/resourcePlan.ts +180 -0
- package/src/utils/sliceDocument.test.ts +85 -0
- package/src/utils/sliceDocument.ts +119 -0
- package/src/utils/toEndpoints.test.ts +251 -0
- package/src/utils/toEndpoints.ts +343 -0
- package/src/verify/runWorkflows.ts +403 -0
- package/src/verify/workflows.test.ts +117 -0
- package/src/verify/workflows.ts +154 -0
- package/template/CLAUDE.md +140 -0
- package/template/Dockerfile +31 -0
- package/template/PROMPT.md +80 -0
- package/template/SANDBOX.md +70 -0
- package/template/app/api/health/route.ts +10 -0
- package/template/app/globals.css +97 -0
- package/template/app/layout.tsx +30 -0
- package/template/app/page.tsx +19 -0
- package/template/components/AppShell.tsx +114 -0
- package/template/components/auto/CatalogGrid.tsx +159 -0
- package/template/components/auto/ConfirmButton.tsx +67 -0
- package/template/components/auto/EmbeddedCollection.tsx +144 -0
- package/template/components/auto/ResourceDashboard.tsx +104 -0
- package/template/components/auto/ResourceDetail.tsx +93 -0
- package/template/components/auto/ResourceForm.tsx +235 -0
- package/template/components/auto/ResourceIcon.tsx +88 -0
- package/template/components/auto/ResourceLanding.tsx +155 -0
- package/template/components/auto/ResourceTable.tsx +223 -0
- package/template/components/auto/formatValue.tsx +186 -0
- package/template/components/auto/types.ts +42 -0
- package/template/components/ui/badge.tsx +40 -0
- package/template/components/ui/button.tsx +57 -0
- package/template/components/ui/card.tsx +86 -0
- package/template/components/ui/dialog.tsx +119 -0
- package/template/components/ui/input.tsx +23 -0
- package/template/components/ui/label.tsx +24 -0
- package/template/components/ui/pagination.tsx +117 -0
- package/template/components/ui/select.tsx +92 -0
- package/template/components/ui/sheet.tsx +135 -0
- package/template/components/ui/skeleton.tsx +15 -0
- package/template/components/ui/table.tsx +120 -0
- package/template/components/ui/tabs.tsx +55 -0
- package/template/lib/utils.ts +35 -0
- package/template/next.config.mjs +52 -0
- package/template/package.json +46 -0
- package/template/postcss.config.js +6 -0
- package/template/scripts/start-shopping-backend.sh +56 -0
- package/template/tailwind.config.ts +96 -0
- package/template/tsconfig.json +29 -0
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.fromSwagger = fromSwagger;
|
|
16
|
+
exports.fromSwaggerFile = fromSwaggerFile;
|
|
17
|
+
exports.extractBackendFromSwagger = extractBackendFromSwagger;
|
|
18
|
+
exports.extractBackendFromSwaggerFile = extractBackendFromSwaggerFile;
|
|
19
|
+
const utils_1 = require("@typia/utils");
|
|
20
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
21
|
+
/**
|
|
22
|
+
* Normalize a raw OpenAPI / Swagger payload into a standard
|
|
23
|
+
* {@link OpenApi.IDocument} — the swagger-native shape the AutoView
|
|
24
|
+
* orchestrators now consume directly (via {@link toEndpoints}).
|
|
25
|
+
*
|
|
26
|
+
* Accepts both an in-memory JSON object and a file path; the latter is
|
|
27
|
+
* convenient for the CLI binary. `OpenApiConverter.upgradeDocument` upgrades
|
|
28
|
+
* Swagger 2.0 / OpenAPI 3.0 / 3.1 to a single normalized 3.1 document, so
|
|
29
|
+
* every endpoint — query-string endpoints included — is preserved. (The old
|
|
30
|
+
* `invertOpenApiDocument` route through the AutoBE AST silently dropped
|
|
31
|
+
* query-string endpoints.)
|
|
32
|
+
*/
|
|
33
|
+
function fromSwagger(swagger) {
|
|
34
|
+
resolveParameterRefs(swagger);
|
|
35
|
+
resolvePathRefs(swagger);
|
|
36
|
+
stripPathRefAllOf(swagger, 0);
|
|
37
|
+
flattenAllOf(swagger);
|
|
38
|
+
promoteInlineBodies(swagger);
|
|
39
|
+
dropUnroutablePaths(swagger);
|
|
40
|
+
return utils_1.OpenApiConverter.upgradeDocument(swagger);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolve `$ref`s that are a JSON Pointer INTO another operation's inline
|
|
44
|
+
* schema (`#/paths/~1v2~1bandwidth/get/responses/...`) by replacing the `$ref`
|
|
45
|
+
* node with a deep clone of the pointer's target. DigitalOcean DRYs whole
|
|
46
|
+
* response schemas this way — at the schema root (`/v2/monitoring/metrics/*`
|
|
47
|
+
* all alias one bandwidth schema) and inside properties
|
|
48
|
+
* (`POST /v2/apps` → `{ app: $ref → GET /v2/apps …items }`). Standard tooling
|
|
49
|
+
* only chases `#/components/...` refs; nestia emits `Response = any` for these,
|
|
50
|
+
* which turns every simulate-mode screen of the resource into a silent empty
|
|
51
|
+
* state.
|
|
52
|
+
*
|
|
53
|
+
* Cycle-safe: a pointer actively being expanded is left verbatim (the later
|
|
54
|
+
* allOf-stripping pass treats the leftover as noise). Depth-guarded against
|
|
55
|
+
* pathological nesting. Mutates `raw` in place.
|
|
56
|
+
*/
|
|
57
|
+
function resolvePathRefs(raw) {
|
|
58
|
+
/**
|
|
59
|
+
* Follow an escaped JSON Pointer from the root. Being a URI fragment, parts
|
|
60
|
+
* are percent-decoded first (`%7B` → `{` — DO encodes `{app_id}` segments),
|
|
61
|
+
* then pointer-unescaped (`~1` → `/`, `~0` → `~`), per RFC 6901.
|
|
62
|
+
*/
|
|
63
|
+
const lookup = (pointer) => {
|
|
64
|
+
let node = raw;
|
|
65
|
+
for (const part of pointer.slice(2).split("/")) {
|
|
66
|
+
let key = part;
|
|
67
|
+
try {
|
|
68
|
+
key = decodeURIComponent(key);
|
|
69
|
+
}
|
|
70
|
+
catch (_a) {
|
|
71
|
+
// not percent-encoded — use the raw part
|
|
72
|
+
}
|
|
73
|
+
key = key.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
74
|
+
if (typeof node !== "object" || node === null)
|
|
75
|
+
return undefined;
|
|
76
|
+
node = node[key];
|
|
77
|
+
}
|
|
78
|
+
return node;
|
|
79
|
+
};
|
|
80
|
+
const active = new Set();
|
|
81
|
+
const walk = (node, depth) => {
|
|
82
|
+
if (depth > 64 || typeof node !== "object" || node === null)
|
|
83
|
+
return;
|
|
84
|
+
if (Array.isArray(node)) {
|
|
85
|
+
for (const v of node)
|
|
86
|
+
walk(v, depth + 1);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const obj = node;
|
|
90
|
+
const ref = obj.$ref;
|
|
91
|
+
if (typeof ref === "string" && ref.startsWith("#/paths/")) {
|
|
92
|
+
if (!active.has(ref)) {
|
|
93
|
+
const target = lookup(ref);
|
|
94
|
+
if (typeof target === "object" && target !== null) {
|
|
95
|
+
active.add(ref);
|
|
96
|
+
// The target may itself hold path-pointers — resolve before cloning.
|
|
97
|
+
walk(target, depth + 1);
|
|
98
|
+
active.delete(ref);
|
|
99
|
+
delete obj.$ref;
|
|
100
|
+
Object.assign(obj, structuredClone(target));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return; // a (possibly unresolved) ref node has nothing else to walk
|
|
104
|
+
}
|
|
105
|
+
for (const v of Object.values(obj))
|
|
106
|
+
walk(v, depth + 1);
|
|
107
|
+
};
|
|
108
|
+
walk(raw, 0);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Promote every INLINE OBJECT request/response body into a uniquely named
|
|
112
|
+
* component schema (replacing it with a `$ref`) BEFORE nestia sees the document.
|
|
113
|
+
*
|
|
114
|
+
* nestia promotes inline bodies itself, but derives the component name from the
|
|
115
|
+
* path with `{param}` segments DROPPED — so a parent list and its child detail
|
|
116
|
+
* (`/v2/droplets` vs `/v2/droplets/{droplet_id}`) both claim
|
|
117
|
+
* `IApiV2Droplets.GetResponse`. The loser's SDK function is emitted as
|
|
118
|
+
* `Response = any`; `typia.random<any>()` then yields nothing, and the
|
|
119
|
+
* simulate-mode screen for that resource renders empty forever — silently. On
|
|
120
|
+
* DigitalOcean (every body inline) this gutted 38 of 148 SDK files.
|
|
121
|
+
*
|
|
122
|
+
* Naming here keeps the param segments (`ApiV2DropletsDropletIdGetResponse`), so
|
|
123
|
+
* names cannot collide across sibling paths; an unexpected clash falls back to a
|
|
124
|
+
* numeric suffix. Only plain OBJECT schemas are hoisted: an inline ARRAY must
|
|
125
|
+
* stay inline so the READ layer still sees `Array<$ref>` and derives the list's
|
|
126
|
+
* element columns ({@link toEndpoints}'s `resolveBody`), and primitives gain
|
|
127
|
+
* nothing. Swagger 2.0 inputs are skipped — they have no `components` section
|
|
128
|
+
* for the refs to land in (the upgrade builds it later). Mutates `raw` in place.
|
|
129
|
+
*/
|
|
130
|
+
function promoteInlineBodies(raw) {
|
|
131
|
+
var _a, _b, _c, _d, _e, _f;
|
|
132
|
+
var _g;
|
|
133
|
+
if (typeof raw !== "object" || raw === null)
|
|
134
|
+
return;
|
|
135
|
+
const doc = raw;
|
|
136
|
+
if (typeof doc.openapi !== "string" || doc.paths === undefined)
|
|
137
|
+
return;
|
|
138
|
+
(_a = doc.components) !== null && _a !== void 0 ? _a : (doc.components = {});
|
|
139
|
+
(_b = (_g = doc.components).schemas) !== null && _b !== void 0 ? _b : (_g.schemas = {});
|
|
140
|
+
const table = doc.components.schemas;
|
|
141
|
+
const pascal = (s) => s
|
|
142
|
+
.replace(/[{}]/g, "")
|
|
143
|
+
.split(/[^A-Za-z0-9]+/)
|
|
144
|
+
.filter(Boolean)
|
|
145
|
+
.map((w) => w[0].toUpperCase() + w.slice(1))
|
|
146
|
+
.join("");
|
|
147
|
+
const claim = (base) => {
|
|
148
|
+
let name = base;
|
|
149
|
+
for (let i = 2; table[name] !== undefined; i++)
|
|
150
|
+
name = `${base}${i}`;
|
|
151
|
+
return name;
|
|
152
|
+
};
|
|
153
|
+
const isInlineObject = (schema) => {
|
|
154
|
+
var _a;
|
|
155
|
+
return typeof schema === "object" &&
|
|
156
|
+
schema !== null &&
|
|
157
|
+
schema.$ref === undefined &&
|
|
158
|
+
(schema.type === "object" ||
|
|
159
|
+
typeof schema.properties === "object") &&
|
|
160
|
+
Object.keys(((_a = schema.properties) !== null && _a !== void 0 ? _a : {})).length > 0;
|
|
161
|
+
};
|
|
162
|
+
const hoist = (holder, baseName) => {
|
|
163
|
+
const h = holder;
|
|
164
|
+
if (h === undefined || !isInlineObject(h.schema))
|
|
165
|
+
return;
|
|
166
|
+
const name = claim(baseName);
|
|
167
|
+
table[name] = h.schema;
|
|
168
|
+
h.schema = { $ref: `#/components/schemas/${name}` };
|
|
169
|
+
};
|
|
170
|
+
for (const [path, item] of Object.entries(doc.paths)) {
|
|
171
|
+
if (typeof item !== "object" || item === null)
|
|
172
|
+
continue;
|
|
173
|
+
const pathName = path.split("/").filter(Boolean).map(pascal).join("");
|
|
174
|
+
for (const method of ["get", "post", "put", "patch", "delete", "head"]) {
|
|
175
|
+
const op = item[method];
|
|
176
|
+
if (op === undefined || typeof op !== "object")
|
|
177
|
+
continue;
|
|
178
|
+
const opName = `Api${pathName}${pascal(method)}`;
|
|
179
|
+
hoist((_d = (_c = op.requestBody) === null || _c === void 0 ? void 0 : _c.content) === null || _d === void 0 ? void 0 : _d["application/json"], `${opName}Body`);
|
|
180
|
+
for (const [status, response] of Object.entries((_e = op.responses) !== null && _e !== void 0 ? _e : {})) {
|
|
181
|
+
if (typeof response !== "object" || response === null)
|
|
182
|
+
continue;
|
|
183
|
+
hoist((_f = response.content) === null || _f === void 0 ? void 0 : _f["application/json"], `${opName}${pascal(status)}Response`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Strip `allOf` members that are an unresolvable JSON-Pointer `$ref` INTO another
|
|
190
|
+
* operation's inline schema (`#/paths/~1v2~1account~1keys/.../allOf/1`) — the way
|
|
191
|
+
* DigitalOcean DRYs up shared pagination/meta wrappers. `upgradeDocument` cannot
|
|
192
|
+
* chase a `#/paths/...` pointer, and when one sits alongside the real data member
|
|
193
|
+
* (`allOf: [{ properties: { droplets } }, <links-ref>, <meta-ref>]`) it discards
|
|
194
|
+
* the WHOLE `allOf` — so the list response comes out an empty schema, its table
|
|
195
|
+
* renders no columns, and its id producer is lost. Drop only the path-pointer
|
|
196
|
+
* members (pagination noise, not domain data); when a single data member with
|
|
197
|
+
* `properties` remains, hoist it to a plain object so the upgrade keeps it.
|
|
198
|
+
* Document-wide, depth-guarded, mutates in place.
|
|
199
|
+
*/
|
|
200
|
+
function stripPathRefAllOf(node, depth) {
|
|
201
|
+
if (node === null || typeof node !== "object" || depth > 64)
|
|
202
|
+
return;
|
|
203
|
+
if (Array.isArray(node)) {
|
|
204
|
+
for (const v of node)
|
|
205
|
+
stripPathRefAllOf(v, depth + 1);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const obj = node;
|
|
209
|
+
if (Array.isArray(obj.allOf)) {
|
|
210
|
+
const kept = obj.allOf.filter((m) => !(m !== null &&
|
|
211
|
+
typeof m === "object" &&
|
|
212
|
+
typeof m.$ref === "string" &&
|
|
213
|
+
(m.$ref).startsWith("#/paths/")));
|
|
214
|
+
if (kept.length !== obj.allOf.length) {
|
|
215
|
+
const only = kept[0];
|
|
216
|
+
if (kept.length === 1 && (only === null || only === void 0 ? void 0 : only.properties) !== undefined && only.$ref === undefined) {
|
|
217
|
+
obj.type = "object";
|
|
218
|
+
obj.properties = Object.assign(Object.assign({}, obj.properties), only.properties);
|
|
219
|
+
if (only.required !== undefined)
|
|
220
|
+
obj.required = only.required;
|
|
221
|
+
delete obj.allOf;
|
|
222
|
+
}
|
|
223
|
+
else if (kept.length === 0) {
|
|
224
|
+
delete obj.allOf;
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
obj.allOf = kept;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
for (const v of Object.values(obj))
|
|
232
|
+
stripPathRefAllOf(v, depth + 1);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Flatten `allOf` composition into plain `properties` BEFORE upgrading —
|
|
236
|
+
* document-wide, not just component schemas. Two real-world failure shapes:
|
|
237
|
+
*
|
|
238
|
+
* - `OpenApiConverter.upgradeDocument` drops `allOf` for some component shapes
|
|
239
|
+
* (Box's `CollaborationAllowlistEntries = allOf[Pagination, { entries }]`
|
|
240
|
+
* comes out an empty object), so the type would render zero fields.
|
|
241
|
+
* - An `allOf` INLINE in an operation response (DigitalOcean's
|
|
242
|
+
* `GET /v2/droplets` → `allOf:[{properties:{droplets}}, {$ref:Pagination}]`)
|
|
243
|
+
* defeats nestia's type emitter: the route's SDK function comes out
|
|
244
|
+
* `Response = any`, `typia.random<any>()` yields nothing, and every
|
|
245
|
+
* simulate-mode screen for that resource renders empty forever — silently
|
|
246
|
+
* (38 of DigitalOcean's 148 SDK files before this pass).
|
|
247
|
+
*
|
|
248
|
+
* Merge each member's properties (resolving `$ref` members recursively,
|
|
249
|
+
* depth-guarded) into the schema's own `properties` and remove the `allOf`, so
|
|
250
|
+
* the composed fields survive both the upgrade and SDK generation. Component
|
|
251
|
+
* schemas are flattened first (so `$ref` members resolve to already-flat
|
|
252
|
+
* shapes), then every remaining `allOf` anywhere in the document. Mutates `raw`
|
|
253
|
+
* in place.
|
|
254
|
+
*/
|
|
255
|
+
function flattenAllOf(raw) {
|
|
256
|
+
var _a;
|
|
257
|
+
if (typeof raw !== "object" || raw === null)
|
|
258
|
+
return;
|
|
259
|
+
const schemas = (_a = raw.components) === null || _a === void 0 ? void 0 : _a.schemas;
|
|
260
|
+
const table = (typeof schemas === "object" && schemas !== null
|
|
261
|
+
? schemas
|
|
262
|
+
: {});
|
|
263
|
+
const merge = (schema, depth, seen) => {
|
|
264
|
+
if (depth > 8 || typeof schema !== "object" || schema === null) {
|
|
265
|
+
return { properties: {}, required: [] };
|
|
266
|
+
}
|
|
267
|
+
const node = schema;
|
|
268
|
+
if (typeof node.$ref === "string") {
|
|
269
|
+
const name = node.$ref.split("/").pop();
|
|
270
|
+
if (seen.has(name) || table[name] === undefined) {
|
|
271
|
+
return { properties: {}, required: [] };
|
|
272
|
+
}
|
|
273
|
+
return merge(table[name], depth + 1, new Set([...seen, name]));
|
|
274
|
+
}
|
|
275
|
+
let properties = {};
|
|
276
|
+
let required = [];
|
|
277
|
+
if (Array.isArray(node.allOf)) {
|
|
278
|
+
for (const member of node.allOf) {
|
|
279
|
+
const sub = merge(member, depth + 1, seen);
|
|
280
|
+
properties = Object.assign(Object.assign({}, properties), sub.properties);
|
|
281
|
+
required = [...required, ...sub.required];
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
if (typeof node.properties === "object" && node.properties !== null) {
|
|
285
|
+
properties = Object.assign(Object.assign({}, properties), node.properties);
|
|
286
|
+
}
|
|
287
|
+
if (Array.isArray(node.required))
|
|
288
|
+
required = [...required, ...node.required];
|
|
289
|
+
return { properties, required: [...new Set(required)] };
|
|
290
|
+
};
|
|
291
|
+
const flattenInPlace = (schema, seen) => {
|
|
292
|
+
const merged = merge(schema, 0, seen);
|
|
293
|
+
if (Object.keys(merged.properties).length > 0) {
|
|
294
|
+
schema.properties = merged.properties;
|
|
295
|
+
schema.required = merged.required;
|
|
296
|
+
schema.type = "object";
|
|
297
|
+
delete schema.allOf;
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
// Pass 1 — component schemas, so a `$ref` member met later resolves flat.
|
|
301
|
+
for (const name of Object.keys(table)) {
|
|
302
|
+
const schema = table[name];
|
|
303
|
+
if (schema === undefined || !Array.isArray(schema.allOf))
|
|
304
|
+
continue;
|
|
305
|
+
flattenInPlace(schema, new Set([name]));
|
|
306
|
+
}
|
|
307
|
+
// Pass 2 — every remaining `allOf` anywhere in the document (inline response
|
|
308
|
+
// and request schemas, nested properties, array items …).
|
|
309
|
+
const walk = (node, depth) => {
|
|
310
|
+
if (depth > 64 || typeof node !== "object" || node === null)
|
|
311
|
+
return;
|
|
312
|
+
if (Array.isArray(node)) {
|
|
313
|
+
for (const v of node)
|
|
314
|
+
walk(v, depth + 1);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
const obj = node;
|
|
318
|
+
// Children first, so a nested allOf is flat before its parent merges it.
|
|
319
|
+
for (const v of Object.values(obj))
|
|
320
|
+
walk(v, depth + 1);
|
|
321
|
+
if (Array.isArray(obj.allOf))
|
|
322
|
+
flattenInPlace(obj, new Set());
|
|
323
|
+
};
|
|
324
|
+
walk(raw, 0);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Remove path keys a typed SDK cannot be generated from:
|
|
328
|
+
*
|
|
329
|
+
* 1. `#` fragments some swaggers (Box) use to disambiguate overloaded paths
|
|
330
|
+
* (`/shared_items#folders`) — nestia turns the `#` into an illegal JS
|
|
331
|
+
* accessor segment, and the generated SDK file fails to parse.
|
|
332
|
+
* 2. A path-template parameter whose NAME is not a valid identifier
|
|
333
|
+
* (`/teams/{enterprise-team}/...`, GitHub). nestia derives the SDK accessor
|
|
334
|
+
* from the param name and crashes (`Cannot read properties of undefined`)
|
|
335
|
+
* when the hyphenated name does not round-trip — taking the WHOLE generation
|
|
336
|
+
* down, not just that route.
|
|
337
|
+
*
|
|
338
|
+
* Dropping the handful of offending paths up front lets the rest of a large real
|
|
339
|
+
* swagger (GitHub's 1190 operations) generate. Mutates `raw` in place.
|
|
340
|
+
*/
|
|
341
|
+
function dropUnroutablePaths(raw) {
|
|
342
|
+
if (typeof raw !== "object" || raw === null)
|
|
343
|
+
return;
|
|
344
|
+
const paths = raw.paths;
|
|
345
|
+
if (typeof paths !== "object" || paths === null)
|
|
346
|
+
return;
|
|
347
|
+
// Standard URL path characters only — letters, digits, `_-./`, and `{param}`.
|
|
348
|
+
const SAFE = /^[A-Za-z0-9_\-./{}]+$/;
|
|
349
|
+
// A `{param}` template name must be a valid JS identifier (no hyphens).
|
|
350
|
+
const IDENT_PARAM = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
|
|
351
|
+
for (const key of Object.keys(paths)) {
|
|
352
|
+
const paramNames = [...key.matchAll(/\{([^}]+)\}/g)].map((m) => m[1]);
|
|
353
|
+
if (!SAFE.test(key) || paramNames.some((p) => !IDENT_PARAM.test(p))) {
|
|
354
|
+
delete paths[key];
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Resolve `$ref` parameters before upgrading. Real-world swaggers (DigitalOcean,
|
|
360
|
+
* Box, …) DRY up shared query/path parameters with a `$ref` — sometimes a
|
|
361
|
+
* standard `#/components/parameters/X`, sometimes a raw JSON Pointer into another
|
|
362
|
+
* operation (`#/paths/~1v2~1account~1keys/get/parameters/0`). `upgradeDocument`
|
|
363
|
+
* does not chase those pointers; it leaves the slot `null`, which then crashes
|
|
364
|
+
* `HttpMigration` with "Cannot read properties of undefined (reading 'in')".
|
|
365
|
+
*
|
|
366
|
+
* Walk every operation's (and path item's) `parameters`, dereference each `$ref`
|
|
367
|
+
* by generic JSON Pointer against the raw document — transitively, with a depth
|
|
368
|
+
* guard — and drop anything that does not resolve to a real `{ in, name }`
|
|
369
|
+
* parameter. Mutates the freshly-parsed payload in place (we own it; cloning a
|
|
370
|
+
* multi-MB document would be wasteful).
|
|
371
|
+
*/
|
|
372
|
+
function resolveParameterRefs(raw) {
|
|
373
|
+
if (typeof raw !== "object" || raw === null)
|
|
374
|
+
return raw;
|
|
375
|
+
const doc = raw;
|
|
376
|
+
const paths = doc.paths;
|
|
377
|
+
if (typeof paths !== "object" || paths === null)
|
|
378
|
+
return raw;
|
|
379
|
+
const resolve = (node, depth) => {
|
|
380
|
+
if (depth > 16 || node === null || typeof node !== "object")
|
|
381
|
+
return undefined;
|
|
382
|
+
const ref = node.$ref;
|
|
383
|
+
if (typeof ref === "string")
|
|
384
|
+
return resolve(jsonPointer(doc, ref), depth + 1);
|
|
385
|
+
return "in" in node ? node : undefined;
|
|
386
|
+
};
|
|
387
|
+
const clean = (list) => {
|
|
388
|
+
if (!Array.isArray(list))
|
|
389
|
+
return undefined;
|
|
390
|
+
return list.map((p) => resolve(p, 0)).filter((p) => p !== undefined);
|
|
391
|
+
};
|
|
392
|
+
const METHODS = ["get", "post", "put", "patch", "delete", "options", "head"];
|
|
393
|
+
for (const key of Object.keys(paths)) {
|
|
394
|
+
const item = paths[key];
|
|
395
|
+
if (typeof item !== "object" || item === null)
|
|
396
|
+
continue;
|
|
397
|
+
const pathItem = item;
|
|
398
|
+
const shared = clean(pathItem.parameters);
|
|
399
|
+
if (shared !== undefined)
|
|
400
|
+
pathItem.parameters = shared;
|
|
401
|
+
for (const method of METHODS) {
|
|
402
|
+
const op = pathItem[method];
|
|
403
|
+
if (typeof op !== "object" || op === null)
|
|
404
|
+
continue;
|
|
405
|
+
const params = clean(op.parameters);
|
|
406
|
+
if (params !== undefined) {
|
|
407
|
+
op.parameters = params;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return raw;
|
|
412
|
+
}
|
|
413
|
+
/** Resolve a `#/...` JSON Pointer against a document. Returns `undefined` on miss. */
|
|
414
|
+
function jsonPointer(doc, pointer) {
|
|
415
|
+
if (!pointer.startsWith("#/"))
|
|
416
|
+
return undefined;
|
|
417
|
+
let current = doc;
|
|
418
|
+
for (const rawPart of pointer.slice(2).split("/")) {
|
|
419
|
+
const part = rawPart.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
420
|
+
if (current === null || typeof current !== "object")
|
|
421
|
+
return undefined;
|
|
422
|
+
current = current[part];
|
|
423
|
+
}
|
|
424
|
+
return current;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* File-path convenience: read `path` as UTF-8 JSON, parse, and run it through
|
|
428
|
+
* {@link fromSwagger}. Rejects with a helpful error message when the file is
|
|
429
|
+
* missing or not valid JSON.
|
|
430
|
+
*/
|
|
431
|
+
function fromSwaggerFile(path) {
|
|
432
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
433
|
+
let raw;
|
|
434
|
+
try {
|
|
435
|
+
raw = yield promises_1.default.readFile(path, "utf-8");
|
|
436
|
+
}
|
|
437
|
+
catch (err) {
|
|
438
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
439
|
+
throw new Error(`Failed to read swagger file at "${path}": ${message}`);
|
|
440
|
+
}
|
|
441
|
+
let parsed;
|
|
442
|
+
try {
|
|
443
|
+
parsed = JSON.parse(raw);
|
|
444
|
+
}
|
|
445
|
+
catch (err) {
|
|
446
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
447
|
+
throw new Error(`Swagger file at "${path}" is not valid JSON: ${message}`);
|
|
448
|
+
}
|
|
449
|
+
return fromSwagger(parsed);
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Pull the first non-empty `servers[].url` out of a raw OpenAPI payload, or
|
|
454
|
+
* `null` when none is present.
|
|
455
|
+
*
|
|
456
|
+
* `OpenApi.IDocument` (the shape AutoView's orchestrators consume) does
|
|
457
|
+
* not carry the OpenAPI `servers[]` field — it is dropped by
|
|
458
|
+
* `invertOpenApiDocument` because the AutoBE backend phases do not need it. The
|
|
459
|
+
* standalone CLI does need it, though: it is the difference between the
|
|
460
|
+
* generated frontend booting with `simulate: false` against the user's real
|
|
461
|
+
* backend (real data on first open) and the simulator default (typia-random
|
|
462
|
+
* gibberish). Read it directly off the raw swagger here so the CLI can pass the
|
|
463
|
+
* host into {@link AutoViewAgent} without parsing the swagger twice.
|
|
464
|
+
*
|
|
465
|
+
* Returns `null` when:
|
|
466
|
+
*
|
|
467
|
+
* - The payload is not an object, or
|
|
468
|
+
* - `servers` is missing / empty / not an array, or
|
|
469
|
+
* - No `servers[i].url` is a non-empty string.
|
|
470
|
+
*/
|
|
471
|
+
function extractBackendFromSwagger(payload) {
|
|
472
|
+
if (typeof payload !== "object" || payload === null)
|
|
473
|
+
return null;
|
|
474
|
+
const servers = payload.servers;
|
|
475
|
+
if (!Array.isArray(servers))
|
|
476
|
+
return null;
|
|
477
|
+
for (const server of servers) {
|
|
478
|
+
if (typeof server !== "object" || server === null)
|
|
479
|
+
continue;
|
|
480
|
+
const url = server.url;
|
|
481
|
+
if (typeof url === "string" && url.length > 0) {
|
|
482
|
+
return { host: url };
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
return null;
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* File-path convenience for {@link extractBackendFromSwagger}: read `path` as
|
|
489
|
+
* UTF-8 JSON, parse, and run it through the extractor. Returns `null` on read
|
|
490
|
+
* or parse failure rather than throwing — the caller usually has a `--backend
|
|
491
|
+
* <url>` flag and a simulator fallback to lean on, and a missing file would
|
|
492
|
+
* already have failed louder via {@link fromSwaggerFile}.
|
|
493
|
+
*/
|
|
494
|
+
function extractBackendFromSwaggerFile(path) {
|
|
495
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
496
|
+
let raw;
|
|
497
|
+
try {
|
|
498
|
+
raw = yield promises_1.default.readFile(path, "utf-8");
|
|
499
|
+
}
|
|
500
|
+
catch (_a) {
|
|
501
|
+
return null;
|
|
502
|
+
}
|
|
503
|
+
let parsed;
|
|
504
|
+
try {
|
|
505
|
+
parsed = JSON.parse(raw);
|
|
506
|
+
}
|
|
507
|
+
catch (_b) {
|
|
508
|
+
return null;
|
|
509
|
+
}
|
|
510
|
+
return extractBackendFromSwagger(parsed);
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
//# sourceMappingURL=fromSwagger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fromSwagger.js","sourceRoot":"","sources":["../src/fromSwagger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { OpenApi } from "@typia/interface";
|
|
2
|
+
import { IEndpointFilter } from "./utils/endpointFilter";
|
|
3
|
+
/**
|
|
4
|
+
* Generate the frontend with NO LLM and NO API key — the whole READ → MAP →
|
|
5
|
+
* RENDER pipeline is deterministic, so for the common case (a clean swagger that
|
|
6
|
+
* compiles) you do not need a model at all. This is the path the `--no-llm` CLI
|
|
7
|
+
* flag and any programmatic caller take.
|
|
8
|
+
*
|
|
9
|
+
* It runs exactly the deterministic phases of {@link orchestrateAutoView}:
|
|
10
|
+
*
|
|
11
|
+
* 1. slice the document to `include`/`exclude` (so a large ERP spec still fits),
|
|
12
|
+
* 2. derive the SDK map + product plan structurally,
|
|
13
|
+
* 3. scaffold the project + render every page deterministically.
|
|
14
|
+
*
|
|
15
|
+
* It deliberately skips the LLM phases the full agent runs — the typecheck-
|
|
16
|
+
* recovery rerender, the runtime audit, the UI review. The render is already
|
|
17
|
+
* typecheck-clean on real swaggers; without a key those polish passes simply do
|
|
18
|
+
* not run. Returns the flat `path → content` project map.
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateDeterministic(rawDocument: OpenApi.IDocument, options: {
|
|
21
|
+
backend: {
|
|
22
|
+
host: string | null;
|
|
23
|
+
};
|
|
24
|
+
filter?: IEndpointFilter;
|
|
25
|
+
semaphore?: number;
|
|
26
|
+
}): Promise<Record<string, string>>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.generateDeterministic = generateDeterministic;
|
|
13
|
+
const AutoViewInterfaceCompiler_1 = require("./compiler/AutoViewInterfaceCompiler");
|
|
14
|
+
const orchestrateAutoViewRenderDeterministic_1 = require("./orchestrate/orchestrateAutoViewRenderDeterministic");
|
|
15
|
+
const orchestrateAutoViewScaffold_1 = require("./orchestrate/orchestrateAutoViewScaffold");
|
|
16
|
+
const buildDeterministicPlan_1 = require("./orchestrate/utils/buildDeterministicPlan");
|
|
17
|
+
const buildDeterministicSdkMap_1 = require("./orchestrate/utils/buildDeterministicSdkMap");
|
|
18
|
+
const normalizeProductPlanPaths_1 = require("./orchestrate/utils/normalizeProductPlanPaths");
|
|
19
|
+
const sliceDocument_1 = require("./utils/sliceDocument");
|
|
20
|
+
/**
|
|
21
|
+
* Generate the frontend with NO LLM and NO API key — the whole READ → MAP →
|
|
22
|
+
* RENDER pipeline is deterministic, so for the common case (a clean swagger that
|
|
23
|
+
* compiles) you do not need a model at all. This is the path the `--no-llm` CLI
|
|
24
|
+
* flag and any programmatic caller take.
|
|
25
|
+
*
|
|
26
|
+
* It runs exactly the deterministic phases of {@link orchestrateAutoView}:
|
|
27
|
+
*
|
|
28
|
+
* 1. slice the document to `include`/`exclude` (so a large ERP spec still fits),
|
|
29
|
+
* 2. derive the SDK map + product plan structurally,
|
|
30
|
+
* 3. scaffold the project + render every page deterministically.
|
|
31
|
+
*
|
|
32
|
+
* It deliberately skips the LLM phases the full agent runs — the typecheck-
|
|
33
|
+
* recovery rerender, the runtime audit, the UI review. The render is already
|
|
34
|
+
* typecheck-clean on real swaggers; without a key those polish passes simply do
|
|
35
|
+
* not run. Returns the flat `path → content` project map.
|
|
36
|
+
*/
|
|
37
|
+
function generateDeterministic(rawDocument, options) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
var _a, _b, _c, _d, _e;
|
|
40
|
+
const document = (0, sliceDocument_1.sliceDocument)(rawDocument, (_a = options.filter) !== null && _a !== void 0 ? _a : {});
|
|
41
|
+
const sdkMap = (0, buildDeterministicSdkMap_1.buildDeterministicSdkMap)(document);
|
|
42
|
+
const actor = (_c = (_b = sdkMap.actors[0]) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : "user";
|
|
43
|
+
const productPlan = (0, normalizeProductPlanPaths_1.normalizeProductPlanPaths)((0, buildDeterministicPlan_1.buildDeterministicPlan)(document, actor, (_d = options.filter) !== null && _d !== void 0 ? _d : {}));
|
|
44
|
+
// A minimal context: the deterministic phases need only the interface compiler
|
|
45
|
+
// and a semaphore. `conversate` must never be reached on this path — if it is,
|
|
46
|
+
// that is a bug (an LLM call leaked into the deterministic pipeline).
|
|
47
|
+
const compiler = { interface: new AutoViewInterfaceCompiler_1.AutoViewInterfaceCompiler() };
|
|
48
|
+
const ctx = {
|
|
49
|
+
state: () => ({ interface: { document, step: 0 } }),
|
|
50
|
+
compiler: () => __awaiter(this, void 0, void 0, function* () { return compiler; }),
|
|
51
|
+
vendor: { semaphore: (_e = options.semaphore) !== null && _e !== void 0 ? _e : 8 },
|
|
52
|
+
dispatch: () => undefined,
|
|
53
|
+
conversate: () => __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
throw new Error("generateDeterministic reached an LLM call — the deterministic path must not.");
|
|
55
|
+
}),
|
|
56
|
+
// biome-ignore lint: a structural stub of IAutoViewAgentContext's deterministic surface
|
|
57
|
+
};
|
|
58
|
+
const scaffolded = yield (0, orchestrateAutoViewScaffold_1.orchestrateAutoViewScaffold)(ctx, {
|
|
59
|
+
document,
|
|
60
|
+
sdkMap,
|
|
61
|
+
sdkMapMarkdown: "# SDK Map\n\n_(deterministic)_\n",
|
|
62
|
+
productPlan,
|
|
63
|
+
productPlanMarkdown: "# Product Plan\n\n_(deterministic)_\n",
|
|
64
|
+
step: 0,
|
|
65
|
+
backend: options.backend,
|
|
66
|
+
});
|
|
67
|
+
const render = yield (0, orchestrateAutoViewRenderDeterministic_1.orchestrateAutoViewRenderDeterministic)(ctx, {
|
|
68
|
+
document,
|
|
69
|
+
productPlan,
|
|
70
|
+
step: 0,
|
|
71
|
+
});
|
|
72
|
+
return Object.assign(Object.assign({}, scaffolded), render.files);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=generateDeterministic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateDeterministic.js","sourceRoot":"","sources":["../src/generateDeterministic.ts"],"names":[],"mappings":";;;;;;;;;;;AA4BA,sDAgDC;AA1ED,oFAAiF;AACjF,iHAA8G;AAC9G,2FAAwF;AACxF,uFAAoF;AACpF,2FAAwF;AACxF,6FAA0F;AAE1F,yDAAsD;AAEtD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAsB,qBAAqB,CACzC,WAA8B,EAC9B,OAIC;;;QAED,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,WAAW,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,IAAA,mDAAwB,EAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAA,MAAA,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,0CAAE,IAAI,mCAAI,MAAM,CAAC;QAC/C,MAAM,WAAW,GAAG,IAAA,qDAAyB,EAC3C,IAAA,+CAAsB,EAAC,QAAQ,EAAE,KAAK,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC,CAC9D,CAAC;QAEF,+EAA+E;QAC/E,+EAA+E;QAC/E,sEAAsE;QACtE,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,IAAI,qDAAyB,EAAE,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG;YACV,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACnD,QAAQ,EAAE,GAAS,EAAE,gDAAC,OAAA,QAAQ,CAAA,GAAA;YAC9B,MAAM,EAAE,EAAE,SAAS,EAAE,MAAA,OAAO,CAAC,SAAS,mCAAI,CAAC,EAAE;YAC7C,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;YACzB,UAAU,EAAE,GAAS,EAAE;gBACrB,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;YACJ,CAAC,CAAA;YACD,wFAAwF;SAChF,CAAC;QAEX,MAAM,UAAU,GAAG,MAAM,IAAA,yDAA2B,EAAC,GAAG,EAAE;YACxD,QAAQ;YACR,MAAM;YACN,cAAc,EAAE,kCAAkC;YAClD,WAAW;YACX,mBAAmB,EAAE,uCAAuC;YAC5D,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,+EAAsC,EAAC,GAAG,EAAE;YAC/D,QAAQ;YACR,WAAW;YACX,IAAI,EAAE,CAAC;SACR,CAAC,CAAC;QAEH,uCAAY,UAAU,GAAK,MAAM,CAAC,KAAK,EAAG;IAC5C,CAAC;CAAA"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from "./AutoViewAgent";
|
|
2
|
+
export * from "./context/IAutoViewAgentContext";
|
|
3
|
+
export * from "./fromSwagger";
|
|
4
|
+
export * from "./orchestrate/orchestrateAutoView";
|
|
5
|
+
export { AutoViewFrontendTemplate } from "./constants/AutoViewFrontendTemplate";
|
|
6
|
+
export { describeEndpointPropsShape, describeRequestBodyHint, } from "./orchestrate/utils/describeEndpointPropsShape";
|
|
7
|
+
export { describeEndpointRequestBodyShape } from "./orchestrate/utils/describeEndpointRequestBodyShape";
|
|
8
|
+
export { describeEndpointResponseShape } from "./orchestrate/utils/describeEndpointResponseShape";
|
|
9
|
+
export { renderJsonSchema, renderNamedSchema, } from "./orchestrate/utils/renderJsonSchema";
|
|
10
|
+
export { hashFrontendDependencies, validateFrontendTypecheck, } from "./orchestrate/utils/validateFrontendTypecheck";
|
|
11
|
+
export type { ITypecheckDiagnostic, IValidateFrontendTypecheckResult, } from "./orchestrate/utils/validateFrontendTypecheck";
|
|
12
|
+
export { auditFrontendRuntime } from "./orchestrate/utils/auditFrontendRuntime";
|
|
13
|
+
export type { IAuditFrontendRuntimeResult, IRuntimeAuditDiagnostic, } from "./orchestrate/utils/auditFrontendRuntime";
|
|
14
|
+
export { loadShoppingFixture } from "./orchestrate/utils/loadShoppingFixture";
|
|
15
|
+
export type { IShoppingFixture } from "./orchestrate/utils/loadShoppingFixture";
|