diff --git a/src/lib/code-sample/bash.ts b/src/lib/code-sample/bash.ts new file mode 100644 index 0000000..e6640f2 --- /dev/null +++ b/src/lib/code-sample/bash.ts @@ -0,0 +1,18 @@ +import { kebabCase } from 'change-case' + +import { createJsonResponse } from './create-json-response.js' +import type { CodeSampleDefinition, Context } from './schema.js' + +export const createBashRequest = ( + { request }: CodeSampleDefinition, + _context: Context, +): string => { + const parts = request.path.split('/') + const requestParams = Object.entries(request.parameters) + .map(([key, value]) => `--${key} "${JSON.stringify(value)}"`) + .join(' ') + + return `seam${parts.map((p) => kebabCase(p)).join(' ')} ${requestParams}` +} + +export const createBashResponse = createJsonResponse diff --git a/src/lib/code-sample/schema.ts b/src/lib/code-sample/schema.ts index a3965a3..c298ee6 100644 --- a/src/lib/code-sample/schema.ts +++ b/src/lib/code-sample/schema.ts @@ -1,6 +1,7 @@ import { z } from 'zod' import type { Endpoint } from 'lib/blueprint.js' +import { createBashRequest, createBashResponse } from 'lib/code-sample/bash.js' import { JsonSchema } from 'lib/json.js' import { @@ -37,7 +38,7 @@ export type CodeSampleDefinition = z.output const CodeSampleSchema = CodeSampleDefinitionSchema.extend({ code: z.record( - z.enum(['javascript', 'python', 'php', 'ruby']), + z.enum(['javascript', 'python', 'php', 'ruby', 'bash']), z.object({ title: z.string().min(1), request: z.string(), @@ -79,6 +80,11 @@ export const createCodeSample = ( request: createPhpRequest(codeSampleDefinition, context), response: createPhpResponse(codeSampleDefinition, context), }, + bash: { + title: 'Bash', + request: createBashRequest(codeSampleDefinition, context), + response: createBashResponse(codeSampleDefinition, context), + }, }, } } diff --git a/test/snapshots/blueprint.test.ts.md b/test/snapshots/blueprint.test.ts.md index 0a3d950..acb6c61 100644 --- a/test/snapshots/blueprint.test.ts.md +++ b/test/snapshots/blueprint.test.ts.md @@ -68,6 +68,11 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + bash: { + request: 'seam foos get --foo_id ""8d7e0b3a-b889-49a7-9164-4b71a0506a33""', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_property":null}', + title: 'Bash', + }, javascript: { request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_property":null}', @@ -137,6 +142,11 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + bash: { + request: 'seam foos get --foo_id ""8d7e0b3a-b889-49a7-9164-4b71a0506a33""', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_property":null}', + title: 'Bash', + }, javascript: { request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_property":null}', @@ -206,6 +216,11 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + bash: { + request: 'seam foos list ', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_property":null}]', + title: 'Bash', + }, javascript: { request: 'await seam.foos.list()', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_property":null}]', @@ -275,6 +290,11 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + bash: { + request: 'seam foos list ', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_property":null}]', + title: 'Bash', + }, javascript: { request: 'await seam.foos.list()', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_property":null}]', diff --git a/test/snapshots/blueprint.test.ts.snap b/test/snapshots/blueprint.test.ts.snap index 14cc07a..a30bf92 100644 Binary files a/test/snapshots/blueprint.test.ts.snap and b/test/snapshots/blueprint.test.ts.snap differ