toolcraft-openapi 0.0.27 → 0.0.33
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/dist/auth/bearer-token-auth.js +1 -1
- package/dist/bin/generate.d.ts +9 -1
- package/dist/bin/generate.js +65 -9
- package/dist/error-codes.d.ts +1 -0
- package/dist/error-codes.js +6 -0
- package/dist/generate.d.ts +20 -3
- package/dist/generate.js +604 -144
- package/dist/http.d.ts +17 -1
- package/dist/http.js +113 -7
- package/dist/index.d.ts +6 -1
- package/dist/index.js +3 -0
- package/dist/inspect-source.d.ts +10 -0
- package/dist/inspect-source.js +14 -0
- package/dist/inspect.d.ts +22 -0
- package/dist/inspect.js +171 -0
- package/dist/interpreter.js +6 -2
- package/dist/mock/fetch.js +28 -12
- package/dist/mock/forgeyard.d.ts +4 -0
- package/dist/mock/forgeyard.js +452 -0
- package/dist/mock.d.ts +1 -0
- package/dist/mock.js +1 -0
- package/dist/naming.d.ts +4 -1
- package/dist/naming.js +93 -7
- package/dist/network-error.js +29 -12
- package/dist/normalize-swagger.d.ts +2 -0
- package/dist/normalize-swagger.js +201 -0
- package/dist/render-inspection.d.ts +2 -0
- package/dist/render-inspection.js +130 -0
- package/dist/request-shape.d.ts +4 -0
- package/dist/request-shape.js +1 -0
- package/dist/runtime.js +7 -1
- package/dist/spec-source.js +7 -4
- package/node_modules/auth-store/dist/create-secret-store.js +6 -1
- package/node_modules/auth-store/dist/encrypted-file-store.d.ts +1 -1
- package/node_modules/auth-store/dist/encrypted-file-store.js +32 -28
- package/node_modules/auth-store/dist/error-codes.d.ts +1 -0
- package/node_modules/auth-store/dist/error-codes.js +5 -0
- package/node_modules/auth-store/dist/keychain-store.js +23 -8
- package/node_modules/toolcraft-design/README.md +148 -0
- package/node_modules/toolcraft-design/dist/components/catalog.d.ts +26 -0
- package/node_modules/toolcraft-design/dist/components/catalog.js +94 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/index.d.ts +2 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/index.js +1 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/components/footer.js +1 -2
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/components/output-pane.js +16 -19
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/components/stats-pane.js +1 -15
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/demo.js +2 -2
- package/node_modules/toolcraft-design/dist/explorer/theme.js +29 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/index.d.ts +7 -1
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/index.js +4 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/internal/theme-detect.d.ts +1 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/internal/theme-detect.js +28 -6
- package/node_modules/toolcraft-design/dist/internal/theme-state.d.ts +12 -0
- package/node_modules/toolcraft-design/dist/internal/theme-state.js +35 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/theme.d.ts +1 -1
- package/node_modules/toolcraft-design/dist/prompts/theme.js +15 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/parser/frontmatter.js +50 -0
- package/node_modules/toolcraft-design/dist/tokens/brand.d.ts +5 -0
- package/node_modules/toolcraft-design/dist/tokens/brand.js +5 -0
- package/node_modules/toolcraft-design/dist/tokens/colors.d.ts +37 -0
- package/node_modules/toolcraft-design/dist/tokens/colors.js +85 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/tokens/index.d.ts +2 -0
- package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/tokens/index.js +1 -0
- package/node_modules/toolcraft-design/package.json +42 -0
- package/package.json +8 -6
- package/node_modules/@poe-code/design-system/dist/explorer/theme.js +0 -97
- package/node_modules/@poe-code/design-system/dist/prompts/theme.js +0 -12
- package/node_modules/@poe-code/design-system/dist/tokens/colors.d.ts +0 -35
- package/node_modules/@poe-code/design-system/dist/tokens/colors.js +0 -34
- package/node_modules/@poe-code/design-system/package.json +0 -29
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/acp/components.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/acp/components.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/acp/index.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/acp/index.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/acp/writer.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/acp/writer.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/browser.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/browser.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/color.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/color.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/command-errors.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/command-errors.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/detail-card.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/detail-card.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/help-formatter-plain.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/help-formatter-plain.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/help-formatter.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/help-formatter.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/logger.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/logger.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/symbols.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/symbols.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/table.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/table.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/template.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/template.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/text.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/components/text.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/ansi.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/ansi.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/buffer.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/buffer.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/components/border.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/components/border.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/components/footer.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/components/output-pane.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/components/stats-pane.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/dashboard.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/dashboard.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/demo.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/demo.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/index.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/index.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/keymap.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/keymap.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/layout.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/layout.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/should-use-dashboard.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/should-use-dashboard.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/snapshot.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/snapshot.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/store.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/store.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/terminal-width.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/terminal-width.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/terminal.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/terminal.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/types.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/dashboard/types.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/actions.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/actions.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/demo.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/events.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/events.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/filter.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/filter.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/index.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/index.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/jobs.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/jobs.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/keymap.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/keymap.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/layout.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/layout.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/reducer.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/reducer.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/detail.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/detail.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/footer.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/footer.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/header.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/header.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/index.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/index.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/list.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/list.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/modal.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/modal.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/test-fixtures.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/test-fixtures.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/text.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/render/text.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/runtime.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/runtime.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/runtime.test-helpers.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/runtime.test-helpers.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/state.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/state.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/explorer/theme.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/internal/color-support.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/internal/color-support.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/internal/output-format.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/internal/output-format.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/internal/strip-ansi.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/internal/strip-ansi.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/index.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/index.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/cancel.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/cancel.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/intro.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/intro.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/log.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/log.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/note.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/note.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/outro.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/outro.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/spinner.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/prompts/primitives/spinner.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/static/index.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/static/index.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/static/menu.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/static/menu.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/static/spinner.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/static/spinner.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/ast.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/ast.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/demo-content.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/demo-content.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/index.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/index.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/parser/block.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/parser/block.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/parser/frontmatter.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/parser/inline.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/parser/inline.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/parser.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/parser.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/renderer.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/renderer.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/testing/theme-render-fixture.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/terminal-markdown/testing/theme-render-fixture.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/tokens/spacing.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/tokens/spacing.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/tokens/typography.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/tokens/typography.js +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/tokens/widths.d.ts +0 -0
- /package/node_modules/{@poe-code/design-system → toolcraft-design}/dist/tokens/widths.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineCommand, defineGroup, S, UserError } from "toolcraft";
|
|
2
|
-
import { isCancel, password } from "
|
|
2
|
+
import { isCancel, password } from "toolcraft-design";
|
|
3
3
|
import { createSecretStore } from "auth-store";
|
|
4
4
|
import { requestJson } from "../http.js";
|
|
5
5
|
const DEFAULT_COMMAND_PREFIX = "auth";
|
package/dist/bin/generate.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { type OutputFormat } from "toolcraft-design";
|
|
2
3
|
interface GenerateCliFileSystem {
|
|
3
4
|
lstat(targetPath: string): Promise<{
|
|
4
5
|
isDirectory(): boolean;
|
|
@@ -9,11 +10,16 @@ interface GenerateCliFileSystem {
|
|
|
9
10
|
}): Promise<unknown>;
|
|
10
11
|
readFile(filePath: string, encoding: BufferEncoding): Promise<string>;
|
|
11
12
|
readdir(directoryPath: string): Promise<string[]>;
|
|
13
|
+
rename(oldPath: string, newPath: string): Promise<unknown>;
|
|
12
14
|
rm(targetPath: string, options?: {
|
|
13
15
|
force?: boolean;
|
|
14
16
|
}): Promise<void>;
|
|
15
17
|
realpath(targetPath: string): Promise<string>;
|
|
16
|
-
|
|
18
|
+
unlink(targetPath: string): Promise<void>;
|
|
19
|
+
writeFile(filePath: string, contents: string, options: BufferEncoding | {
|
|
20
|
+
encoding?: BufferEncoding;
|
|
21
|
+
flag?: string;
|
|
22
|
+
}): Promise<void>;
|
|
17
23
|
}
|
|
18
24
|
interface GenerateCliWriter {
|
|
19
25
|
write(chunk: string | Uint8Array): boolean;
|
|
@@ -28,6 +34,8 @@ interface GenerateCliServices {
|
|
|
28
34
|
interface GenerateCliOptions {
|
|
29
35
|
check: boolean;
|
|
30
36
|
input: string;
|
|
37
|
+
inspect: boolean;
|
|
38
|
+
outputFormat: OutputFormat;
|
|
31
39
|
outputDir: string;
|
|
32
40
|
}
|
|
33
41
|
interface SyncGeneratedClientResult {
|
package/dist/bin/generate.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createHash } from "node:crypto";
|
|
2
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
4
|
import { realpathSync } from "node:fs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { UserError } from "toolcraft";
|
|
8
|
+
import { hasOwnErrorCode } from "../error-codes.js";
|
|
9
|
+
import { withOutputFormat } from "toolcraft-design";
|
|
8
10
|
import { generate } from "../generate.js";
|
|
11
|
+
import { inspectOpenApiSource } from "../inspect-source.js";
|
|
12
|
+
import { renderOpenApiInspection } from "../render-inspection.js";
|
|
9
13
|
import { parseOpenApiDocument, readOpenApiSourceText } from "../spec-source.js";
|
|
10
14
|
const DEFAULT_OPTIONS = {
|
|
11
15
|
check: false,
|
|
12
16
|
input: "openapi.json",
|
|
17
|
+
inspect: false,
|
|
18
|
+
outputFormat: "terminal",
|
|
13
19
|
outputDir: "src/generated"
|
|
14
20
|
};
|
|
15
21
|
const HELP_TEXT = `Usage: toolcraft-openapi-generate [options]
|
|
@@ -18,6 +24,8 @@ Options:
|
|
|
18
24
|
--input <path-or-url> OpenAPI document to read (default: openapi.json)
|
|
19
25
|
--output <dir> Directory for generated command files (default: src/generated)
|
|
20
26
|
--check Exit non-zero if generated output would change
|
|
27
|
+
--inspect Inspect route compatibility without writing files
|
|
28
|
+
--output-format <fmt> Inspection output: terminal, markdown, or json (default: terminal)
|
|
21
29
|
-h, --help Show this help text
|
|
22
30
|
`;
|
|
23
31
|
export async function runGenerateCli(argv = process.argv, services = {
|
|
@@ -33,6 +41,11 @@ export async function runGenerateCli(argv = process.argv, services = {
|
|
|
33
41
|
services.stdout.write(HELP_TEXT);
|
|
34
42
|
return 0;
|
|
35
43
|
}
|
|
44
|
+
if (parsed.inspect) {
|
|
45
|
+
const report = await inspectOpenApiSource(parsed.input, services);
|
|
46
|
+
services.stdout.write(`${withOutputFormat(parsed.outputFormat, () => renderOpenApiInspection(report))}\n`);
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
36
49
|
const result = await syncGeneratedClient(parsed, services);
|
|
37
50
|
if (parsed.check) {
|
|
38
51
|
if (result.drifted) {
|
|
@@ -106,7 +119,11 @@ function parseGenerateCliArgs(argv) {
|
|
|
106
119
|
options.check = true;
|
|
107
120
|
continue;
|
|
108
121
|
}
|
|
109
|
-
if (argument === "--
|
|
122
|
+
if (argument === "--inspect") {
|
|
123
|
+
options.inspect = true;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (argument === "--input" || argument === "--output" || argument === "--output-format") {
|
|
110
127
|
const value = argv[index + 1];
|
|
111
128
|
if (value === undefined) {
|
|
112
129
|
throw new UserError(`Missing value for ${JSON.stringify(argument)}.`);
|
|
@@ -123,6 +140,10 @@ function parseGenerateCliArgs(argv) {
|
|
|
123
140
|
assignOptionValue(options, "--output", argument.slice("--output=".length));
|
|
124
141
|
continue;
|
|
125
142
|
}
|
|
143
|
+
if (argument.startsWith("--output-format=")) {
|
|
144
|
+
assignOptionValue(options, "--output-format", argument.slice("--output-format=".length));
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
126
147
|
throw new UserError(`Unknown argument ${JSON.stringify(argument)}.`);
|
|
127
148
|
}
|
|
128
149
|
return options;
|
|
@@ -135,6 +156,13 @@ function assignOptionValue(options, argument, value) {
|
|
|
135
156
|
options.input = value;
|
|
136
157
|
return;
|
|
137
158
|
}
|
|
159
|
+
if (argument === "--output-format") {
|
|
160
|
+
if (value !== "terminal" && value !== "markdown" && value !== "json") {
|
|
161
|
+
throw new UserError(`Invalid value ${JSON.stringify(value)} for "--output-format". Expected terminal, markdown, or json.`);
|
|
162
|
+
}
|
|
163
|
+
options.outputFormat = value;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
138
166
|
options.outputDir = value;
|
|
139
167
|
}
|
|
140
168
|
function createSpecSha(sourceText) {
|
|
@@ -221,7 +249,7 @@ async function writeGeneratedFiles(fs, outputDir, filesToWrite) {
|
|
|
221
249
|
for (const file of filesToWrite) {
|
|
222
250
|
await fs.mkdir(path.dirname(file.path), { recursive: true });
|
|
223
251
|
await assertSafeOutputPath(fs, outputDir, file.path);
|
|
224
|
-
await fs
|
|
252
|
+
await atomicWriteGeneratedFile(fs, outputDir, file.path, file.contents);
|
|
225
253
|
}
|
|
226
254
|
}
|
|
227
255
|
async function assertSafeOutputPath(fs, outputDir, filePath) {
|
|
@@ -234,6 +262,34 @@ async function assertSafeOutputPath(fs, outputDir, filePath) {
|
|
|
234
262
|
canonicalOutputDir !== path.resolve(outputDir)) {
|
|
235
263
|
throw new Error("Generated output must remain inside the output directory.");
|
|
236
264
|
}
|
|
265
|
+
try {
|
|
266
|
+
if ((await fs.lstat(filePath)).isSymbolicLink()) {
|
|
267
|
+
throw new Error("Generated output must remain inside the output directory.");
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
if (!isNotFoundError(error)) {
|
|
272
|
+
throw error;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
async function atomicWriteGeneratedFile(fs, outputDir, filePath, contents) {
|
|
277
|
+
const tempPath = path.join(path.dirname(filePath), `.${path.basename(filePath)}.${randomUUID()}.tmp`);
|
|
278
|
+
let tempCreated = false;
|
|
279
|
+
try {
|
|
280
|
+
await assertSafeOutputPath(fs, outputDir, tempPath);
|
|
281
|
+
await fs.writeFile(tempPath, contents, { encoding: "utf8", flag: "wx" });
|
|
282
|
+
tempCreated = true;
|
|
283
|
+
await assertSafeOutputPath(fs, outputDir, filePath);
|
|
284
|
+
await fs.rename(tempPath, filePath);
|
|
285
|
+
tempCreated = false;
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
if (tempCreated || !isAlreadyExistsError(error)) {
|
|
289
|
+
await fs.unlink(tempPath).catch(() => undefined);
|
|
290
|
+
}
|
|
291
|
+
throw error;
|
|
292
|
+
}
|
|
237
293
|
}
|
|
238
294
|
async function deleteGeneratedFiles(fs, outputDir, filePaths) {
|
|
239
295
|
for (const filePath of filePaths) {
|
|
@@ -251,7 +307,7 @@ async function restoreGeneratedFiles(fs, outputDir, currentFiles, updatedFiles,
|
|
|
251
307
|
}
|
|
252
308
|
await fs.mkdir(path.dirname(file.path), { recursive: true });
|
|
253
309
|
await assertSafeOutputPath(fs, outputDir, file.path);
|
|
254
|
-
await fs
|
|
310
|
+
await atomicWriteGeneratedFile(fs, outputDir, file.path, previousContents);
|
|
255
311
|
}
|
|
256
312
|
for (const filePath of deletedFiles) {
|
|
257
313
|
const previousContents = currentFiles.get(filePath);
|
|
@@ -260,14 +316,14 @@ async function restoreGeneratedFiles(fs, outputDir, currentFiles, updatedFiles,
|
|
|
260
316
|
}
|
|
261
317
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
262
318
|
await assertSafeOutputPath(fs, outputDir, filePath);
|
|
263
|
-
await fs
|
|
319
|
+
await atomicWriteGeneratedFile(fs, outputDir, filePath, previousContents);
|
|
264
320
|
}
|
|
265
321
|
}
|
|
266
322
|
function isNotFoundError(error) {
|
|
267
|
-
return (
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
323
|
+
return hasOwnErrorCode(error, "ENOENT");
|
|
324
|
+
}
|
|
325
|
+
function isAlreadyExistsError(error) {
|
|
326
|
+
return hasOwnErrorCode(error, "EEXIST");
|
|
271
327
|
}
|
|
272
328
|
function isDirectExecution(moduleUrl, argv) {
|
|
273
329
|
const entryPoint = argv[1];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function hasOwnErrorCode(error: unknown, code: string): error is NodeJS.ErrnoException;
|
package/dist/generate.d.ts
CHANGED
|
@@ -58,6 +58,10 @@ export interface OpenApiResponseObject {
|
|
|
58
58
|
}
|
|
59
59
|
export interface OpenApiMediaTypeObject {
|
|
60
60
|
schema?: OpenApiSchemaObject | OpenApiReferenceObject;
|
|
61
|
+
example?: unknown;
|
|
62
|
+
examples?: Record<string, {
|
|
63
|
+
value?: unknown;
|
|
64
|
+
} | undefined>;
|
|
61
65
|
}
|
|
62
66
|
export interface OpenApiSchemaObject {
|
|
63
67
|
type?: OpenApiJsonSchemaType | readonly OpenApiJsonSchemaType[];
|
|
@@ -93,6 +97,7 @@ interface OpenApiServerObject {
|
|
|
93
97
|
type OpenApiSecurityRequirementObject = Record<string, string[]>;
|
|
94
98
|
export interface GenerateOptions {
|
|
95
99
|
specSha: string;
|
|
100
|
+
brand?: string;
|
|
96
101
|
}
|
|
97
102
|
export interface GeneratedFile {
|
|
98
103
|
path: string;
|
|
@@ -108,6 +113,12 @@ export interface GeneratedCommand {
|
|
|
108
113
|
method: string;
|
|
109
114
|
path: string;
|
|
110
115
|
auth: "required" | "none";
|
|
116
|
+
responseMode: "json" | "text" | "binary";
|
|
117
|
+
accept: string;
|
|
118
|
+
baseUrl?: string;
|
|
119
|
+
bodyMode?: "json" | "form" | "raw" | "base64" | "multipart";
|
|
120
|
+
contentType?: string;
|
|
121
|
+
multipartBinaryFields?: readonly string[];
|
|
111
122
|
confirm: boolean;
|
|
112
123
|
params: GeneratedParam[];
|
|
113
124
|
paramsSchemaOptions?: GeneratedObjectSchemaOptions;
|
|
@@ -119,7 +130,7 @@ export interface GeneratedCommand {
|
|
|
119
130
|
export interface GeneratedParam {
|
|
120
131
|
paramName: string;
|
|
121
132
|
sourceName: string;
|
|
122
|
-
location: "path" | "query" | "body" | "transport";
|
|
133
|
+
location: "path" | "query" | "header" | "body" | "transport";
|
|
123
134
|
description?: string;
|
|
124
135
|
shortFlag?: string;
|
|
125
136
|
scope?: readonly [GeneratedParamScope, ...GeneratedParamScope[]];
|
|
@@ -152,7 +163,10 @@ interface GeneratedArrayParamDefinition extends GeneratedParamDefinitionMetadata
|
|
|
152
163
|
kind: "array";
|
|
153
164
|
itemDefinition: GeneratedParamDefinition;
|
|
154
165
|
}
|
|
155
|
-
|
|
166
|
+
interface GeneratedJsonParamDefinition extends GeneratedParamDefinitionMetadata {
|
|
167
|
+
kind: "json";
|
|
168
|
+
}
|
|
169
|
+
export type GeneratedParamDefinition = GeneratedScalarParamDefinition | GeneratedEnumParamDefinition | GeneratedArrayParamDefinition | GeneratedJsonParamDefinition;
|
|
156
170
|
type GeneratedParamScope = "cli" | "mcp" | "sdk";
|
|
157
171
|
type GeneratedEnumValue = string | number | boolean;
|
|
158
172
|
export type GeneratedValueReference = {
|
|
@@ -165,6 +179,8 @@ export type GeneratedValueReference = {
|
|
|
165
179
|
export type GeneratedValueExpression = {
|
|
166
180
|
kind: "reference";
|
|
167
181
|
reference: GeneratedValueReference;
|
|
182
|
+
} | {
|
|
183
|
+
kind: "emptyObject";
|
|
168
184
|
} | {
|
|
169
185
|
kind: "queryArray";
|
|
170
186
|
reference: GeneratedValueReference;
|
|
@@ -208,8 +224,9 @@ interface SchemaOptionEntry {
|
|
|
208
224
|
key: string;
|
|
209
225
|
value: unknown;
|
|
210
226
|
}
|
|
211
|
-
type QueryArraySerialization = "repeat" | "comma" | "pipe";
|
|
227
|
+
type QueryArraySerialization = "repeat" | "brackets" | "comma" | "pipe";
|
|
212
228
|
export declare function generate(document: OpenApiDocument, options: GenerateOptions): GeneratedFile[];
|
|
213
229
|
export declare function collectGeneratedCommands(document: OpenApiDocument): GeneratedCommand[];
|
|
230
|
+
export declare function collectGeneratedCommand(document: OpenApiDocument, path: string, method: HttpMethod): GeneratedCommand;
|
|
214
231
|
export declare function collectSchemaOptionEntries(param: RenderSchemaOptionsInput): SchemaOptionEntry[];
|
|
215
232
|
export {};
|