From 06cb8414bf5f8e841420f52c8ead983ef345a929 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 24 Sep 2024 17:30:13 +0200 Subject: [PATCH 01/31] Add Go code samples --- src/lib/code-sample/go.ts | 115 ++++++++++++++++++++++++++++++++++ src/lib/code-sample/schema.ts | 11 +++- 2 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 src/lib/code-sample/go.ts diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts new file mode 100644 index 0000000..ba596b7 --- /dev/null +++ b/src/lib/code-sample/go.ts @@ -0,0 +1,115 @@ +import { pascalCase } from 'change-case' + +import type { Json, NonNullJson } from 'lib/json.js' + +import type { CodeSampleDefinition, Context } from './schema.js' + +export const createGoRequest = ( + { request }: CodeSampleDefinition, + _context: Context, +): string => { + const parts = request.path.split('/') + const params = formatGoArgs(request.parameters ?? {}) + const isReqWithParams = Object.keys(request.parameters).length !== 0 + + return `client.${parts.map((p) => pascalCase(p)).join('.')}(context.Background()${isReqWithParams ? `, api.${pascalCase(parts.join('_'))}Request(${params})` : ''})` +} + +const formatGoArgs = (jsonParams: NonNullJson): string => + Object.entries(jsonParams) + .map(([paramKey, paramValue]) => { + const formattedValue = formatGoValue(paramValue) + return `${pascalCase(paramKey)}: ${formattedValue}` + }) + .join(', ') + +const formatGoValue = (value: Json): string => { + if (value == null) return 'nil' + if (typeof value === 'string') return `api.String("${value}")` + if (typeof value === 'boolean') return `api.Bool(${value ? 'true' : 'false'})` + if (typeof value === 'number') return `api.Float64(${value})` + if (Array.isArray(value)) { + const formattedItems = value.map(formatGoValue) + return `[]{${formattedItems.join(', ')}}` + } + if (typeof value === 'object') { + const formattedEntries = Object.entries(value) + .map(([key, val]) => `${pascalCase(key)}: ${formatGoValue(val)}`) + .join(', ') + return `interface{}{${formattedEntries}}` + } + throw new Error(`Unsupported type: ${typeof value}`) +} + +export const createGoResponse = ( + { response, title }: CodeSampleDefinition, + context: Context, +): string => { + const { endpoint } = context + + if (endpoint.response.responseType === 'void') return 'nil' + + const { responseKey, resourceType } = endpoint.response + const responseValue = response?.body?.[responseKey] + + if (responseValue == null) { + throw new Error(`Missing ${responseKey} for '${title}'`) + } + + const responseGoStructName = pascalCase(resourceType) + + return Array.isArray(responseValue) + ? formatGoArrayResponse(responseValue, responseGoStructName, title) + : formatGoResponse(responseValue, responseGoStructName) +} + +const formatGoArrayResponse = ( + responseArray: Json[], + responseGoStructName: string, + title: string, +): string => { + const formattedItems = responseArray + .map((v) => { + if (v == null) { + throw new Error(`Null value in response array for '${title}'`) + } + return formatGoResponse(v, responseGoStructName) + }) + .join(', ') + + return `[]${responseGoStructName}{${formattedItems}}` +} + +const formatGoResponse = ( + responseParams: NonNullJson, + responseGoStructName: string, +): string => { + const params = Object.entries(responseParams) + .map( + ([key, value]) => `${pascalCase(key)}: ${formatGoResponseValue(value)}`, + ) + .join(', ') + return `${responseGoStructName}{${params}}` +} + +const formatGoResponseValue = (value: Json): any => { + if (value == null) return 'nil' + if ( + typeof value === 'string' || + typeof value === 'boolean' || + typeof value === 'number' + ) { + return value + } + if (Array.isArray(value)) { + const formattedItems = value.map(formatGoResponseValue) + return `[]{${formattedItems.join(', ')}}` + } + if (typeof value === 'object') { + const formattedEntries = Object.entries(value) + .map(([key, val]) => `${pascalCase(key)}: ${formatGoResponseValue(val)}`) + .join(', ') + return `interface{}{${formattedEntries}}` + } + throw new Error(`Unsupported type: ${typeof value}`) +} diff --git a/src/lib/code-sample/schema.ts b/src/lib/code-sample/schema.ts index 4a48553..55b422f 100644 --- a/src/lib/code-sample/schema.ts +++ b/src/lib/code-sample/schema.ts @@ -15,6 +15,7 @@ import { import { createPhpRequest, createPhpResponse } from './php.js' import { createPythonRequest, createPythonResponse } from './python.js' import { createRubyRequest, createRubyResponse } from './ruby.js' +import { createGoRequest, createGoResponse } from './go.js' export const CodeSampleDefinitionSchema = z.object({ title: z.string().trim().min(1), @@ -47,12 +48,13 @@ const CodeSampleSyntaxSchema = z.enum([ 'php', 'ruby', 'bash', + 'go', ]) export type CodeSampleSyntax = z.infer const CodeSchema = z.record( - z.enum(['javascript', 'python', 'php', 'ruby', 'seam_cli']), + z.enum(['javascript', 'python', 'php', 'ruby', 'seam_cli', 'go']), z.object({ title: z.string().min(1), request: z.string(), @@ -115,6 +117,13 @@ export const createCodeSample = async ( request_syntax: 'bash', response_syntax: 'json', }, + go: { + title: 'Go', + request: createGoRequest(codeSampleDefinition, context), + response: createGoResponse(codeSampleDefinition, context), + request_syntax: 'go', + response_syntax: 'go', + }, } return { From 6ecd8a3ed351e06c48e969a87dea9c81e41c5bb1 Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Tue, 24 Sep 2024 15:30:42 +0000 Subject: [PATCH 02/31] ci: Generate code --- test/snapshots/blueprint.test.ts.md | 288 ++++++++++++++++++++++++++ test/snapshots/blueprint.test.ts.snap | Bin 18703 -> 20491 bytes 2 files changed, 288 insertions(+) diff --git a/test/snapshots/blueprint.test.ts.md b/test/snapshots/blueprint.test.ts.md index 26ca1ee..a201e43 100644 --- a/test/snapshots/blueprint.test.ts.md +++ b/test/snapshots/blueprint.test.ts.md @@ -131,6 +131,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request_syntax: 'go', + response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', request_syntax: 'javascript', @@ -221,6 +228,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request_syntax: 'go', + response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', request_syntax: 'javascript', @@ -311,6 +325,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.List(context.Background())', + request_syntax: 'go', + response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.list()', request_syntax: 'javascript', @@ -401,6 +422,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.List(context.Background())', + request_syntax: 'go', + response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.list()', request_syntax: 'javascript', @@ -491,6 +519,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request_syntax: 'go', + response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', request_syntax: 'javascript', @@ -581,6 +616,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request_syntax: 'go', + response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', request_syntax: 'javascript', @@ -671,6 +713,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.List(context.Background())', + request_syntax: 'go', + response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.list()', request_syntax: 'javascript', @@ -761,6 +810,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.List(context.Background())', + request_syntax: 'go', + response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.list()', request_syntax: 'javascript', @@ -851,6 +907,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request_syntax: 'go', + response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', request_syntax: 'javascript', @@ -941,6 +1004,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request_syntax: 'go', + response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})', request_syntax: 'javascript', @@ -1031,6 +1101,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.List(context.Background())', + request_syntax: 'go', + response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.list()', request_syntax: 'javascript', @@ -1121,6 +1198,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Foos.List(context.Background())', + request_syntax: 'go', + response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.foos.list()', request_syntax: 'javascript', @@ -1221,6 +1305,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Transport.Air.Planes.List(context.Background())', + request_syntax: 'go', + response: '[]Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.transport.air.planes.list()', request_syntax: 'javascript', @@ -1302,6 +1393,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Transport.Air.Planes.List(context.Background())', + request_syntax: 'go', + response: '[]Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.transport.air.planes.list()', request_syntax: 'javascript', @@ -1383,6 +1481,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Transport.Air.Planes.List(context.Background())', + request_syntax: 'go', + response: '[]Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.transport.air.planes.list()', request_syntax: 'javascript', @@ -1478,6 +1583,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Deprecated.Undocumented.Endpoint(context.Background())', + request_syntax: 'go', + response: 'nil', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.deprecated.undocumented.endpoint()', request_syntax: 'javascript', @@ -1550,6 +1662,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Deprecated.Undocumented.Endpoint(context.Background())', + request_syntax: 'go', + response: 'nil', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.deprecated.undocumented.endpoint()', request_syntax: 'javascript', @@ -1622,6 +1741,13 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: 'client..Deprecated.Undocumented.Endpoint(context.Background())', + request_syntax: 'go', + response: 'nil', + response_syntax: 'go', + title: 'Go', + }, javascript: { request: 'await seam.deprecated.undocumented.endpoint()', request_syntax: 'javascript', @@ -1833,6 +1959,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + request_syntax: 'go', + response: `// go␊ + Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})`, @@ -1933,6 +2068,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + request_syntax: 'go', + response: `// go␊ + Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})`, @@ -2033,6 +2177,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.List(context.Background())`, + request_syntax: 'go', + response: `// go␊ + []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.list()`, @@ -2133,6 +2286,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.List(context.Background())`, + request_syntax: 'go', + response: `// go␊ + []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.list()`, @@ -2233,6 +2395,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + request_syntax: 'go', + response: `// go␊ + Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})`, @@ -2333,6 +2504,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + request_syntax: 'go', + response: `// go␊ + Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})`, @@ -2433,6 +2613,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.List(context.Background())`, + request_syntax: 'go', + response: `// go␊ + []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.list()`, @@ -2533,6 +2722,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.List(context.Background())`, + request_syntax: 'go', + response: `// go␊ + []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.list()`, @@ -2633,6 +2831,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + request_syntax: 'go', + response: `// go␊ + Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})`, @@ -2733,6 +2940,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + request_syntax: 'go', + response: `// go␊ + Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.get({"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33"})`, @@ -2833,6 +3049,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.List(context.Background())`, + request_syntax: 'go', + response: `// go␊ + []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.list()`, @@ -2933,6 +3158,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Foos.List(context.Background())`, + request_syntax: 'go', + response: `// go␊ + []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.foos.list()`, @@ -3043,6 +3277,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Transport.Air.Planes.List(context.Background())`, + request_syntax: 'go', + response: `// go␊ + []Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.transport.air.planes.list()`, @@ -3134,6 +3377,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Transport.Air.Planes.List(context.Background())`, + request_syntax: 'go', + response: `// go␊ + []Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.transport.air.planes.list()`, @@ -3225,6 +3477,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Transport.Air.Planes.List(context.Background())`, + request_syntax: 'go', + response: `// go␊ + []Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.transport.air.planes.list()`, @@ -3330,6 +3591,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Deprecated.Undocumented.Endpoint(context.Background())`, + request_syntax: 'go', + response: `// go␊ + nil`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.deprecated.undocumented.endpoint()`, @@ -3412,6 +3682,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Deprecated.Undocumented.Endpoint(context.Background())`, + request_syntax: 'go', + response: `// go␊ + nil`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.deprecated.undocumented.endpoint()`, @@ -3494,6 +3773,15 @@ Generated by [AVA](https://avajs.dev). codeSamples: [ { code: { + go: { + request: `// go␊ + client..Deprecated.Undocumented.Endpoint(context.Background())`, + request_syntax: 'go', + response: `// go␊ + nil`, + response_syntax: 'go', + title: 'Go', + }, javascript: { request: `// javascript␊ await seam.deprecated.undocumented.endpoint()`, diff --git a/test/snapshots/blueprint.test.ts.snap b/test/snapshots/blueprint.test.ts.snap index ce53be33a1bf22a1cb6a653ff24a57bbc1547793..b70159d161d71d9b740d794069879af28811e639 100644 GIT binary patch literal 20491 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 literal 18703 zcmb5#RZtw!)+pfM4DK!=xD(txxVtl0aCe76CP9M}oZwDy*8suYb#P~JhnsW$sw
kK+2n+n)&XebF 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 Date: Tue, 24 Sep 2024 15:31:19 +0000 Subject: [PATCH 03/31] ci: Format code --- src/lib/code-sample/schema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/code-sample/schema.ts b/src/lib/code-sample/schema.ts index 55b422f..059af6b 100644 --- a/src/lib/code-sample/schema.ts +++ b/src/lib/code-sample/schema.ts @@ -8,6 +8,7 @@ import { import { JsonSchema } from 'lib/json.js' import { formatCodeRecords } from './format.js' +import { createGoRequest, createGoResponse } from './go.js' import { createJavascriptRequest, createJavascriptResponse, @@ -15,7 +16,6 @@ import { import { createPhpRequest, createPhpResponse } from './php.js' import { createPythonRequest, createPythonResponse } from './python.js' import { createRubyRequest, createRubyResponse } from './ruby.js' -import { createGoRequest, createGoResponse } from './go.js' export const CodeSampleDefinitionSchema = z.object({ title: z.string().trim().min(1), From 355878fa0cdea4fd7a3e05a7a53249f074bcf80d Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 24 Sep 2024 17:33:43 +0200 Subject: [PATCH 04/31] Fix go request and response string value samples --- src/lib/code-sample/go.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index ba596b7..fdcf0a4 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -12,7 +12,7 @@ export const createGoRequest = ( const params = formatGoArgs(request.parameters ?? {}) const isReqWithParams = Object.keys(request.parameters).length !== 0 - return `client.${parts.map((p) => pascalCase(p)).join('.')}(context.Background()${isReqWithParams ? `, api.${pascalCase(parts.join('_'))}Request(${params})` : ''})` + return `client${parts.map((p) => pascalCase(p)).join('.')}(context.Background()${isReqWithParams ? `, api.${pascalCase(parts.join('_'))}Request(${params})` : ''})` } const formatGoArgs = (jsonParams: NonNullJson): string => @@ -94,11 +94,8 @@ const formatGoResponse = ( const formatGoResponseValue = (value: Json): any => { if (value == null) return 'nil' - if ( - typeof value === 'string' || - typeof value === 'boolean' || - typeof value === 'number' - ) { + if (typeof value === 'string') return `"${value}"` + if (typeof value === 'boolean' || typeof value === 'number') { return value } if (Array.isArray(value)) { From b458db705525e403887d43aba86454f54ca0479a Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Tue, 24 Sep 2024 15:34:04 +0000 Subject: [PATCH 05/31] ci: Generate code --- test/snapshots/blueprint.test.ts.md | 132 +++++++++++++------------- test/snapshots/blueprint.test.ts.snap | Bin 20491 -> 20460 bytes 2 files changed, 66 insertions(+), 66 deletions(-) diff --git a/test/snapshots/blueprint.test.ts.md b/test/snapshots/blueprint.test.ts.md index a201e43..4e421f1 100644 --- a/test/snapshots/blueprint.test.ts.md +++ b/test/snapshots/blueprint.test.ts.md @@ -132,9 +132,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', response_syntax: 'go', title: 'Go', }, @@ -229,9 +229,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', response_syntax: 'go', title: 'Go', }, @@ -326,9 +326,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.List(context.Background())', + request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', response_syntax: 'go', title: 'Go', }, @@ -423,9 +423,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.List(context.Background())', + request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', response_syntax: 'go', title: 'Go', }, @@ -520,9 +520,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', response_syntax: 'go', title: 'Go', }, @@ -617,9 +617,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', response_syntax: 'go', title: 'Go', }, @@ -714,9 +714,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.List(context.Background())', + request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', response_syntax: 'go', title: 'Go', }, @@ -811,9 +811,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.List(context.Background())', + request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', response_syntax: 'go', title: 'Go', }, @@ -908,9 +908,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', response_syntax: 'go', title: 'Go', }, @@ -1005,9 +1005,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}', + response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', response_syntax: 'go', title: 'Go', }, @@ -1102,9 +1102,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.List(context.Background())', + request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', response_syntax: 'go', title: 'Go', }, @@ -1199,9 +1199,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Foos.List(context.Background())', + request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}', + response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', response_syntax: 'go', title: 'Go', }, @@ -1306,9 +1306,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Transport.Air.Planes.List(context.Background())', + request: 'client.Transport.Air.Planes.List(context.Background())', request_syntax: 'go', - response: '[]Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}', + response: '[]Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}', response_syntax: 'go', title: 'Go', }, @@ -1394,9 +1394,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Transport.Air.Planes.List(context.Background())', + request: 'client.Transport.Air.Planes.List(context.Background())', request_syntax: 'go', - response: '[]Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}', + response: '[]Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}', response_syntax: 'go', title: 'Go', }, @@ -1482,9 +1482,9 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Transport.Air.Planes.List(context.Background())', + request: 'client.Transport.Air.Planes.List(context.Background())', request_syntax: 'go', - response: '[]Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}', + response: '[]Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}', response_syntax: 'go', title: 'Go', }, @@ -1584,7 +1584,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Deprecated.Undocumented.Endpoint(context.Background())', + request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', request_syntax: 'go', response: 'nil', response_syntax: 'go', @@ -1663,7 +1663,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Deprecated.Undocumented.Endpoint(context.Background())', + request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', request_syntax: 'go', response: 'nil', response_syntax: 'go', @@ -1742,7 +1742,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client..Deprecated.Undocumented.Endpoint(context.Background())', + request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', request_syntax: 'go', response: 'nil', response_syntax: 'go', @@ -1961,10 +1961,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// go␊ - Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, response_syntax: 'go', title: 'Go', }, @@ -2070,10 +2070,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// go␊ - Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, response_syntax: 'go', title: 'Go', }, @@ -2179,10 +2179,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.List(context.Background())`, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// go␊ - []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, response_syntax: 'go', title: 'Go', }, @@ -2288,10 +2288,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.List(context.Background())`, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// go␊ - []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, response_syntax: 'go', title: 'Go', }, @@ -2397,10 +2397,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// go␊ - Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, response_syntax: 'go', title: 'Go', }, @@ -2506,10 +2506,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// go␊ - Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, response_syntax: 'go', title: 'Go', }, @@ -2615,10 +2615,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.List(context.Background())`, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// go␊ - []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, response_syntax: 'go', title: 'Go', }, @@ -2724,10 +2724,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.List(context.Background())`, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// go␊ - []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, response_syntax: 'go', title: 'Go', }, @@ -2833,10 +2833,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// go␊ - Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, response_syntax: 'go', title: 'Go', }, @@ -2942,10 +2942,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// go␊ - Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}`, + Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, response_syntax: 'go', title: 'Go', }, @@ -3051,10 +3051,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.List(context.Background())`, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// go␊ - []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, response_syntax: 'go', title: 'Go', }, @@ -3160,10 +3160,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Foos.List(context.Background())`, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// go␊ - []Foo{Foo{FooId: 8d7e0b3a-b889-49a7-9164-4b71a0506a33, Name: Best foo, NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: bar}, ArrayProp: []{foo, bar}}}`, + []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, response_syntax: 'go', title: 'Go', }, @@ -3279,10 +3279,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Transport.Air.Planes.List(context.Background())`, + client.Transport.Air.Planes.List(context.Background())`, request_syntax: 'go', response: `// go␊ - []Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}`, + []Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}`, response_syntax: 'go', title: 'Go', }, @@ -3379,10 +3379,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Transport.Air.Planes.List(context.Background())`, + client.Transport.Air.Planes.List(context.Background())`, request_syntax: 'go', response: `// go␊ - []Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}`, + []Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}`, response_syntax: 'go', title: 'Go', }, @@ -3479,10 +3479,10 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Transport.Air.Planes.List(context.Background())`, + client.Transport.Air.Planes.List(context.Background())`, request_syntax: 'go', response: `// go␊ - []Plane{Plane{PlaneId: 9d3163f9-9185-40d3-a0ce-a03d3c7ce402, Name: Woosh}}`, + []Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}`, response_syntax: 'go', title: 'Go', }, @@ -3593,7 +3593,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Deprecated.Undocumented.Endpoint(context.Background())`, + client.Deprecated.Undocumented.Endpoint(context.Background())`, request_syntax: 'go', response: `// go␊ nil`, @@ -3684,7 +3684,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Deprecated.Undocumented.Endpoint(context.Background())`, + client.Deprecated.Undocumented.Endpoint(context.Background())`, request_syntax: 'go', response: `// go␊ nil`, @@ -3775,7 +3775,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client..Deprecated.Undocumented.Endpoint(context.Background())`, + client.Deprecated.Undocumented.Endpoint(context.Background())`, request_syntax: 'go', response: `// go␊ nil`, diff --git a/test/snapshots/blueprint.test.ts.snap b/test/snapshots/blueprint.test.ts.snap index b70159d161d71d9b740d794069879af28811e639..3af3fe4aabb6f8e48b2e33b35af8119412926b77 100644 GIT binary patch literal 20460 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 From dffe5e4b23bf9d1b85cb418bb123301d93f4043e Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 13:03:28 +0200 Subject: [PATCH 06/31] Make go responses to return json, correctly determine go package name --- src/lib/code-sample/go.ts | 122 +++++++++++++++------------------- src/lib/code-sample/schema.ts | 2 +- 2 files changed, 53 insertions(+), 71 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index fdcf0a4..174556b 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -3,6 +3,7 @@ import { pascalCase } from 'change-case' import type { Json, NonNullJson } from 'lib/json.js' import type { CodeSampleDefinition, Context } from './schema.js' +import { createJsonResponse } from './create-json-response.js' export const createGoRequest = ( { request }: CodeSampleDefinition, @@ -11,8 +12,57 @@ export const createGoRequest = ( const parts = request.path.split('/') const params = formatGoArgs(request.parameters ?? {}) const isReqWithParams = Object.keys(request.parameters).length !== 0 + const packageName = getGoPackageName(request.path) + const requestStructName = getRequestStructName(request.path) + const goSdkRequestArgs = `context.Background()${isReqWithParams ? `, ${packageName}.${requestStructName}(${params})` : ''}` - return `client${parts.map((p) => pascalCase(p)).join('.')}(context.Background()${isReqWithParams ? `, api.${pascalCase(parts.join('_'))}Request(${params})` : ''})` + return `client${parts.map((p) => pascalCase(p)).join('.')}(${goSdkRequestArgs})` +} + +const pathsWithCustomGoPackageName = [ + '/acs', + '/access_codes/simulate', + '/access_codes/unmanaged', + '/devices/simulate', + '/devices/unmanaged', + '/noise_sensors/noise_thresholds', + '/noise_sensors/simulate', + '/phones/simulate', + '/user_identities/enrollment_automations', + // TODO: thermostats +] + +const DEFAULT_GO_PACKAGE_NAME = 'api' + +const getGoPackageName = (path: string): string => { + if (!pathsWithCustomGoPackageName.some((p) => path.startsWith(p))) { + return DEFAULT_GO_PACKAGE_NAME + } + + const parts = path.split('/').filter(Boolean) + const firstPart = parts[1] + + if (!firstPart) { + throw new Error('Invalid path: missing first part') + } + + return `${DEFAULT_GO_PACKAGE_NAME}.${firstPart.replace(/_/g, '')}` +} + +const getRequestStructName = (path: string): string => { + const requestStructNameSuffix = 'Request' + + if (pathsWithCustomGoPackageName.some((p) => path.startsWith(p))) { + return ( + `${pascalCase(removeUntilSecondSlash(path))}` + requestStructNameSuffix + ) + } + + return `${pascalCase(path)}` + requestStructNameSuffix +} + +function removeUntilSecondSlash(str: string): string { + return str.replace(/^\/[^/]*/, '') } const formatGoArgs = (jsonParams: NonNullJson): string => @@ -41,72 +91,4 @@ const formatGoValue = (value: Json): string => { throw new Error(`Unsupported type: ${typeof value}`) } -export const createGoResponse = ( - { response, title }: CodeSampleDefinition, - context: Context, -): string => { - const { endpoint } = context - - if (endpoint.response.responseType === 'void') return 'nil' - - const { responseKey, resourceType } = endpoint.response - const responseValue = response?.body?.[responseKey] - - if (responseValue == null) { - throw new Error(`Missing ${responseKey} for '${title}'`) - } - - const responseGoStructName = pascalCase(resourceType) - - return Array.isArray(responseValue) - ? formatGoArrayResponse(responseValue, responseGoStructName, title) - : formatGoResponse(responseValue, responseGoStructName) -} - -const formatGoArrayResponse = ( - responseArray: Json[], - responseGoStructName: string, - title: string, -): string => { - const formattedItems = responseArray - .map((v) => { - if (v == null) { - throw new Error(`Null value in response array for '${title}'`) - } - return formatGoResponse(v, responseGoStructName) - }) - .join(', ') - - return `[]${responseGoStructName}{${formattedItems}}` -} - -const formatGoResponse = ( - responseParams: NonNullJson, - responseGoStructName: string, -): string => { - const params = Object.entries(responseParams) - .map( - ([key, value]) => `${pascalCase(key)}: ${formatGoResponseValue(value)}`, - ) - .join(', ') - return `${responseGoStructName}{${params}}` -} - -const formatGoResponseValue = (value: Json): any => { - if (value == null) return 'nil' - if (typeof value === 'string') return `"${value}"` - if (typeof value === 'boolean' || typeof value === 'number') { - return value - } - if (Array.isArray(value)) { - const formattedItems = value.map(formatGoResponseValue) - return `[]{${formattedItems.join(', ')}}` - } - if (typeof value === 'object') { - const formattedEntries = Object.entries(value) - .map(([key, val]) => `${pascalCase(key)}: ${formatGoResponseValue(val)}`) - .join(', ') - return `interface{}{${formattedEntries}}` - } - throw new Error(`Unsupported type: ${typeof value}`) -} +export const createGoResponse = createJsonResponse diff --git a/src/lib/code-sample/schema.ts b/src/lib/code-sample/schema.ts index 059af6b..99e12d2 100644 --- a/src/lib/code-sample/schema.ts +++ b/src/lib/code-sample/schema.ts @@ -122,7 +122,7 @@ export const createCodeSample = async ( request: createGoRequest(codeSampleDefinition, context), response: createGoResponse(codeSampleDefinition, context), request_syntax: 'go', - response_syntax: 'go', + response_syntax: 'json', }, } From 19c0e4981a41799bf73f1f4fa2d8da1d1be20a26 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 13:36:05 +0200 Subject: [PATCH 07/31] Imporve readability and structure --- src/lib/code-sample/go.ts | 98 ++++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 42 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 174556b..86c696e 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -1,10 +1,30 @@ import { pascalCase } from 'change-case' import type { Json, NonNullJson } from 'lib/json.js' - import type { CodeSampleDefinition, Context } from './schema.js' import { createJsonResponse } from './create-json-response.js' +interface GoPackageConfig { + readonly pathsWithCustomPackageName: ReadonlyArray + readonly defaultPackageName: string +} + +const GO_PACKAGE_CONFIG: GoPackageConfig = { + pathsWithCustomPackageName: [ + '/acs', + '/access_codes/simulate', + '/access_codes/unmanaged', + '/devices/simulate', + '/devices/unmanaged', + '/noise_sensors/noise_thresholds', + '/noise_sensors/simulate', + '/phones/simulate', + '/user_identities/enrollment_automations', + // TODO: thermostats + ], + defaultPackageName: 'api', +} + export const createGoRequest = ( { request }: CodeSampleDefinition, _context: Context, @@ -19,51 +39,39 @@ export const createGoRequest = ( return `client${parts.map((p) => pascalCase(p)).join('.')}(${goSdkRequestArgs})` } -const pathsWithCustomGoPackageName = [ - '/acs', - '/access_codes/simulate', - '/access_codes/unmanaged', - '/devices/simulate', - '/devices/unmanaged', - '/noise_sensors/noise_thresholds', - '/noise_sensors/simulate', - '/phones/simulate', - '/user_identities/enrollment_automations', - // TODO: thermostats -] - -const DEFAULT_GO_PACKAGE_NAME = 'api' - const getGoPackageName = (path: string): string => { - if (!pathsWithCustomGoPackageName.some((p) => path.startsWith(p))) { - return DEFAULT_GO_PACKAGE_NAME + if ( + !GO_PACKAGE_CONFIG.pathsWithCustomPackageName.some((p) => + path.startsWith(p), + ) + ) { + return GO_PACKAGE_CONFIG.defaultPackageName } const parts = path.split('/').filter(Boolean) const firstPart = parts[1] if (!firstPart) { - throw new Error('Invalid path: missing first part') + throw new Error(`Invalid path: missing first part in "${path}"`) } - return `${DEFAULT_GO_PACKAGE_NAME}.${firstPart.replace(/_/g, '')}` + return `${GO_PACKAGE_CONFIG.defaultPackageName}.${firstPart.replace(/_/g, '')}` } const getRequestStructName = (path: string): string => { const requestStructNameSuffix = 'Request' - if (pathsWithCustomGoPackageName.some((p) => path.startsWith(p))) { - return ( - `${pascalCase(removeUntilSecondSlash(path))}` + requestStructNameSuffix - ) + if ( + GO_PACKAGE_CONFIG.pathsWithCustomPackageName.some((p) => path.startsWith(p)) + ) { + return `${pascalCase(removeUntilSecondSlash(path))}${requestStructNameSuffix}` } - return `${pascalCase(path)}` + requestStructNameSuffix + return `${pascalCase(path)}${requestStructNameSuffix}` } -function removeUntilSecondSlash(str: string): string { - return str.replace(/^\/[^/]*/, '') -} +const removeUntilSecondSlash = (str: string): string => + str.replace(/^\/[^/]*/, '') const formatGoArgs = (jsonParams: NonNullJson): string => Object.entries(jsonParams) @@ -74,21 +82,27 @@ const formatGoArgs = (jsonParams: NonNullJson): string => .join(', ') const formatGoValue = (value: Json): string => { - if (value == null) return 'nil' - if (typeof value === 'string') return `api.String("${value}")` - if (typeof value === 'boolean') return `api.Bool(${value ? 'true' : 'false'})` - if (typeof value === 'number') return `api.Float64(${value})` - if (Array.isArray(value)) { - const formattedItems = value.map(formatGoValue) - return `[]{${formattedItems.join(', ')}}` - } - if (typeof value === 'object') { - const formattedEntries = Object.entries(value) - .map(([key, val]) => `${pascalCase(key)}: ${formatGoValue(val)}`) - .join(', ') - return `interface{}{${formattedEntries}}` + switch (typeof value) { + case 'string': + return `api.String("${value}")` + case 'boolean': + return `api.Bool(${value})` + case 'number': + return `api.Float64(${value})` + case 'object': + if (value == null) return 'nil' + + if (Array.isArray(value)) { + const formattedItems = value.map(formatGoValue) + return `[]{${formattedItems.join(', ')}}` + } + const formattedEntries = Object.entries(value) + .map(([key, val]) => `${pascalCase(key)}: ${formatGoValue(val)}`) + .join(', ') + return `interface{}{${formattedEntries}}` + default: + throw new Error(`Unsupported type: ${typeof value}`) } - throw new Error(`Unsupported type: ${typeof value}`) } export const createGoResponse = createJsonResponse From 3dfbfbae8b092cdce13d15dbf4b6fc242f38858c Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 26 Sep 2024 11:36:27 +0000 Subject: [PATCH 08/31] ci: Generate code --- test/snapshots/blueprint.test.ts.md | 180 +++++++++++++------------- test/snapshots/blueprint.test.ts.snap | Bin 20460 -> 20307 bytes 2 files changed, 90 insertions(+), 90 deletions(-) diff --git a/test/snapshots/blueprint.test.ts.md b/test/snapshots/blueprint.test.ts.md index 4e421f1..4bcb766 100644 --- a/test/snapshots/blueprint.test.ts.md +++ b/test/snapshots/blueprint.test.ts.md @@ -134,8 +134,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', - response_syntax: 'go', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -231,8 +231,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', - response_syntax: 'go', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -328,8 +328,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', - response_syntax: 'go', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -425,8 +425,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', - response_syntax: 'go', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -522,8 +522,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', - response_syntax: 'go', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -619,8 +619,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', - response_syntax: 'go', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -716,8 +716,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', - response_syntax: 'go', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -813,8 +813,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', - response_syntax: 'go', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -910,8 +910,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', - response_syntax: 'go', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1007,8 +1007,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', request_syntax: 'go', - response: 'Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}', - response_syntax: 'go', + response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1104,8 +1104,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', - response_syntax: 'go', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1201,8 +1201,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Foos.List(context.Background())', request_syntax: 'go', - response: '[]Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}', - response_syntax: 'go', + response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1308,8 +1308,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Transport.Air.Planes.List(context.Background())', request_syntax: 'go', - response: '[]Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}', - response_syntax: 'go', + response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1396,8 +1396,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Transport.Air.Planes.List(context.Background())', request_syntax: 'go', - response: '[]Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}', - response_syntax: 'go', + response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1484,8 +1484,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Transport.Air.Planes.List(context.Background())', request_syntax: 'go', - response: '[]Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}', - response_syntax: 'go', + response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1586,8 +1586,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', request_syntax: 'go', - response: 'nil', - response_syntax: 'go', + response: 'void', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1665,8 +1665,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', request_syntax: 'go', - response: 'nil', - response_syntax: 'go', + response: 'void', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1744,8 +1744,8 @@ Generated by [AVA](https://avajs.dev). go: { request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', request_syntax: 'go', - response: 'nil', - response_syntax: 'go', + response: 'void', + response_syntax: 'json', title: 'Go', }, javascript: { @@ -1963,9 +1963,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', - response: `// go␊ - Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, - response_syntax: 'go', + response: `// json␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -2072,9 +2072,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', - response: `// go␊ - Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, - response_syntax: 'go', + response: `// json␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -2181,9 +2181,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.List(context.Background())`, request_syntax: 'go', - response: `// go␊ - []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, - response_syntax: 'go', + response: `// json␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -2290,9 +2290,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.List(context.Background())`, request_syntax: 'go', - response: `// go␊ - []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, - response_syntax: 'go', + response: `// json␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -2399,9 +2399,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', - response: `// go␊ - Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, - response_syntax: 'go', + response: `// json␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -2508,9 +2508,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', - response: `// go␊ - Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, - response_syntax: 'go', + response: `// json␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -2617,9 +2617,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.List(context.Background())`, request_syntax: 'go', - response: `// go␊ - []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, - response_syntax: 'go', + response: `// json␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -2726,9 +2726,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.List(context.Background())`, request_syntax: 'go', - response: `// go␊ - []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, - response_syntax: 'go', + response: `// json␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -2835,9 +2835,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', - response: `// go␊ - Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, - response_syntax: 'go', + response: `// json␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -2944,9 +2944,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', - response: `// go␊ - Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}`, - response_syntax: 'go', + response: `// json␊ + {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -3053,9 +3053,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.List(context.Background())`, request_syntax: 'go', - response: `// go␊ - []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, - response_syntax: 'go', + response: `// json␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -3162,9 +3162,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Foos.List(context.Background())`, request_syntax: 'go', - response: `// go␊ - []Foo{Foo{FooId: "8d7e0b3a-b889-49a7-9164-4b71a0506a33", Name: "Best foo", NullableProp: nil, NumberProp: 10, ObjectProp: interface{}{Foo: "bar"}, ArrayProp: []{"foo", "bar"}}}`, - response_syntax: 'go', + response: `// json␊ + [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -3281,9 +3281,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Transport.Air.Planes.List(context.Background())`, request_syntax: 'go', - response: `// go␊ - []Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}`, - response_syntax: 'go', + response: `// json␊ + [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -3381,9 +3381,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Transport.Air.Planes.List(context.Background())`, request_syntax: 'go', - response: `// go␊ - []Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}`, - response_syntax: 'go', + response: `// json␊ + [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -3481,9 +3481,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Transport.Air.Planes.List(context.Background())`, request_syntax: 'go', - response: `// go␊ - []Plane{Plane{PlaneId: "9d3163f9-9185-40d3-a0ce-a03d3c7ce402", Name: "Woosh"}}`, - response_syntax: 'go', + response: `// json␊ + [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -3595,9 +3595,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Deprecated.Undocumented.Endpoint(context.Background())`, request_syntax: 'go', - response: `// go␊ - nil`, - response_syntax: 'go', + response: `// json␊ + void`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -3686,9 +3686,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Deprecated.Undocumented.Endpoint(context.Background())`, request_syntax: 'go', - response: `// go␊ - nil`, - response_syntax: 'go', + response: `// json␊ + void`, + response_syntax: 'json', title: 'Go', }, javascript: { @@ -3777,9 +3777,9 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ client.Deprecated.Undocumented.Endpoint(context.Background())`, request_syntax: 'go', - response: `// go␊ - nil`, - response_syntax: 'go', + response: `// json␊ + void`, + response_syntax: 'json', title: 'Go', }, javascript: { diff --git a/test/snapshots/blueprint.test.ts.snap b/test/snapshots/blueprint.test.ts.snap index 3af3fe4aabb6f8e48b2e33b35af8119412926b77..d243970b250909a9c53955200baa50ac539e088e 100644 GIT binary patch literal 20307 zcmeF&^-~}KucPUXpsh6p$Ifr^`+u_XCo zRiBWyq`?kAW*P26)Rz}4xM0`(;pLVx3Kj0Z4#cA@FB6Sf!a=cSZU-AC-=@&IB?&KL z3r5u&BLMunX+E~FCMNR9x`-e~N!8>aR7R}d@W0**;Hav;BZP#|ZKGg)CS&~dq9~!@ z>V#|H@Q(I{`oQF|}o;z95ww8G4&v1{M+ujE=K z@cplDZ)NV@8@>yWSV7n13-GL_>ZrT^7~XM2>;L26FJF`f#bS7e;r983CN6uJ%&L+i z`m5`)IVaKgmTdTO_$rC_n_raPg4?1^qM?E&8){m8+mGzQ!6lk^rGEDp^aJel`VReC z`c+KQDFG5htXOSUg)pvbR40vSQ3+v2McjK-7u_J7qF8wLR94&2Wllm_*I+vKnjxvJ zqcZ20zknaDpFld_T$9pMQZnqq+aTj0`nFzMorN8=VngUECP}N@*)Up1C#kzj2rYl= z4l?P=2AE#}hTOPPxygR|Ya^po($0(MAJ+D&X`|4QO9bAD>Z)XK`@#{u_QzYfxjkBo zVvC(3VlMR9B&TAf4@3=Ns|+iN@kFuZOy}dneC7xBZZnDOnpHSFxl{^HS#w_mt0$H1 zxUGox~3bcoA*PkMj4j)pb5@av1zX#I=j=uQ+~ z{mLKaUDvM!$4Z9TEH3|MY2u^2r5JCNmw-kz9ihm=ysF}ejl7exh*Koi`N8ZY`_;7+ zQL7aLUt*j)B@u^6{v?t-C}8@d^KeQby74%7BWv4j05R>SdhAHN4G<~qHd>Io=6a-t zOh9%a$$N%3)L-4)&Jkh=HLoCW94rd#k4bY-Bb*a}f2T=B3J<~in6SC37`(E^T3(~G z5<+1ZV3}^dN*>1FX_7;jc?)4)i-%c9RGC%8d?lSAwQAs73!7Q_eEQ4AF{Alw`sKT= z`1Aa)($Sajo0bo$PEY%e4|kCB{D{`d^ZeqW7Gg4;s!8vFkM%B2pFeU}>?cM!{anxP zk_t$4c(#3NLGN8HF~fC2gvz1ewzw+_!IUM)Ia-Lfht3KfvSnEHWqsj?XW|~f6Slri zb}ba!Pu7_GdWdy)JzFGa>X-sXh#j`_^nUorn6?tz>2a!f7k0go>1Xmv0%~|2wsOv5 z017?y^jXNeMiWQ21zq&Da)8(zWT}zP8vt0V;&ZRUG_&oKY&7+95YQm?L!{#S1kp*{ z6a~U_^1xjnnmE86VFhu+Z;+yz22YCNOe30V=bD$5eX%v8vd0R&Mc7oQLi!ur<97PYef^2@`d?LbVl%V26@(Gh|A}DXVkT8)z zWknC3m)y`qwU(e}#rFx9P-Yy(47<*Yuk7}56n&~T4utOZ#S~m& zUS4Jk(`5Anp{Ez&tm5OQO9W`>&f*(6q49)}j8PS(nU{AxXsv3b-?0!VU)zL_WZ)VS#OonDXT%)6v5p%=H6UZvPC8DUT?6-0^bt zn-DpgYaV{Fj{ZUf{+QgyHyEga%g=p)3w+;;9IZGqMM9|5usuCJ)A)U$KMA8x*T0UB zO(R1{y?X5L-k$B?VZGZlMp}Pd^^#VI%}4zav6PqYZE{pSIz?GX+8Aa#;~kN!9> z-Z0q85Y4S1p}AB_53EmedD0i7#grzOqEz{BX3*OAFQyUu*NmzX6xJ%n99qe`u5NZ3 z7Vx4p^K4Y9qNlE*#`Uo7msa+DizS9g&c+M8Ev={)k@{=1i>r^jc!aFV)^9riz3@@8 zk0W!-y+&Ert@>F_&I%J1b|Jg`#Z{~6%Tpfem+Dj3X|Iu0O+`2?rk!KG=^6Jxm!9mp zbOJiU&XxOrWJ?W>(m{R#s#!cdLqkCeEwOc)-!OSjZ zicXTUwVBMpM+f<`hFH0SULnD#hJeM=Yml7E!c5x|TVa96twE-K1|7Lu6nP~j6I-QN zt7yZ^o)^Cz+G(L@ffv}fnM1}<>JfMzA+l)Z$X0rET`gTUYe8>tTy0w|$TmE9W{`ES zdhy{>Tj+j4fA?NsXEY)mJEzI>!o_ZxYdAu>CE5|)Y)OB;+*rA7WYt2#AeElCjGouE zyO@pD9$lp&jQ^$K0c>#K2$jA7Yn(JLiLZLbO=8hEhD0pO#iL%gw;n+|L4w*$0?D$Z&a`=1}` z@uNpx+j{xIm48}R=)|5c8(hH`WO&)^#rs4{dRoupKrJz2%@?>baV#55)PtF*->SfyoQCVh-PEM^~& z-T7%5UH=yH*C>9+fjJ|r)5L~jVHv#(2H^EkNY&BgTlJM(Uz@Wx(pbPa#%x>T?BZuV zz^oogzAdxwI>21N4M+CRwW9p(r86rHz!F3^0n^R#BG3w2gvC?CQ3Ze80xi0%KM^U2mRwGvG@u=#yU?b#+ zs|MmUkR#=z$R+n_5k#RtBgLI197*XKui5>qD_0zf7#1U6P8?sB=dbK@a&Tsx>KSFZ zuUcs^hjs^DC>sSfvkFJ%EcV^57hSK7L|F`Seoc(eG2HT)qQ|y-o(Ozm?{K>!ZW~=` zpfz9{^Lr^H6&S`p&~{ISl0Kt_hYJ0C(6Oi8Wqn!JT|;Ck8X9*GL?fzm?i~5xa!b2=KHMN zJ8(Q2i$*2?^2zTmvy`+8iqb*u(lbBijs&zFX^D`Z&M;Y<2!|hSdud#_(=z()M*sd? z`$xiTXiRTpb$M~IVncJJA%W@td`b`7lt_LT>$L~``3d8Vgo)d5vSPYUo4Ap5Bp?@C z%*U2gvBW?~@+-h%JAbZcB4KB0I6`P`F_3l{Xq(#E1>?}Q$9_xxki9q7CGh2GH;ZXECJ8X|v(K$Fa z%(*HSAW9X>NX8>YCkAH^Ts}t4DjW*NS*5ru80t@$S-W8_{VktZxd(pe>n)qb{H>yw$+(93d#A8}x>vt5^BqK;E+b!1 zm0s=MYWaJat>@xr509VYWZK6^(?FKz!#>LZ35+_zxhvcVi+du257SrPX}{g3jf9Pp zeS}>h<0CUL~Pma$fP z#pX)8r=eUy&y|MfVGD8u#OcD_1LD)>??UESVXJ3l+~_I3~^Bf?&fMwti3r@g}}1g64W z(|@`IP6i@GXToVP^x!Tk7D;kXCBkt2h|-nA)*n&Rb| zydTX$g)#Jc4n>cw3N&1vf4=j3pP7TYLodE6hrWTof zGmuUdAspsHF!JSAVW1(s6lTk|`2F2hue zbf);MdGcjoIs#N9_Zq*&0nJ=7I8DPO%zjVO;(ozn1b=}KfHmwOrj?TZTqLnms@^`4 z;em%Uu&|LTk!cq=9ErwWejLH0}Vu%<0UDS-M6oLMwzYUyPJ9JwodzLH1&U+ulTt;-xRU-^*UEZTl_?J z+sXDxFJzzfN4v!y9YN|3_IiP`p(z+wI74Bv-jnD_K-A^Use8?%E5Gp!#sR}`mE<)% z%pm}QDaxp39|h-3z{2fl!@C<8w?oA9h@ye1%y=DPQ=0lAYtnQ`{gH+s=LmA4YrTU; zWR64B^xfhQ?(?G~T&v#0EDNd91+nD-=799d0dmij=az)ix_7sc?e>GuP;k@MP5QO~ z$YHM}abT=g<)HKcK!NkLH4JOQNtDNcHuY8QhSymbGsZLSq zD}IBC1EV@jBBJY}h1-`7s%5o3e1%=;_G;<%Js%3m(KY3}S!-074vk0?r%xJ{Y{oj9 z82w$V&E!D@Wr=O<4JtNE5~PVu>?O{!fVXUr-a?P@Z4SqlU? zR#ECu{~t^uzB%#-NB%cVvz_b6h0xpOqK2~ogT$LPr`Y(fkvLHb!cqc$a^R`Nyhct| z6=EC3Vp5=U)e-#5A+8uj+y$h6 zSeBZ}TP2qzHjEr;v^k_<%HOirE7?qN86@hSv@|#98f~qqXX<6n+8PgA-CPs2S(}Z|w zZ%r_;QKy%iWiuhE<_oB!RbC&Vq;$pkv0LkGjCuc+YUQ5FT_5wloKBYwa5HJE+fCv} z0V%=`J|(fPm4?h}n}p2woblE;U}owe!sdHr?C5lZ5FWp>J#`U;SB2=oOwRf^FHM02 zB|Q}WM0}zcYq6hZWHz>FRGm7J%JcnLj@l@EM#c`A#|SDTEL`h-(7wmOOfP-*pBT+W z(57Oc;=-g`iAZ^WZ@D(El# zg?r4i8RY$2TE(xpOZK5tq;$Fs2nIFp2%JLENvSuO1YYs~2Ixcj8EXu(!?9HQ(u+5< zicMd*&!)L?S+#@7eUX*L5S6mSLap)!==WRXAdPA!4@#UqcomCCl=cw14ATiqpl1~G zkma2X_h(_0kerZIHs?VCpl3NkMjgP?F__I@BZ{r&=BxMVSKyp>@bj6lp$~@cA0m9A6s2W$6qeW)uk^(2Jo;>k~zaz^N73o32-Aw@S$ruvM z0ZmMy3LqtFlB;>K%~?c_YKAT^Z(Q(sI|vyrutSjp_ESaO?be_Zg}I*bOT*(0KfXNs-)TM2^#7j@uqH-_7k#Tvokc@Dh3lpl=P*z6Qy2 z>N{$tOEnr>UOu~8Ry`rNe!+UWz~Wh8fU4u`-uh2^QD!co1f2Hzp7!o|(WQz9&#qyM zKWTh$8A2|>GtzY5I{ivV=j5YU^J3z(B z?o7}w-~$NGKK^|qdkDnR5Q}JvpuVhWh!@n-yS&kLCrTy{7m3*P-R_pzh@ioBOph%0 z!MCLhJCQLxQnUVwq5eaz<$&4oai+4)jyMY7oR z+2-z!=i4iE@D(wI8`m*7vOEx3Vxnh*+j)<8-<801LcYaUYX#A2Gp`=!kq+Y#_s|cp z+8ysaqP4PLZ8ECke8w{Ahw0>xnbMu?jJ>dNj~N<(h~5=kx!%+3R`Z-0YLK^ul@o%u zw=w5L{cM0Lg58{z;>@D8^81qWS(r=&du<)MdD;Vmgc?}T1QJpmB8+y!8F2K3o^DQ^ z(yfFrJFefJZQjN`Ag(+jUOm2}e`VaH&~m|kLB)PWT@w>8&)I0sq1yTt>Z{m~*@oK3 z-U}n#ghkcBtnO~CfVVA?m#=`b7lg&`o22PQZ)w+!cs0D?fhfBHW4=>4XVs!KT-DYgX_s|D525K!HYHr_7Z zLa1eE!7r}FFV4>|o_%iY1=aNeHf!~>xe*HQvoGwi-z|b`RwbPWBzrpxww{CmNg@DA zVF0%<2TZuI)6 zbGz1xG$quM5(=aY4*Ur9-9hS3NpN;5X`wO}uc_YPGlpVpcLzX(o@rMym>oNFHsr*h zRsjgH7m(&*^Z;g#&6|>zr56ZQpmm}MYvUynk`DqHB_XvYA(gYpwZv+z*d-x3Y2tco68zRA5LVTzDXt3@D%t9) zVr@~?!vRZiRz#YpfS}k~v@6u4m%du!$7PT_EkJ!4T2~o!iMCR&|NHFy2F4>#a_~B?C z$4^%hM^|IAu*k$s3Hmb~_e247E29+b%O*ak4>{6@sMrF9?G#$7?G;rT0cwo^Gh1}+ zIRbBF)Gr9MEA!0k)SozcKAn9EGVuzc;!)+~RPFUQGb6#oSH#9AL&N_j2uT!#NO{n% zs4zQfkVB(9kh zI9%Em4q0a=SsX)^-sfLiK7aA9${BPuRnA;R#GU=2K@Yem@sXqk#+TnhN*OZ50~3h{Ka>am%9fF6UA5OHahXAw!kW>$ByS@l9MU5Vxs!%;NaKzx z^jF%_>dwoaNz#a$)KH1)#u2k_c4)0YOrTpP&^;(ZHIBIVw~ZSd;9mY#Q8=n)80t+J zY5>-|zgQr5V3PBW=1PgGxOU0Ly(;uvHCV<>+}#Yg$MW`MQoQ`yAcxmY0}vq+^d??{ zOncTd+xON>pD*+^`ssMyVK}_^uK2!@Ko42ZKz-jwYsg0W(u?F33e3jB^TVaT6H&y$ zW#6H6#?}of~H|Ps(3pp6#Nb{_6`#A4q;vvNLaE(@)?ap z25sOonzl5W=V!F8pDrGnhJ}pcF^td!M(80Uw2BdW&j=)}*m}wbXypUsrXY{`0E2vh zv6Mm!4(ZDmB;GGb`CpK32T_{_P?ZN{TU0@N6f9@oL03^A#qS{Dr@cMwFLZ`xpj(ZK z4c7{)u2QP{QWG@|D2o!EAs)!9qIAPuLp;F}B0h$MmjR@(qu=bM&Ait(DtE~1CACL? z9aoZ9nX%dp_u}e$Ur{g0FEA9BRz5L-=~S&il9lf8XG9ST%jVatMPXXH``q3QH!13g zIj6glqmAIq`W2j=vuf18-G@KFiNLyFq6l0}YhBuQO3?Zu zt^73ahfDLsEz1Wq`sjzMlbNDFMb3`hsn+xvWPk-pBaJ$gIZ4+ah&jBRwHe|y;b+s*x9J$)D$4O{)92wq?tSV@y& zDYEPz&G@=L{@bzYbK-(Tk*bXoh~9eurXs1VT)SKiAu|1 zX+{8WeUosRq}vPg-|#$JRwZp7Eytek2frV+JOG;$SMa3J1N!&z_MpIDxH zApdtKy2FOPqPvQX=Q$>Q@OEF{n=tOl6F(mL&t?C-|fVFs9_VFq$_YMEb-q{7!yXBQed2A^Knc-2O6VdCLN z6TI3kJM72rVNQ`o6>T>4{W$LV_{#m+IP$fw%z=%rT%FpL_;z`(ldNa_1P9S71AN_W zO`bb4X_-m!_396?k*5`j|8?rBEk7{W<66VPOTIj5Ahm|h zx9%OTxOtqkz9hJg{@3~QJUYW(HtbpuU7$RVlo2#;`$rG+V>z`I@4t%h%-Ohlk~a7< z>OIdb%({PjE6V?g{x)_g@V!lW=&yWi#&c>BoNUdyqfD*Iq}x_X*R~q+&MFwz;}TSm zwi??1?@~Ib=~>^>U^Z;P{wu%Wt>LTO$KC%`3oIse+egY3bU%E{D1{2gF@PwyOeaM6ptrp&LtNuao%wA1d&Z@R(Hyis!B(W9bl zr+8TTxIWS=5~dYk&qxi>4$|_fOb<#+8;^}qg-~0WPj;(z@iZ_RyGA9>6k0@Br6sXs zxbCKxX=z_eo0a?I%XZcnxZ5n6Hm6>*T%&zN;I5oAelYXVU$9tZ?^a9{=E{%!pfBsfv=GeQ8 zKP*C!cc;6O|Lwfv(;aGUX&78oclU?a%6C<~TSy*TNFQA0w)o=uk8v6HK@41-?4vlm3E0l@Z$Y$ zD@gx&3i=uBxmii2txsaW5;IC}rZV!XICxi8*!g4APJL38+-qjKR9G9I{WpOWICDo= z!?wH`7pV#Nb93E^1$f73t~DvwilwyNodtFUoALPmaMkepO4wi9Q{VDLztaYPWS-sv z=F$3a6E>^+EoJs+M44-?=^w-I|KsdjWVAjr7+ZC(y6lIfWVh?6+=JYxZbP=h9o+!&hSfi|?(W>8!&JOyTzr3q zrs)nGu%{jM+E#u_)qYN8y92t6b46x${O(m~V^pM^2xJ-k)lT;u`mNqv4Zkd(sQfd& z1J3^^l}iRReIIe7`_bX^dln)hQR_9Wd`7ZK$Foryj7CyY87ximZSE5(ru)>Vz?f^@ zBl@xIDlcm)J;XG1$-vS)r(onFYm*{mb?j--S9f2idr4kc5TLGz9|gE z?h=0(M+wb1FzY(cZ$H>ZABd&cZ5oKp4g)C^{xN>T14w;IZcQAITVv9 zEjgc;J>7b+u&~$;FD8nGIK1}3+(EyH&#S;FqjX|o_Q$N%UIEiGSJS_8&sh`wA9HmG zY#`n!ErOKr^qp$;?zRqan@DANlIGm{K{a?j0rV{NMXQF^Sld;rHon{$eOtO+zVg;+ z*pPlT>GtR;Op%W?DNB)WRd2|=_1PTvf5W)ZW&L?Ytc;V2oth=<%l`+9%Q#<*wxdgI zx7qvqQ(4=$ywI2=)r-=xLcY{Gq!9z@{DVk3?;$cr%IM<~wyvR?sNCBdI}j|b-BuT) zSw^Ulc2v_+beL58+Z8-H(x8HGYP-YmyPUv=&+fb ztv8Q6=A;a6=WWi173>!Nf^olszz#~(+Pyv*VZ8j8cw0dt7QAfo6&2?{T`Rw?H^?q( zvpH&8$TZaCANd#NACbO-EEEI?{47-Fds@_q(H{m@GuwW|)aS#t3-e)nZ_yNlala*d zCORzDX-Y#HlHV8|`Vmumy?bKkov~U|sG0aD7NNEq2Q6kZ=&1G^%OgEH@M&;&ul)NU z_RH?O45VewGjYrs%uEAK&(L1vKW2KgJ76T8+O+1))`ddFwoI1|ouPGeMp0?e* zbzNE_Z}7ITed`8S^wk$(#xa`ZBMp~v`BI|c>xZKe@v&*mOGATmToZ##R-%9X?iv~s zVhxs))kJxEE!+)=X67D@o?S1vJ@J-$c}mrIOMgC!IGCCmc>iMSI4_<(U6S`g=Zim0 zcdeeqI&2CF_2eui7hX|@gfhoocdcV#HPshQe=c(EAb+YRpQNyDj$l8gYgYm>e>~31 z6|uL+Mp^2!AfA@U!^OpZcRr`7Kdia6wK?bA!bah`ZR*is-rO!>;Us(%i!uc-A^2$> z3%4Le!a^D)bq1O)PnkCCPj2!RW#KRU+A&;;d3y+m8B<_+%$Htyg$y)~4K|W46SOiIu<#F|&Jc3p?kpD5N2slF`TdA%Ad1X>>|y#UTQ$ zt>=c_xdgq%Gs%%4Gj9dwfMO2xr47=>G73X8FdtjufC0aXm};pk(3xecE&9#lvEMXU*2|gF_yk*VOx{4|I;k2{%)e#~Tbgp{E}`Gt zKu&$cW7cqYK}kxtYm?2*yczTOe3HH)Rs7MXmYA^4*c~esMSScZ^N^T)F61 zT|+!iNq-$d_iU;WD8OpaRZ(|N_D0uoSK)|6;0UneI0H-U*T~==k#*}`QYZ`E#0225 zu!C}tKlLM7Cs65Cm8^Ikr>Daa18bxl4Ww*fuC(yV^t$yWMKuB`aALGUr=L)XQ4x{l zlN*_%h7dQ$gU^1fG-VHO4F;dVKG_jq;uD;N^jP8ir9^T-f$odP?>Hy*Z;97@!O4tU zmX>pfT02lX;j36XpIUutu0B{46{9X%w^WO>+;@{9i64vI7PWQh6;ep49GToZtlv58 z^n3doMJgw&Qsu;^mw>|Sc*P~i(0gy6+dZw-My^Re{r*X-mE$RjAh+>5V5y3{cjsaK zh30Us37zHW&r{5FWtw-WEH|rgqgly)ms4^$SM2rrW!R_i0JF-j96Hx# ziQSYBn+`0nBfi!ao9X?@F0$J2WSE}5I09Zsfn1>Y>d z^p*!CD;kx^zQ`;uzRE6V*hhmIN*_u^v|d|8--KM5U1i=}+YPC$%=}Z{ys1-X_F!;- zeBI*_)8n(4`b`m;*|SsgT+_(0XTw;>v*1zVJWSU)w%}0Nw=DZvrfkjKtYVPU4(vp1 zDKr1i^uGhx#Mc=dGx=WqFGH6?=U{ePlYbm1RMlq$GcGtvTDN2V(G+%?@TlMsWfXFQ zeMRmS(b%Q3JaZfLhTif|0dnh;o1Rz4+$*K0>y!LuEsb5V3p2OJc9qpnBnAc#1a7ZS z)z_^Tu1D|n#%1fQWfp!G&V0*|OD=dfS65NPF!CcqoFHbBj2NClCMXB%mpi8_3P8|X z6{X!{+Oxj8gK)z|9>w_J6Rkx1XQFu2*6+9#ZFL`O>EBT(H7sS~KyQp!7$pk)(PJF~ zAC`ZjqTuD}<9?Ak`O5O4@#8s59yICF$Uf-=-my)Yt1!l`b+~hXWFgz0Ix-0R! z!SQ)Ib&cy3SWj<|ke4W(UojUiQHv8PET?kDFuk$Qc>!2m71S2!$sss-))v!ukWaQngW+6Bg>pqgh zdQJrvPiyf7vJg@akYpoA;XD44~nd zP-L3Txu4Tm%VZuC+!nM2u??P`Z@}#le||=~_vmMhEiD-ZP%H-Nm1pQ$ebys`=bK8s z=W`s*ydD00$h3(r$-e^VE{`_@rt(M?r5ad=1i&l(X5@x{!iqujoB33p`0k_tuULpj z{>F}4JZ!8CmXN=pFm&xHQ)R4e_$rFFA}u*K#c9s-FFO2dKHa>K=KMrVc#5<^d%(y~ zSTkt;QKm0=>TK5fn`{L8L0l?(>&qt(e-%Mi#b!_cm7g#U{Q1~|zHs-2pI9fvIH~Y# zT(tAWTJvofvST%#&y_Uud!TtdE)#uZ*0G=ou8jzcvynu@*W5P8Y@h>ICHQss&-G~} ztSgO^5s!;&b5>Cx5lCo0PjUF-UjeUAQUTV%#WK`M=D!v3AvOtumnJr8hsPq?FbMhA z)^;e!jGk_#*Iott;}N&j=1Xuj2KmdnkPe_UhtBK8!@|p8XCH8c29`WRY36^^x7umHXhFNyJwi0PsI?S}^OuH&_IFc5#Ozx62lb9ZA2leFs!ldij*WwtL|eNq6KbJU{h8}nPrNSrVio3TU%?KJ*#HATGW1* z;Ww49sS<~aZgOlbh(;+kMNXLExc}0kbdZK&-;W7kzIsZsw*X{h-b*)B8gmH3AG`@0!ONk1Ld@B`D_mx6;GuBbyoU$qZSqxlzP2HI-Mp;yt)*IV3{=wns7*yb>_>gM<3$rS$;{e-#XjCboP zJEXmLV?u!2CQyL|PAnr*l!yUntIIUR1#^cOO-b}_N7B0MuVy*x_p70ZVAp!8)-)?0 zQS-gN3P0TpY>t0@FMa}al6{qVFQ}CVuj2IFf&W5$;r}uQ6#*tI;c(HZx<7Hv=zq6S zgJ)$4+WS{@F0Ysa>Tzk+lc6h$0-PDZYZ76bZs$FF6LC@04Jb?o$Sa-~y?XJawfYLL z2vJZ_U{}XPAZ~AFoNowf9DxsHnc`LLf zLclG0@l(0@EQ>Pok(z1xU{l=DRHSkSs9VBDmfTsGy;Y}~Pzpovh9OZEI1aWSuy2~~*A#n{VZ?uMNgl47SXeLfKw2HW6 zzYb?<)R+(*5l$s_4;+q5@9Xd+t%rEZg=L-%3)Xm71qA}fce&6v#b=zhTDQwiy; zqf@!Isl%JuIO1{6VQ;+F(23YCmegs@>Yg5VyK|pZiGUo`cnb=DAUDdviZHjw%=^5{ zp!j-+o=}KBv$=Pm>WGXq5yZz$Wr`e~O|579Z&H0qMPMS+#p9Q&9B*LrvZKqWZ=z$x zxUf#T({Pi(UOMme)6&hPP&EbX1N@_y9ZpvNIg8l!3Bzx$sC<&`*d}Zhd6oJ*|CMKg zz2o%*liMA~-F42lEjok3>G$w|2vIeNmSv{csWxIqzLraV8l{GY0i|EUW zOdiSd2T;8mCh}B^5cSr@CZ_(0CMlaI`@uACPtWh%rq|9K=9kW7^wT?IQsz zLtcyDeEY#o+bovf5}J_mB(t8N^e%17_YmRKNPl~YBL?T zEQ=QAoHmIwZBZ;Is-M(K+02UkVDfj5l^?RI@|Qo}TguhsoaZaF+FSbN?pb9f@3B{! zh&)lRVzVhsns_r_uOv6xEXCy5WhQU7Tb@Xf>z7A+&9MjuKo&Et} zE;J@sD8~1w#+0|YT`FqWH8MyPZJqy6h=#5u4<=kH=5ffwls6z;D!N*gFi4aj_*hh6 zP@t~g^+&YumT)ompGS^^{P9V>ROyE3U}AQsN}>CW=wssHnp4R1#-oFVzIQj9yzgnV z%#g6uw|=_p_helKRo26k`b5da(d4*SjlwGQNvl!a;2-?)RNdQG1T zuhwuM6L}OIRBhY;@)bT6HZh9S|NT(Nt)L~pWO2i^+BAw>=$o=w)L@myCeP}%VxZ5; z;o`(J&hk4_a4dJ{Mrdqdr;JR6t(jx+V2AG?s$WkN86ss3-QW`nnbm#_%A5KVGs#h} z2k|jlRMjZiJfj&T{-~&tlcNzXs|sCW*}PA3cBd2WLc^+vPlmH)=3jYfK??u_!cjK! zP^j&AE5K|}Tc(<3?LOb~ylct03mkVtL_IrNT?asuGbSq-vAZ&OveDU;&3az01`aT1 zO73oeqEa2AG7n9T*u3k*WmOGs6-6+L{j^I{^Yl(u9~*s6p+<1Hxt9%Qnz2$*HGOn@ zy>V0Ww<25O*Fe7Np4!3#qu)8B@I4Wkk0L~hu_lKyWSuhPXwYmrc$+7iz(fYaNrp=Dyb^$?cTQn-uCN5Yc%g5@~MF zi4S168{xDIL981grvuHgTCN5OFt@>L{Y0{F93oW>Jr>$HA;-1PMewyn5pG88T7#c8 zil8(?IadA;ersF@f<1c^v(A1i6Sbqyoy40oGu4Q+Z>)kjUHMs8FeTT67M*0@@SE=y z=E5EFUw^!ZPN2B2Ne=}uxul2wB>2F0V}+umi;(>!EVr3fHy$A>5WTGnpwbP<=>}kT zV^VgoLE}LSDo%Yn&EmIMqy8xBw^08_+Ek-pheed-o8TMp{tLV2BKGl(LJdA3xs8(R zCS=bS=bpmQ2b-je1B!uGG4nXN?eBf;e|O@)a1QVH8jLieZqg_k+D6&ifxQ`qZ8{`V zvrPl!lMePjf0ucW>O&p`M4@^yBf6|b8qqe15(@`WBBJD-i=PP~O-0b^{y-pgMhz!} z=wL%rA~sr8HWnCgS#`+s#ll>3dL43l8&vZ4tW?j^kTME-k^_;;#X|6M#CIk(ul7`* zYmhQ3dX^}{l_N~&OuctGS%ndnV`XcY(2maD3Ai93{E%qQSG^}{5TmawP}Z935K;dj z{_w&3j_61XS%o4(a*%F?2jq1ia0cLcMZoP2I>Y1q7aE#TwN;cIq{pxkf_DZ3dSBA| z1*-S1=5H})K}d>C7MM~4(WEoOrHbj^^xN&UjrTFnnHcIbrW)K;}6`VmEDLj2WfbKJ?a=WD8mQLjkuR<9`i z*W|GfYAYNfyKD=Hnf(+&u?23BBj^pXo!@TUgoGNDZb1Tr&cv2iZxK5#5LsW}dA_MO z?b4RlXVmp4)aL+*oS67tRGgbyuSm&OvT^7vA@zxs>=SYN6GHRz`~Ud2`|h59#v8pH zs;9Vqfk2Wc=1mF>7m>iQm+s#3?%qXX(+P{am%312!+xz7OxqV^jlhtYZt=C#niDVJ zZD^$LrPso((C1h9zLy{Z)cALEEtt%X1dvwLE=g4bRAqE=DMH|FL8RU0`<8ww=jJGr z`Y4mga+8qq(B)rSYo4HvQ|6K_`u%_OB`56ryX>3UIxdSR5I-+y)Cq)R1t27Xv?olv zg3eskQJfoDoZDP%@~b#EK{~Gdr!z-civNx}6~ZeyHET*<(1-dbL(<3yP1LdHB*iDJFK3` zwX)i{wZx>j=}%uiRc!4D8?*LsfLnaI$$AFOl#grY_V@Q$1X zt|cyMYzV?*5wn%k?<{%ntaZ4zv=_Cu7Oh9>i!Aj4!K&mC#~7W$*p_CQIEu_053JJ( zdZ#OIf|MrAt{rIIaF}=f0VdIBKELS*pW0p~(fdgBuku%JNTI`}L?7i5Yc%(fMttz} zh5jgrbOfY$96LzWq;-|VN{nL=vE?%-=8LNwgei`1 zf~$B;H#5aSTL5w4PB9w&wC)M4L^Hr;Lh>huH-zD(2-1W%o20!g?G(@m1$3B#Xi1yM zC|@|M%Ri<}x0evvNr(!Quf+jT7$_|d^1QKR-O5-LZj5d$DHN!7j#Mnz<6m}zcs2*n zkvhx~TkeD{oK?4Q)_^~?2$@=fbbe9q6sm(_WOYu*!}&+@9(gj^`9ld<%z>P5GHW-mL1*aJAOtFiGuA=J=;$p$ zgv+vB-(`=+%S|Q(dNpM~-@x9_Zhd2|{2j2gd2mw6C5YP*DPr&$i4kAG&8q+(K3KQ} zCM_v9$6 z5|mY^4yiV0$hKR{c{xZ<9?wyRWM#-kWy+HL=>$E*NEipwgI!S+)#>pBdc@Nrny&G{%;QL_P%@D|(ppNCZba z-ED%_N_WpRggCG{Q{i1kMI9y}YPOr{-fFMJcbv0V$}+Bk`i40Dg9BDoLH?-0%G~Hx zK!l@b!gdS{?=`nl_tnX~&ms3(z-m{|7`PE;+Q)bvtOelu-S8*BnVPJ3-M&34v*^jJyXCKX<;{3g*q1KhkG!?8dFP zerQT8DOk2uXjy;kxvoH2kZPgBV2t_ucHw3%9J%RD4K`@6a!z^I^0?iviX)0gG;#4L7MBT}} z_wqk~X+r?(w@=R-%+#z(XXhq)oPE+^7S%U}7pAjEwT@oGXlFedw>Xvc4a`g4t41*F zfhnku%cs&S-2%jZfCiI&uI5fJT6fJ~T4*`w3FC1;s+CT(=Ozr)ip`1Btn`OY{3C9g zvDyc(5RgvUG%4#`eM(^jUSRp0M_CCsyY|Ji7}f%JJ~1(M%q$$@+?O2>ea|NV~NX=z(Og+PssDj}YSj4s$V=YGBD(fB?WpZ_-{ zpc2x4&!h2PwOmN!hY+#RiqBE)D==?)QR6V$$vAM$N+qk{Y~w!bBq%* z5547ob5=+DY8PE-?-o5u3^mHdK9-hcl^{=-%~M_kmMUd!-rT(t_Q0#Vv-}q7<>Bw` zYEwmpP~LazZT)2ZhC40wABGEZdv|XMf_CBmlp+e;Ze&U8Xuh=X%-XD9zI35R>LeS!d!1SF;Z1d?66xcf>a<|X zpZn3XT8b367qFZFt+<|Nul$~*I(VId9xT6|9xdaT&lhF{Bo?SnEaRJg4fU+LJ~yx_ zr=(iBv#*;;H0!>YSCeW<{mu6a*icFT-^|E?dK462uQxTcIfoz1%|cB2AT9Ismq*^n zj=#>bjL|;i0E;_TRsdai6#&06t{)ro3YjVY?xfG`uE>3!tLW9kj@gBQ;x?AvfA%etl2(70qE zx^BKe--nx;q*>ZVTJMi&)7J^=hYi*f>G%IHdUY0#4PRr(h$69WruLUl+AAw-beh@2 zjqJmH88~Om|sm1wR{a(-U6rM(GYaD6@{taG3${hFTJk!)s%r+}g0TEOPMY{5FB_3Rq2DZ!Y zxK#uy(`2nw*HPiuZ!~(WA5W+&x>y*m{kKhA-TTioe!PIf;35NQ(haem2CA=IJi)c} z2M)zYut#z>@T?r?$l{0P`QyQ?C;cgC#;kj^ANO?IP)dVU{fE~NqO)#oxoQxhszNPl44Oyxk^9*e)F#MgSXKEqi5AB;MlWj-Yii>OVh}qe6d>-Yof$Oq+nKBS$dVG)%P=#Z-xM zWGxu@F{QN>w^?I9f{a~Ho8+y2R>UI#5}_Q4HlcPUGM+i+YXw_OJbhF`a+&n0w3YmC zhGuU+g{$1JJr!L@t$VL`vz@Npz+3{%Vfo=E6W-sdGoH(! zqocomBs}@}ijfX!Bu_dxi%5F^9>>Nos7rbv#Od=aN28C8VdZ|nyAjN`uJR)L%E0gr ze?BUWw=0uKyAC zvSuU6Q`F-HRk9rFUSV2!CxppMa*Pq(0X)?s2zHX?+;X^`qK61XKKe%mx}BBfe_OQJ z4EcsD?H%QHGSz3{WU1@cKzW2G?oV-wr?zU{CQ;ytp@m=ln-MVzJQJpy8b;ZY0>Lrr z{zmvqZFFJi|80)x?EVaPKLT(|T9>dTTt!zDLFb7z1LYNY0jKtD`3rwmc;$)-i``U4 z1u66{k}_TDY25^!F5p_xVk|!`MRd3Fv)t5wRehk!;L(4LKf}wW;hsN-EY3S?>a5xR zNBW|%bMjF38PmO~p2e^=Wv38z$!s*fbIOuuK8{fIrMV{7|;+hY38 z`abYQ&pIfVv~4P(#XglD(nK+;XkU4#D=?j~pPMSK5cDOJKkBCVo8%MkpgD|ze>BnM zJx{9L?An-}O(|0&MQ+L@r|wt(CAl-IO(wyO`bb@>YDlCwl|yx87S-OD$R4WYuL}eA zTyvN=!9pn|k@_{(B{Nep$|%G_dZ^Om=qb9Wx2Zx=6r zzF``?k38cG9}^C}6bujfR~en2yZpKAvVxq%o%%ttGx~cwZ&@^2R`|%c%(}b(OGq#F zSDQ_RXQ%n?652Sea3iK3#XS?%ic;77(YqSNOpA*F_T*|JYSzr66iX zY-I&wgP=M$E~nanS;gji#~R7M`Xisc>`GKA9jwrmG9v@+K;D$1mgthBsvf*(mYrNP zyx2FHG4rGS`>+iQyo2nho^9s#HsoSsyvod|-BHB+c8PxAM-F`d?6`N^EbU5>jSuB_ zgXbPylKR!JxPg6BSRPhr#(Hw#2llfl(v4qO8zzJ&)tG-tt%DSe^$4Y_*%6_3?UR$F zk*WlS0JstOQkAcbsLK?fX^31rk_M28k*gokZhUjuh_je!tz#EZ|E2(fBW=JO5P_Tw zK~Ajgg97=QuyfJ^mIkR7?EGa>fkxvmM>wI*TbAL~sM-OX89a?Eii3a!ZjLP?nQZfo>#F*)s zF8A#hvPV;Fu(Lw`5~vzi&uL(5DXoU)`%J?Uv{AUA9yijL0gi`Ljq>}TZ%Z6ni$_zB zA~Tn|GxCtxC>bVKs?9`V8q@z#JBJkOP+=3qZjKiN^kuB%xvb_~%&T1*fnfhW=m*20 zO*{oP*m-=I_)#a;DTL?(10cH`Tjvg^!$Q7WKAaxxsFAA@J1Gi7{L0y=%&U#UAdgl$ zZ7bLn*r`@C6tfZE;y}SZG{=hGvL2u90A*8~jm9))pu}T%?hsNxyy+1xDoKlX8ar^a zsV$8Bo(ZIlI`%2z0~5$U+V)Utc20!wOaT>DNxn&if(VfQ+FFshixAMOD1XQPF+R~5O5=T^AYPlDslvT_uL2zMW#GrN!|67qPms$N@NU$1l_nV6I!k7YgM=;^tU= zSNk-}e8}X)OwwG{2a1Fmw3Nnv+^ATbdS5hCW+$?0E*>l)wY3uI84?Zt%Vt$!-Nmq~ z-ard2!^_5x1|xYPp2G$cN)0o0e{3zx&wEdRSCdR(-nP?@dQG}pm;2$b(^r+gv!z@3 z3%|KD$y*_KrSa|1?d}=s+;e;>c%ezEhwO~3sk}-UfQyy{3 zBQsrei%n3kw_6poTHMiaH?oTp@+~>CQ7k{Aej&BP79$JUR+)GDs`!TNGO1h2mzMTW zc79f|{P5>Xd_xQ!;H?10h_I6(GgD;g;xXjNMS0`|NM+afXq3VI$CzMdC9LFmTlP}!8X~EcS9whq1JiRn_2{QRnc;Pw$m`hyU1FCxqZW~Zon4!~!iEs` zyBxo&s1O&P>yQG^ZH4hTD^85N_9g@VZ3U(krB<*`z01u(c8Xs|XQDG&dW90{7o{Tn z7O+_T#-icbAiZI)JIgUy9n)#vdEGP>*i7MNE@hdj$c0>8R$PPBR$nf-9V zR$Er}>jdgwx5S{h$~8y9k4yX|0MiPkZ(3-_96qR3WUFs~^@BobyB6@)Trp%u{Z0+5 zXPoe_mIhL;`Rb+WTzTbAbgBy+@INdq>vkAbp1TIOuh1cj%Nk?st;@mktF?0%kScv6 z#%VWfF{XSn7??;Na;K~bPYpicM%iR(cM6M>=RDM#wq}@G66^vBm{{9la*yy69rGfO7(X7xA^SjU56c z>_#8-h1V~m>4W6!EvLH4ZLiY!+-qG7ufQ$cE{k1_(7+CImqRrA8}R3DhUzxkJAq7% zp|z=Q5%m*X=b!;ON^e!W->Vpp4+}7{a%jyI2KZj~xAasM{-5hqE-UTDx&svFhrVIy zjd^mat4zN2S{I@Rc~vVjVHtLp!ONJH9==B2t_AX>;jD0j#ef@>m#`@~eZmoj_rtp! zXJEd_1481-WienRc{-5p0AuJLk^EHR6Yj8R1v58Y^gAwEpx3=0VC`@ftEgZ8`|JVl z<^GI?^%?tVQ#bsK{*^C=Y%fxpUH!=W{#Whpue!L~>PunmlCQ!jL8E0^{r%nyx46-H zD5bNq6k^&ino?Mf1OXXtw4T>8x~|!JSKOTHid|S5_seNRR`1jJ9%kkd1;~++IiqzAjp|IKeklBIvJM<>0~wt_xs{> z)%lVHq3aI1<}Rt5&wn2Ebq#B)Z`k*jnDTvIpKi$sa*ntgOyv<<40-5a7izg_KJZ3kJVJlB$VG zU}i86jB@oo7FdXESd4N9YJ%O~vnN}QHi{}`swb@<{voK$ulxuN)_Lz=EUu`*8J!cL5BxQup3HVbdSjm=~$ zZgB+mBb7_S4Z}oG-aCY%fDRo=+@T~2N&Lr8M7sDwd3sj<({{_NMgj3#RgBkorbCDl z(H{xvAkxh5pX@xLzzKU#`DpPl&+=-{db0r6yMgs2QBe{M(k(_H9sHYG*Z^s-%@(7` z+MK%$TUh>&F#5zew7*auI-YM){>Z3oDq;DYVG=B|$*5+%s|B~mJP(O#5noVqQeHK( z^p&FCT3#=k{Wa6UpS^4i!w~x`VSG(pA7?CeIWyoQC0QO<7&LsU{r$8psGaLh!)t4v z;o*uBk0nl_ezSxgk2rP!yqUI6^8K`E^K8z;thc=ImX_(^$wjn)7OxjCj_lKv3}M2j zv~|z;^}tV1(Vu=_kELlO{PI~FQ-kWYqO*xMkKeMVqPC=MOfWmfxW>YF#3TV}=`I#B z2V++@@rT3jJi>{%-hpl2o!JnfQZdh87|e6yPR)T1@53j|dG*Zk1^Wn4Y$-rdNNd7< zCW}{Cv%a~6+K$onhrSc$GL7v?6iEC`C8L-D9;jUONXtqp4IA4!C;&}Lstx|t4I)X=M#@X@wbQXHv-m?4rp*nNTPNnXtO`}OAJwwV z!%N^{?36pq%W&!av8&zqL(*X=E2STE)CVkmwa7}2w8JKdvjrA&~p4n*(^Ic>AP4h}Boo{)<72k0< zk8GyN?BfZWLhRjlR~sL(CG~RQzk>q)Nb>3}FsG)-fWp~NU{?knj#aMl+F7+626h7& z3nc10kpT!ERXtKguB9*HHf_=m$+Hx+W?2td;FA3qnbe=By9ceKx8an{GbC4&tfKvX zVV63@#J1P@8tX^v`s}C&fp%0vzL${DFndz&5Gy@udEs?kQ{1 zbEhReuD>7EG5!X8AiJ6UQ*1)>)X-EO5kw|l((5C1#hX>VBO31%#;?f2=KPK@#%}pR z+LL7N)9cev-Mk4BHA#dC-d0Vz!HSVyfZ-;}^b%@D`RJ+t{OOI=iw2Fd+&H(7cB|G` zG6s$1cy35-QrUZ-ugcp}@b)q%i6uFGi+CBxS~w%*V^_70p?jd8pZh~{piNdeg$TL$ zAo7|vuk0C{yY88s4GpT5_m~WMNH@O-+wEIrMAh2khETtRGfo0EO4CqZ9zQe`hlUP? zd{9Lsfsk!Q? zNKh*DBJ<5<$5c3AN4A2-Ap^z2i-89N=FKd?osmN~9*HIf)p1)g{IvgzMwCOux$&D1 z3r5&zq^=EP2v;*DcGRH!k}+UO`BP2(-OKT~Jsk~pazaeiQ2+H;4-c*o0kV~$clNPj znXC>pGZYvagL3PhDS~*ciBW;DT>UEhx#XzqLBzAChab)3dvJ0b{5Olh??UuhKS>`t ze1$=UiGY9r$vPT*GZq0i{H>XZq2HT(0k>|F89!n+%s-CD6m_H(qCsd6p*S6&v6z|; zs35uUPXBVpS%=Gq3U7(t9q=+Ly9^SQW<(M(Xb<&A9>e0|o@B!!G3W%%%e$BoVQb+l$Q8S!Srr<6B@l^W5CutNOI<)M>&*8Z$d9x86ZZ@Xt{_y8lC zX-l*QOM!73;Oci%ZbUfws3z&4Ic8%Xn_lfLFA4Bnarw@A_|=*)z)u6LkiHT3t|S*{ zX?Q9CX1jl0Y;qt(iLM??m~MStmH)&goAUx7u~#Fn>eJFI`KFIqh{atc|5C%} z1+lG3(o=ihS+5o7#?Y*Bn1{yEI__IH!0COwceZN&ARax@R5bt%oX~3m6{+rb2PSbi?ktziIQ4|8 zE?yk#n98h+Rd`<*s4k%;ajdrV;Z-P;EmSr8M@p%3`K+1c@o@RLbNt}^b}ljA7n3A0 zz83?bIV2O$`h6rX;iVtk-$R2^1Z5i<&=Q@TqSmU;2n+A$uNeG%q^)XUTRc6Yc+F00 zWt*L*6p(3!V?aJ||NU(EeLxVPtMe@!P1|JABiI^XZi*aL6dhL-eWGT)r3)}rjI1}s za?Y0Df06tABDZMgvHJ#KXb_2OhCYyun6NuLeq;PV5^|q`imeNpFG8N&CTOFv=Z>@1 z8W^i$F&08=J#k#P70fV2;x_C%z1QPay5ze_sOp2&L zB}j5kl`vN@3q|AymG*i7Fp+mq3DSjr4X6(>%>rt#8@QeqkU_~Xb`n}DDGT0 zE8?CLiqeQc%=caRI^2qzhtM`Jvn;$qn{$)!S;Vtx8^HS2D*@WZ0|;wJ9W`h7&brWHj>-hL5aT*Vs zk!_&gW<=_ZebQmrNj+#^-4*(mwI68rE|O5G8~R}Dk$_X#egD$C&JEvJWq2xl<;aJ= zuh3~C>M=I*QO+KNJ7S(SYuYjJ6(3Of&He;)YmQH-x6QK>8X{K8%Z%S7bS%b((x z{!yMfX98q3^!d=sZ7D+^m~O9`76J))Xfi;QSX^f|>@WPbAvjuLI0JZyF$E$ny~yqW zOiMA;UV5;2+~$FG_1{mZqXr;XnaGLazHeHfC$^M8R71K{5HZO@r}9QQ)5Z&j;2nu7 zZ48+*%feeU;Xmx(UVa{ZEr&j_tBa!_CcX35W#hQ%>XsHok4ui+5q(RKF%I}B#<(r8OK7HYX7*t=dLCqMo)WJ@KPH0YN9VffXFQ?p4uDTYqD=iz~c{&q$k;RQKkoe zZF}Qn|Mw<>b2Oh9WcdlXWN#w3)_64ujPglDy!Y9fSiqyCiwy53osQ>+$$|M@>*;Lh zz1ojQtfEKNer|ow#!$4*UNE%L`fQ%y68G{^sb9)kIoqA#hWhrAn%xsg(<&luUA0{i z$a7%k@W?HB&)xOR{U;2=xhLJ@v%yN_>Bfft)LAgaxzt;W=wKezb{3#pzhe98>w+#! zmaqu_@QC8@6b~(k=rK!mD8RBCwTcG;AN9C}MVnP@g~4%ptzx6;txuBq&alSXUvC!a zc=DP@W;e>t7MBcYX&(c9dVrgTwe5sPjK{#PP|^m=nC$Ra0U5RS4+aI3yxQmFD$i&; zFUU+`F@e3R?LxqlOsmZntI`qosZEioM?C&swf0^8m6CPqg;VIczv!6+S0}o=MY>16 z{)*B3#)Gpq2Eqapf+dH~=;Fy+)BaPQ&k|D@fB-Nq9I=WXvu;`%dKR4^%lONA`^%+u zGR!FO^(pjsmu(FOVX_8d&IMyi3q2ijh#qik3fH!;OQF$Of*p7f-IibicR74_zzrmR z^pY&$ip=GPtl);s=x#NRv2#}L%|P}F^C@L&&^*$U8R_FZa=GiR4mbc3_~ zfb(`r>#ValdbxZHl1(rJWZbio=c|Y=N$h19x9aaM-J-i8m)zuCIOT13xfhW=vx$ff z*86V2#ZhgjJJtP#q4P_LVhIC>cK@+~Cq4!i9X?5jqm!8`Uq!}7hc3|xlf;EF2Lhu4 zl~fH|Je#bJll!)=Ia;E6OVAD#$qv;&n^2vbsa;!1yQVJs!T7rnC#QpfAzw`$$kjw{ z(F-iR&Ah@$D$-TJ&{43_;RRM;RS%SN3IzBsXs(T7?_`qGaPgLaWv%4+s=(0?ZwD8P zp8p-E!#lvBe3zY^gJ%#LqKXt17l?&!Kyp;eep^}=Em5^KqEDm`VWu#Bcc#LE*j5FL zXR@pWlFm25O2X|BFF@>TBQinAYYIcf{?M8&RwKd{E5$Q=QbYw1j4(hGfT*@N>aQ$8 zz_qT7C=I2?4f55S_%wkK&Q3W0DFogUyCWNuQF?QoS710SK{-Hf~!vR-rHV>R6gvL8ZLet2x8D{7?LliJe z)ZECTQp+N0tj6G^)^4S5UbqB4TLNP^V++ra(LlHfe3=WB7Ns{y&6TyQk{FtjK#H`8 zXK}EVT|shuEhP{Wn=}ENv<{Q>2%pp(FVmw3*brhNHwy>f!okW1Si(<#@ANGIyH#6V z1E|l|;4o|OCu{JwH5kR3s3AK3L0a8|MSTiZ#86WNGL%B>1QAVG{aYKJ{YM{;*~3pk zV1X-C*8^;&Ir6av-UV~3b5oP=p}JNcWj!Tf?I4wQkZL=~raij0Y%3`iTNxTR1jq<0P-(emdPYXpGY!35($1H!bu`pp=a5I z)U?m)fOpGLv&&JJ(81TZsO3~D?FT@&Fcd@@I=Gk`(@BuT$Az6@R=Yn2(k_OJc0rA$ zDMFI*nN09A8MCrlI~;iO*8xHN6Wmyaw*4M;{5|SD1%SMAt8xg_eh^bSfpAJiyEe7N zoe5y1^*zy%`G+g>!m7$yeNCthqA-!gJe0J`nM=im%Xrz?qy6hf+aMUO!ED|h-Q=>} zVnQ~u49dUpw-15I73Wd@L|n#0lkUf+0&JWrr6mN)5_!UG-^2Mig&3RNLhE_PL2lDJ z#fwAl8JeShE{K)p-l0XXE zGrC@8vGJ=b!_v}yJ%{ft_XnHpm-H22``W4n(yLx2a{8h5iUykKuU1eszK5FMhSOF|zSM*t^X{^!dg%Mg^=KB?+R1oyl&aDoZp~bL?g3@iLRq z*W*UdBh42X+`@_RF-+Q4&Z@?0hjKqzO}K+8^sXvx?mjs=QjylD%}ie-|62Q@sg{4J zhBvG8{%FW4pSsaB2iSF5=>-%fkkhD+zlxYPR{^8`!4yjZ&kpJ8h9UPBnyJyjvTI_9) zZ&&q;Z|}D)XNXzk#Ci5Nv=`|W#C~+1e~UC)&qf)-Id6uR*;$R<(90ea=~Rtts4&%A z@e$}i7Y~aE2A0Ra>Gi0`JS=;e;yNQgSNZG*4+J?-Y18>H7d!EqbNjb{Hq{wsMI zXf!}-_DdDI{%Ifv|Lo%JAh0^c7GrV=9xO4 z|4Oq;^G@Z?Ek9e9_V}#-XEJqt%+@k)82QiXhRinPeGHQRJN;KHFQmj-&O&o7REMUC zzV(C8zcX|HM_hZ;6!HHy>Ay~Z4I|ZmuSTk^;5*LwYGQ)AslS zJ}xeb*1qJARxCvCp(mEd4aNT34wl#@S%Hk==H#S}`16X2Y;T7|KFtrk73$LA!4;$u zNOOD6vvjR}!zy4USI8*!db|wuH$$jwb;Fa<9zToDg0KEO=+d|Tc^_V0q_LXXXn9Nf z56Rrpl0C(D5fNITp-e^H}l0^o?7NxWZbXde!QQt z8XRYY65*9P^MVI?N*2GWovD07*L^fH8a_=6>A+c4=ilzgRX_~&N!p{IWH{szxwA-B#!*ZKBisy2(?t(H{ zs^65HU;S7HvkRTKEhaliADr;E{B2q)a**C(3>h!Y_}EPtUp$+osJ@HVuk~@y7|Afa z%JlgkTVi{U_VSt3C8341EsN`<#~2Z5%%Rh={Wj3*BdK{jDXK8>r7P9ma2;{XhwMmuA5hLn;$- zrQMyE+@#dC6`i3o5zf7wq^i558cD-HtKs9xa0Y+t@fwQ-b7*r1NWpvAa?a$$E;t{1 zE%TfgPU3%mH4GOGg)#DosTF6rsf>rHy3>7!wfx-=vZ(CQSo>?g#2-7xeC%Np6wlLC z&oAfxLuIzYj+s(GfK?_lrDSvlSH5|+<2P>B;b=Mk6fy-S1wxq5nmR{@RTD{G68SFm z?#rP-g312h%2hQad6%!^+nH`-BZ9R4hKfFXfO5i<-3aW6&J>mQVe&F%J0w#iYh?>zg8Ma@`VwTU!X?gGRvrVo_qDuX@%1aU9LF=$?ttO;XSYcSh-RVGl zb|d=WA9Fz{ayy1Q(xHIjUlaJQqr)C5vA1H~CBfwzw|e3+NGmB-k`#x^TidrBAj^jT z@g`!Q4myakb`^0!r~UmG*~v8zR?kx-$KmH$hx6_ENbbzy; zYB-3q7EW|=*-PO)4F1L?0{hev?HlR31N%CaYLw8W162lIYf4~RGKEB=cL`~$q8JEi zE2H2FP3fW(3Qif>NRS1qG*vxxQ>jeJLT321o%V{$BR^5)ltvB-LG@84oj~d6t~~M) z>mN9yGTS@Fr){0#J?m)CcVSw0yAO$&KW_4gQ%?Q;Bfd8l6GXBMe?Fr7rA&V@^g-3M z$NU!HIehtZ(y7RuG)LLi9wePQ5J~ph&p!P%^++A>@T+CSk9f;*-N4If)$L!)rVzf% z=cQ^Jjmb%;Z+!C@dD8^iRC!sk?bCcMf^}TD?wPTlD=N;v>2dImWJUt*N0mm@yUal1*GD}|Us!_1NShW@2eOCI$8dk`Au^dCZB3=xu>?qxB z#!AT*3p&=!>d}F}=h~&n&DF0IIQv3LK^ka)lkz@%!w4H2P>uDG1ib~Q&^B(_eBF7rkgoSmu0jji zxNEiOGDcA)2U8I7z1o5118AlAQ3Kvkty<*)N2O%TMpcY9_vKIdEHW|&>wK~#XM_L+ z1Wn-=Xjs4Qy^{mqUX-;epCmaB26*#5pFU<}B_p38DokPHC&943*7unmf&eMhq}T`} z+-frv_-urZ5J(d@paZ?j2&JcvF_)?=2WUVHoQclK^KjS5F()o+06aML-{on;$fD=K z!Y#~tOr(0Trl2}B0cV6-%SO8CnKL(L1Fox6RH?9f4en=WwMs7%y-ufro+Xb~Vbr6Gq*zSy)`skL_%TtX9%3YrnV1~- zRC$A~bAuCSEl)x%HugdP1l*&N$DyA=5(ge9r$jM^6P0P5R=*9Y_wU~r;Jf9)0nSHd zU4e|Hat!ee=c4=%5Q{;wp~G|7kb3be#x7}}8vNWV>#)#(7U_a&{Ah(j4+m1bsD2i+ z#@bfaxPhn5Gau0|YP|J0g+)5njEt z^y}4{)2m%7+5On5YQ~jW0x#-*J>1QvSdSLQj89oEfj?Su&JO8uqskd2sEXoarG9$w zP(9j|SmS*8-j_gOOvkhcY+Mp2MzQ)HQAsH1g8D=)=f`9`jp-+hOr=mUNU&-QGthg2 zoN#MAR$NpDMe(ZA%`?xAAkg%GN~^uvm|r_!{Hpb@sR52oReF#aL$_% zzTU#6{dtwq`sw!s3N}Ooe?~fJuEn0y(*lfD$W;jl*La6hN`+Phee)!;|eE3TMX9SiYbq8GGbNDf3YE+_FW*<4SRi@qa2lqh4&7Is; ztJan&^Vt7BfBwo=@g?54qHdTx+kD&Q&xl$7ZJR|!t26I+p7fJ@XaDE7teuJRTCANX zF19esus5H-aHyvKVTI9T+12N>###8cdM$7@qhY4bE+C{%%TBbyUuVYcrzYgHWK;!i z&*W+fJJ%{&Q5hT3KU-w#J|jExV{Uy2d+q$Kx62$>=PdL8LDxyRSEby2Q>-PvlL#u{ z!G7?W`QYTc)Wst8xuGR*r3milxFtKk!m3zyc>fQst_#qN5VL`<87IZ{g#0bl}vWw98`8pW@|hnhOM2O=dsgI zX5!jGN~8V2;}3>Q2ZecL|G$trTFE~SnaQR8@bl6?HcN$g=U+P(E<6V_@rCHa>S_M` zo-q8LfuHC>y@;jM0$Z)Mk`EhnGw00V5`r)YorhGDjya-Dwt_{Tq4%Mjj%^^?!1;_1 znR5gyRQGMMD|2T)&H$oH$+?FxXVICZEY;B5k>R;BMduP+eOHviB^5tv4*fSvvYOP! z%jkHmkydspdNHc2tptm6S*ilLsxD^jP24N9WN()Hr(4rj8?Z7%T{mUT2#!nKB=%M{ z!I#?A>aG|9ON+YuEP8=;v|KJ2ysc6G%ZN$XY9}eMWl5p?n(vF0x--7>vRXaZ5~OAMff=J(o;1}}&YfwS ztNM^M)xyN=6a9{MQ*6;KOMY8hS#*w2)fc>=$yb+-I&4@yc3(bhQ|MBYkXggEk2)%W znA7xVCvNx862{gv5PlmJ>mR!}QF4mYBtF1ODPVzU5B*8mv+trXc#L#cLp8}+xY;(L z-GeQ7gnZ+d$~CF8IJSq})Y+HBSKH)sj#Vl@nI$BHcx~ELH(MG=hB(uB2t@iMcTFGKBs6V-OOXl zzA?eeYaZHz1-kzf9MX$) ztIGtt3-B_sM0%kCo3K z%Gky`c8JY;9b*IAwlWZ2d+O_@Z$80bdO)m%5$)uS?2LzmzJ{II z$gr={n_g#gWgE6ybh2H?WjsUQxtVD?9{P336r8w^mVx`XI&!?4Q3ch>5i;}5P=e22A6U**A8B^BFbjQN^9hd z@Jk^b%SrzZExiSI_(Oj2F*d>b5eq{!$9QRh;T%vPjeq7WU|rAx&ZAgdqm^BIljgX8 zzj=S@6Dsd7Abi>$Jaql^r(Z&$xJ+$a@Y}Mp9E^Mbkl>bq<u?$zVE?o}(bO?T|VLC_EZ2AmbA z11nehja}7*eZz0cv`b|&@ms-zIYjT=@`*~}Ap1lt;1o zLY3LLMIJ_-kt{#>oMqy@rD;xzlJiWVWJ3UfpNU7eKn4ZlThW-lk6TJQMy73NOXqRD zw4NU9c))K8`jS4MvL9nP!-l>oxOLU94{AONr#?wj;bU)ETS%IJ#5hI8)J%C4HhT0^ zji3XxhINYlUADNU&VKa{z{iMWsTQFCIO{%YYujooql4_bKH+(7`9qIHO!2=4?bXCB z1_dbLOI)R`m&UKVUwN3E=l}WED0h7*K%{{%MrgWHLzK~*&3!S z@mE6W`eD&SRDvdq7LS{#H2gIMF-z}nlHLm$XB2=;<^Gb?6n-N6#0>LOZ3}lAKx0y~Z})oc zVH?RjhEhKw^=wwOllGgjcdfpm)47L}r1P9<)*5e)RM00$s-RMfxvKGh4%uX8jERrLKK$tgxIuI#HI!BojKx6-u`c^8va)7lX3y>svX z-SBT$(*aW#-)r!Tr_`E#0=hd962Hkp)V6fqOX1B3vFUx^Xa&gnqPh80n=aY<&c- z>gX?iC&?_R11OSYxt=Z`vDeLG(;6~1R!V&*O8((PknC^oX{GU;`~BysxCB=9hfg`|4l65f^MT6p8?Dvm%dS_dw!|G~HakPzFC>2P%;V>#vo6=7hAC)4rXpxGg_; zA}@>o@mcl5lU|wTiR%l$` zOW^d6i^^o|{^FUwa905?25d6{ClMNh{raA*9(W^ua@7uPlUy^NQ z4AHN0F(?Cu@QB7TkUumJg>BpZI5Vf=PoKM(wi8!$a*VKz^^~y+HK*JIJAaGNOKesVN;{|ClyrdZSLGXj<@EBj!G-_fL)$fvF(LD*gv_ZrdPd+W-^n;nPd(X3J z(FGa2iKHki^|Qa){#~~AUB60}lHw+QTmK07L5Yu_9GCgqy4H5^Sgv5{E&c|(c-rOVq)i#^#0AR`! z8K>}-2{E$-b>WauF!EU8t6H|cB7lc2vU$O)yiaL`g%iio>d{l5rry6^5hB!O?Qi}B zRcXB_^?Fzc{q=U?4I$pJYjSm49tx}6;yc~W@_)(=`i?*du%rRDPG@i?8p}f+wL2nL zHFs0yd-0xmd}v%-W<@l-^Kc+~}iK;$pO0#$D zsc4uNGLii*`&%Tpj#wEvSfzTU+xmMlq)M8ZT(h1|94~AIRT|y=Ivp&gJr&NVPy3qDyHtk`Od?q>?m!y(?JHL3te{50LpeLv{WrbW>v|Y7l7d4aVAIy>u9RU&qM3&AeCSwvR($ndy<6-a?mNZ_O+tJ-Rq3ySN?7(Aa2ryDcq9vSG6L2 zskmn=N}@eF;MLN;E@8P(8dI*s32Ue*R$z{QTJ9gAJI@APsd*f*V1`g8b>Zaw<8qv6 zhA*TJw^#`QXgfW~`}v#0<3x2W$jd#HYYRBNuCY@_o71%=|9IU0CUmRT*golr{{-ET zYvdPhs3$hfGID-v|EGGQx<=&AR#M3}xm{O2KWd*~T-L6CSdIgl*@*CNM9eqJ-OX=~ z91_4Rz*j~f*EWUSV?JMrx^+Ao|2_c;=6{0j`Wo*RgmHTktt3%;$;w(-EOcVit>Z5Ht3f+S78X~}uH15ZFpAbu($^wBtfzp)(OO?{15R-rZdh%*0mnD} zIo(8DnvvYA*qqn$HK9`>^!jV~$2V%w05stc8RpYC{Of_1r?VY1k2`KaR!JYQ8+Ud+ z_F*k{cRdzkJu-VO6%>T#cS|e!jMp4WuDc#niNUZL@gInePV!YUO$79& z52^qVI&;H#5h{8kt$+V&BK(zsbOy-LY4@H$JRCD$I+~ci-1YzFOfjv@k8l%a=u6Gy#T!F$#?B0z>}}u|L%w(0eGVL50e90yDTdM zz=nftf^!y}d!ouvfTtB=!0KK5BGB#0=xo~PY}`ouue0cr5Na6He-OIF-bk|bzM=KL z7Wa*A?6V6rK%4e=gJ-hl_5R=gt8H@+XF~D+cupjhT-H!)u5HRS=Dtl43ZZf<8bY}? z<~DbSav9~CnWkhNciUX%wuRDia!{dTZcC#`OePFN-_Gy(J>Ta%=X{^n^L(Dq`=8I} z&(A-v&s6v0kQ+)i@_08q2%iWrnF=c1WnF?Hafs}_pO1|wE5cNWvs`F%? z`tlf1P5{vOA*M_1E^viRssZ`q&Z7yyhr5T;N|n}S%Rm#VZ#>*=oJ2>uq#{m8{=Rirs$_ZcO58UR-bB7np z1m_gT;|d0j6p2HM9Md*Cr)_pLM^3nP*&0LZ#H=$b~jnr%B`c zA5*L@O`Lx>abA+6F84|OFNu!VnR2Q#WuP-RX?Dh&3@d744%M9tJ;_7iP302xk9OCM+$Adt1Rp95Y5YKf4zU@ z#Awnm6e_MKr0xVdy?d4jrQxtb#L6MH0IQ0xswG6&m#&{vKy3it_oD?@snYdn`+j<3y(ZnPOh`mlD&GNY-P{?{!JQI!L0ao=lz?4~HTuYO())ZPg|bpqs& zp&zc3zdUYQs82hII%mO>6tE<@K{$1m8hwsSpI}L2$q;)A#D%Pa_B@ZE+Yj#aP~u|1 zyq`Zl6S3aDNM6>Ou)#^X>j6ZOfg~A};cg(QY9L7r%s}a9E;%#MN#c1`N{LSAwj0vg zX!tg=%izukC9WPH-G-0u!jC@7+vu^H_5%UgK~Zct2v-0S`vINKv}1-7Gm?U@L{Mu@ z7G@0>$r}$%NM-h$gsBOv0!4)s$z(?|3nDGr9>4nvWLq%M=!KaEGg+N!<-{dr(}+{_Gh>nZL|oc{MLdi*Fu>F`9OSq}B(*GPVF7|k zCdQDbZiqpvU{Fsku~*9yX|K&LMOFi8a@K^BT{4&a3WIBfGpw)wOA)QveA zOMWM+^_Kc&M&X5E$P(Me$q+E7r%snRFxfL;@pY!b!4Qyi8%kM~#KsoBOi&!CiI&)!VRBn2*`*eS1=D65DU!ClH7m34|x zU!=R=VKyl8Y;wM;kT_(u6;YJ!N0wuWDnmKSY%G`S5fQI1}wCgc8M&?rc=uS&on{ zij+PN2cjOK_?J|97gTv&_9V!~MR7oD8W7ci!g>;-PhO0dgifNEsVF8#%aY~AN@&e8 z`e6AW5>STrrV))s$X^gqY#w@Al+9e(KL}QWsxXmKmMm`;5~SpjDQSmfiXfRk>t19g z+Fb}G!Mh@HnPs~;4?!M4^_60CB?ZQQ(AtflxfaXXRqXKy2~H(Eo7O?UiJR*z~3cpI&&1BUCd zO{(sDhDWN!oYvt4@aVMaHXUEr;4S6vJ_vY0FB>4`)Ay<;s7@ZsvM`d7I~dT}K%t;L z<633bBSqm830xn}6PYjjBLd5E8Rg}c2{8rl~K;FfMaIL@or+<)f_6 z%X?1q8DVzyy4-!5rre~?_L%`TLTCt$wO7AJGh39+MuTd4QB6~fsL(8y^Zkk$t%OH8)pu+GzLF*XN>d`}^ zaFM!Ochtsu?uHBFVbS2e+Kg_BG1&+MAF@OAFK$NW?mM8XG zPS6RTQuXn<)hIo%o-piTRY$&nm_rE%k4^rK4x4nBbS4ZKBtF7E*`SI%*m+ zns*<*7It)JR(Am$;G*s3w72OIcMQ2LA12xiD=wKRi$>9LgWKn8UOoRJ(ra82HUksmC+F>CMm-_E*e>L7I z`BmPl#04Wr)^KVTr5JHM`sTcemL7)&R4xg&PDpS=d|rTMxkb!!io#wOke~AI zJ+?h1o_uXUON&Q`n ztluTlNftZhM0^v3(^ME9zSW?m!a;(6CEFJcs%i6aVJ$@g@iu1^tl)XPtrXCb92)i%!h}&?iMq2{XF{b zUdyv47$byFDE)8j-OV-T8reI{)E%b&4)f&>^XIvg*uss2nSpqUclD;5D6#Pexu#~Q z9Kr!x=)o2>W?mg$`eU2g*f=Cd3lim7Ec)q5@uG+Xy zziIT7FQs-x%62VexpD3F#U$r_&R1uaeK{h8uCdA$ z?(3a_@BgIP<)fuNmtVM-`B11E=B2qL)7&;F ztB##8zmvI&aHji4=e9-U8vS-iGv?q(!%Z)-Hgj$Jb!L&ArT$3XSfP)b8tnY*E4B%= z+qp3}5IP&}?WaG0OXj<)POBMx=ak%xpQ}Von Date: Thu, 26 Sep 2024 11:36:51 +0000 Subject: [PATCH 09/31] ci: Format code --- src/lib/code-sample/go.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 86c696e..f4a6c26 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -1,11 +1,12 @@ import { pascalCase } from 'change-case' import type { Json, NonNullJson } from 'lib/json.js' -import type { CodeSampleDefinition, Context } from './schema.js' + import { createJsonResponse } from './create-json-response.js' +import type { CodeSampleDefinition, Context } from './schema.js' interface GoPackageConfig { - readonly pathsWithCustomPackageName: ReadonlyArray + readonly pathsWithCustomPackageName: readonly string[] readonly defaultPackageName: string } From deec40caf964b8a12ffc0023f313f15a77f6531a Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 13:38:33 +0200 Subject: [PATCH 10/31] Improve var name --- src/lib/code-sample/go.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index f4a6c26..bfc7c88 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -33,9 +33,9 @@ export const createGoRequest = ( const parts = request.path.split('/') const params = formatGoArgs(request.parameters ?? {}) const isReqWithParams = Object.keys(request.parameters).length !== 0 - const packageName = getGoPackageName(request.path) + const goPackageName = getGoPackageName(request.path) const requestStructName = getRequestStructName(request.path) - const goSdkRequestArgs = `context.Background()${isReqWithParams ? `, ${packageName}.${requestStructName}(${params})` : ''}` + const goSdkRequestArgs = `context.Background()${isReqWithParams ? `, ${goPackageName}.${requestStructName}(${params})` : ''}` return `client${parts.map((p) => pascalCase(p)).join('.')}(${goSdkRequestArgs})` } From 22f278d7f3f5026b4962f36a36e22a12c19f20e5 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 13:54:01 +0200 Subject: [PATCH 11/31] Format --- src/lib/code-sample/go.ts | 41 ++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index bfc7c88..9d73995 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -52,7 +52,7 @@ const getGoPackageName = (path: string): string => { const parts = path.split('/').filter(Boolean) const firstPart = parts[1] - if (!firstPart) { + if (firstPart == null) { throw new Error(`Invalid path: missing first part in "${path}"`) } @@ -75,7 +75,7 @@ const removeUntilSecondSlash = (str: string): string => str.replace(/^\/[^/]*/, '') const formatGoArgs = (jsonParams: NonNullJson): string => - Object.entries(jsonParams) + Object.entries(jsonParams as Record) .map(([paramKey, paramValue]) => { const formattedValue = formatGoValue(paramValue) return `${pascalCase(paramKey)}: ${formattedValue}` @@ -83,27 +83,24 @@ const formatGoArgs = (jsonParams: NonNullJson): string => .join(', ') const formatGoValue = (value: Json): string => { - switch (typeof value) { - case 'string': - return `api.String("${value}")` - case 'boolean': - return `api.Bool(${value})` - case 'number': - return `api.Float64(${value})` - case 'object': - if (value == null) return 'nil' - - if (Array.isArray(value)) { - const formattedItems = value.map(formatGoValue) - return `[]{${formattedItems.join(', ')}}` - } - const formattedEntries = Object.entries(value) - .map(([key, val]) => `${pascalCase(key)}: ${formatGoValue(val)}`) - .join(', ') - return `interface{}{${formattedEntries}}` - default: - throw new Error(`Unsupported type: ${typeof value}`) + if (value == null) return 'nil' + if (typeof value === 'string') return `api.String("${value}")` + if (typeof value === 'boolean') return `api.Bool(${value})` + if (typeof value === 'number') return `api.Float64(${value})` + + if (Array.isArray(value)) { + const formattedItems = value.map(formatGoValue) + return `[]{${formattedItems.join(', ')}}` } + + if (typeof value === 'object') { + const formattedEntries = Object.entries(value) + .map(([key, val]) => `${pascalCase(key)}: ${formatGoValue(val)}`) + .join(', ') + return `interface{}{${formattedEntries}}` + } + + throw new Error(`Unsupported type: ${typeof value}`) } export const createGoResponse = createJsonResponse From 197cb9f4f5034673618f30780103b93009920de6 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 14:22:31 +0200 Subject: [PATCH 12/31] Add go package import --- src/lib/code-sample/go.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 9d73995..10dc970 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -33,11 +33,24 @@ export const createGoRequest = ( const parts = request.path.split('/') const params = formatGoArgs(request.parameters ?? {}) const isReqWithParams = Object.keys(request.parameters).length !== 0 + const goPackageName = getGoPackageName(request.path) + const goPackageBasePath = 'github.com/seamapi/go' + + const goPackageDefaultImport = `import ${GO_PACKAGE_CONFIG.defaultPackageName} "${goPackageBasePath}"` + const shouldImportNestedPackage = + goPackageName !== GO_PACKAGE_CONFIG.defaultPackageName + const goPackageNestedPackageImport = `import ${goPackageName} "${goPackageBasePath}/${goPackageName}"` + const requestStructName = getRequestStructName(request.path) + const goSdkRequestArgs = `context.Background()${isReqWithParams ? `, ${goPackageName}.${requestStructName}(${params})` : ''}` - return `client${parts.map((p) => pascalCase(p)).join('.')}(${goSdkRequestArgs})` + return `${isReqWithParams ? goPackageDefaultImport : ''} + ${shouldImportNestedPackage ? goPackageNestedPackageImport : ''} + + client${parts.map((p) => pascalCase(p)).join('.')}(${goSdkRequestArgs}) + ` } const getGoPackageName = (path: string): string => { @@ -56,7 +69,7 @@ const getGoPackageName = (path: string): string => { throw new Error(`Invalid path: missing first part in "${path}"`) } - return `${GO_PACKAGE_CONFIG.defaultPackageName}.${firstPart.replace(/_/g, '')}` + return `${firstPart.replace(/_/g, '')}` } const getRequestStructName = (path: string): string => { From 91ae178e21bcc45e6ebd67fb9bc4d2a1aadeac93 Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 26 Sep 2024 12:22:56 +0000 Subject: [PATCH 13/31] ci: Generate code --- test/snapshots/blueprint.test.ts.md | 216 +++++++++++++++++++++----- test/snapshots/blueprint.test.ts.snap | Bin 20307 -> 20408 bytes 2 files changed, 180 insertions(+), 36 deletions(-) diff --git a/test/snapshots/blueprint.test.ts.md b/test/snapshots/blueprint.test.ts.md index 4bcb766..2366e95 100644 --- a/test/snapshots/blueprint.test.ts.md +++ b/test/snapshots/blueprint.test.ts.md @@ -132,7 +132,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: `import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -229,7 +233,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: `import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -326,7 +334,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.List(context.Background())', + request: `␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -423,7 +435,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.List(context.Background())', + request: `␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -520,7 +536,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: `import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -617,7 +637,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: `import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -714,7 +738,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.List(context.Background())', + request: `␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -811,7 +839,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.List(context.Background())', + request: `␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -908,7 +940,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: `import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -1005,7 +1041,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))', + request: `import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -1102,7 +1142,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.List(context.Background())', + request: `␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -1199,7 +1243,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Foos.List(context.Background())', + request: `␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -1306,7 +1354,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Transport.Air.Planes.List(context.Background())', + request: `␊ + ␊ + ␊ + client.Transport.Air.Planes.List(context.Background())␊ + `, request_syntax: 'go', response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', response_syntax: 'json', @@ -1394,7 +1446,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Transport.Air.Planes.List(context.Background())', + request: `␊ + ␊ + ␊ + client.Transport.Air.Planes.List(context.Background())␊ + `, request_syntax: 'go', response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', response_syntax: 'json', @@ -1482,7 +1538,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Transport.Air.Planes.List(context.Background())', + request: `␊ + ␊ + ␊ + client.Transport.Air.Planes.List(context.Background())␊ + `, request_syntax: 'go', response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', response_syntax: 'json', @@ -1584,7 +1644,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', + request: `␊ + ␊ + ␊ + client.Deprecated.Undocumented.Endpoint(context.Background())␊ + `, request_syntax: 'go', response: 'void', response_syntax: 'json', @@ -1663,7 +1727,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', + request: `␊ + ␊ + ␊ + client.Deprecated.Undocumented.Endpoint(context.Background())␊ + `, request_syntax: 'go', response: 'void', response_syntax: 'json', @@ -1742,7 +1810,11 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', + request: `␊ + ␊ + ␊ + client.Deprecated.Undocumented.Endpoint(context.Background())␊ + `, request_syntax: 'go', response: 'void', response_syntax: 'json', @@ -1961,7 +2033,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -2070,7 +2146,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -2179,7 +2259,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.List(context.Background())`, + ␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -2288,7 +2372,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.List(context.Background())`, + ␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -2397,7 +2485,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -2506,7 +2598,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -2615,7 +2711,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.List(context.Background())`, + ␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -2724,7 +2824,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.List(context.Background())`, + ␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -2833,7 +2937,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -2942,7 +3050,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, + import api "github.com/seamapi/go"␊ + ␊ + ␊ + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ + `, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -3051,7 +3163,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.List(context.Background())`, + ␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -3160,7 +3276,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Foos.List(context.Background())`, + ␊ + ␊ + ␊ + client.Foos.List(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -3279,7 +3399,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Transport.Air.Planes.List(context.Background())`, + ␊ + ␊ + ␊ + client.Transport.Air.Planes.List(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, @@ -3379,7 +3503,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Transport.Air.Planes.List(context.Background())`, + ␊ + ␊ + ␊ + client.Transport.Air.Planes.List(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, @@ -3479,7 +3607,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Transport.Air.Planes.List(context.Background())`, + ␊ + ␊ + ␊ + client.Transport.Air.Planes.List(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, @@ -3593,7 +3725,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Deprecated.Undocumented.Endpoint(context.Background())`, + ␊ + ␊ + ␊ + client.Deprecated.Undocumented.Endpoint(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ void`, @@ -3684,7 +3820,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Deprecated.Undocumented.Endpoint(context.Background())`, + ␊ + ␊ + ␊ + client.Deprecated.Undocumented.Endpoint(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ void`, @@ -3775,7 +3915,11 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - client.Deprecated.Undocumented.Endpoint(context.Background())`, + ␊ + ␊ + ␊ + client.Deprecated.Undocumented.Endpoint(context.Background())␊ + `, request_syntax: 'go', response: `// json␊ void`, diff --git a/test/snapshots/blueprint.test.ts.snap b/test/snapshots/blueprint.test.ts.snap index d243970b250909a9c53955200baa50ac539e088e..ad53fc9c5b8c54b6aef8a7f871563b573879c33b 100644 GIT binary patch literal 20408 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 z�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 Date: Thu, 26 Sep 2024 14:37:55 +0200 Subject: [PATCH 14/31] Improve readability --- src/lib/code-sample/go.ts | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 10dc970..bc81ed9 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -31,23 +31,25 @@ export const createGoRequest = ( _context: Context, ): string => { const parts = request.path.split('/') - const params = formatGoArgs(request.parameters ?? {}) const isReqWithParams = Object.keys(request.parameters).length !== 0 const goPackageName = getGoPackageName(request.path) const goPackageBasePath = 'github.com/seamapi/go' - const goPackageDefaultImport = `import ${GO_PACKAGE_CONFIG.defaultPackageName} "${goPackageBasePath}"` - const shouldImportNestedPackage = - goPackageName !== GO_PACKAGE_CONFIG.defaultPackageName - const goPackageNestedPackageImport = `import ${goPackageName} "${goPackageBasePath}/${goPackageName}"` + const goSdkImports = generateImports({ + goPackageName, + goPackageBasePath, + shouldIncludeDefaultImport: + isReqWithParams || goPackageName === GO_PACKAGE_CONFIG.defaultPackageName, + }) const requestStructName = getRequestStructName(request.path) - const goSdkRequestArgs = `context.Background()${isReqWithParams ? `, ${goPackageName}.${requestStructName}(${params})` : ''}` + const formattedParams = formatGoArgs(request.parameters) + + const goSdkRequestArgs = `context.Background()${isReqWithParams ? `, ${goPackageName}.${requestStructName}(${formattedParams})` : ''}` - return `${isReqWithParams ? goPackageDefaultImport : ''} - ${shouldImportNestedPackage ? goPackageNestedPackageImport : ''} + return `${goSdkImports} client${parts.map((p) => pascalCase(p)).join('.')}(${goSdkRequestArgs}) ` @@ -66,12 +68,30 @@ const getGoPackageName = (path: string): string => { const firstPart = parts[1] if (firstPart == null) { - throw new Error(`Invalid path: missing first part in "${path}"`) + throw new Error(`Invalid path: missing second part in "${path}"`) } return `${firstPart.replace(/_/g, '')}` } +const generateImports = ({ + goPackageName, + goPackageBasePath, + shouldIncludeDefaultImport, +}: { + goPackageName: string + goPackageBasePath: string + shouldIncludeDefaultImport: boolean +}): string => { + const goPackageDefaultImport = `import ${GO_PACKAGE_CONFIG.defaultPackageName} "${goPackageBasePath}"` + const shouldImportNestedPackage = + goPackageName !== GO_PACKAGE_CONFIG.defaultPackageName + const goPackageNestedPackageImport = `import ${goPackageName} "${goPackageBasePath}/${goPackageName}"` + + return `${shouldIncludeDefaultImport ? goPackageDefaultImport : ''} + ${shouldImportNestedPackage ? goPackageNestedPackageImport : ''}`.trim() +} + const getRequestStructName = (path: string): string => { const requestStructNameSuffix = 'Request' From 6025cb5e486f3e3aa45ae66f73c38496ea788c11 Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 26 Sep 2024 12:38:31 +0000 Subject: [PATCH 15/31] ci: Generate code --- test/snapshots/blueprint.test.ts.md | 84 ++++++++------------------ test/snapshots/blueprint.test.ts.snap | Bin 20408 -> 20401 bytes 2 files changed, 24 insertions(+), 60 deletions(-) diff --git a/test/snapshots/blueprint.test.ts.md b/test/snapshots/blueprint.test.ts.md index 2366e95..083cb48 100644 --- a/test/snapshots/blueprint.test.ts.md +++ b/test/snapshots/blueprint.test.ts.md @@ -133,7 +133,6 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -234,7 +233,6 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -334,8 +332,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -435,8 +432,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -537,7 +533,6 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -638,7 +633,6 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -738,8 +732,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -839,8 +832,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -941,7 +933,6 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -1042,7 +1033,6 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -1142,8 +1132,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -1243,8 +1232,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -1354,8 +1342,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Transport.Air.Planes.List(context.Background())␊ `, @@ -1446,8 +1433,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Transport.Air.Planes.List(context.Background())␊ `, @@ -1538,8 +1524,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Transport.Air.Planes.List(context.Background())␊ `, @@ -1644,8 +1629,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Deprecated.Undocumented.Endpoint(context.Background())␊ `, @@ -1727,8 +1711,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Deprecated.Undocumented.Endpoint(context.Background())␊ `, @@ -1810,8 +1793,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `␊ - ␊ + request: `import api "github.com/seamapi/go"␊ ␊ client.Deprecated.Undocumented.Endpoint(context.Background())␊ `, @@ -2034,7 +2016,6 @@ Generated by [AVA](https://avajs.dev). go: { request: `// go␊ import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -2147,7 +2128,6 @@ Generated by [AVA](https://avajs.dev). go: { request: `// go␊ import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -2259,8 +2239,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -2372,8 +2351,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -2486,7 +2464,6 @@ Generated by [AVA](https://avajs.dev). go: { request: `// go␊ import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -2599,7 +2576,6 @@ Generated by [AVA](https://avajs.dev). go: { request: `// go␊ import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -2711,8 +2687,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -2824,8 +2799,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -2938,7 +2912,6 @@ Generated by [AVA](https://avajs.dev). go: { request: `// go␊ import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -3051,7 +3024,6 @@ Generated by [AVA](https://avajs.dev). go: { request: `// go␊ import api "github.com/seamapi/go"␊ - ␊ ␊ client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ `, @@ -3163,8 +3135,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -3276,8 +3247,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Foos.List(context.Background())␊ `, @@ -3399,8 +3369,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Transport.Air.Planes.List(context.Background())␊ `, @@ -3503,8 +3472,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Transport.Air.Planes.List(context.Background())␊ `, @@ -3607,8 +3575,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Transport.Air.Planes.List(context.Background())␊ `, @@ -3725,8 +3692,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Deprecated.Undocumented.Endpoint(context.Background())␊ `, @@ -3820,8 +3786,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Deprecated.Undocumented.Endpoint(context.Background())␊ `, @@ -3915,8 +3880,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - ␊ - ␊ + import api "github.com/seamapi/go"␊ ␊ client.Deprecated.Undocumented.Endpoint(context.Background())␊ `, diff --git a/test/snapshots/blueprint.test.ts.snap b/test/snapshots/blueprint.test.ts.snap index ad53fc9c5b8c54b6aef8a7f871563b573879c33b..cdb5f059c0e94c7d5c14db03eba383f687743d57 100644 GIT binary patch literal 20401 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 Az5oCK literal 20408 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 z�lNbR#td-#zo|)6de4g%kj;28x$%De4oJ8WBnu>3D*RHzrj9$?1%+ z3jWF4YsVwq=Vw*G@5bDzxr-?SeAhZgRx1-vC3{HDDBvZX2}VYAXJHT79R&~@AhH=C z(&*!XjnX|G4a{Gv0hQH&zXnJyAaqqDg610L%^pK9c@Wwb2yI@Upvy`F%BWq4ljgZz z2{wrY1V#d0A^{*~bzjKy5&qeauPeqD4P_l06-NM5A;h~mT-R#4%^m}6P^ zqE+B0XSBU}{1XtVT`d=XiW zQJv?Au4_0Jjg35O>VQuQzXRt9?&k^YW(hb!ECJp58|IQ|6*{e20qK~;X=ucl7{n5! zoQss4_w2^~50zkDI>03z;1@0=iViSA2jG!oG)E(1kwaQ50^}C~yovyCFMk8ADuGu9 zUL^8J($VN=H9Vv`R=jOJ)-IuFM!LVLs(9`jduYLtg;of%ng|eEEXE%N-4i3j+14lyvA3lZHJ0<9BAxOJgox`l~^oN;NMk?dz>%8*;-NToDddQ~WoDleOA zzk!h#s2K6M7;#+@ja`Va*_oABFwIj)AJ!EEh{i%%AV)v?fYG6dp{S$=wkB$0HEobE z^%OSMW>WNY{AR8H4Tz!RrDluBVT-svgjy|#4_i{^Elvhv7j-@4Fk+9o`*{@ZT(E;Je3hrX_{16LJh6dDmM}oZ8L#; zdjc=xi58hBE{T$plT&qS zxfEz!ARx`i&dn$r`)TsUvQv<8aa_BGi8j)HY zA-T}!MuS&Mt0?zfSFD*jjuej{E!sF_27H|Y9fLjxeOWHgz~~&9^|A5KTArjgg%jei z?ld7*$rD+O#~g9tbpwevM>`7$^w~6JPgZj|im{92A7+&$k5f;a+RXq(Fv-oOC7UBA zoRr{KZoSV}+x;WS>&i}B9RAc8B)1y9KDJyjn`tVQ{PaX5chbO`AFck`Ec|`0x`I!` zLo8!mySA8~!l{t!o|6djlmbTWO<}*1t!gtL5(|W=1Wq1bM8(xvihf z*OfN9eDizx;E9Kj>{&N%b^;`tJF?K<2QR6tw?ZTybGXo#&G&}bCbTA^qfHn&3eAyR z>qIRaF5LudUIN{U4jrevEbh1i&0=}>m9f;3-?kn* z{<{-@VmHD%uC}odssY9L&NciCS@GErwZ^9gu&MmKhq98EH7 zUuLg_DOk9_DEz_Dmvw6<2mD()^dnh-^fg7QtCdCL_3j+~)d$jo7|+qc!LM@TO&v`B zFR=yYLNm3~)^#}}1_JHQ%tjMC)!F7ksUU|ABxmLY)7{em=|3%of$@UrF145Qb?4?T z>1|F-2d1Fs1)}eDEu(LJz};#di<>e~&+~#{I;h8IF0<}&+Q6#gNX;npp+2j@Jb3dp zT_oM&xTDV3Vxi+~oo(FwKjYQ#F5u_da#_vblRNZcX;-6A+8dt}DL_yE)FpO3=>FAD#a77+^u@e?AC7XAEeNVy=zTRx>%PniC3p0Aca*Cx=pW{=Tj-U! zRQqV8|CTWDYs_O``6sik|8{VO$_4yi2FT&DMBY@c<4=+wfrEPDA4U0oje@`ZH4a@s z3UWI$m%^!;!UL9`enty(0;9BvU%v9d2JspL)XtIyenPv)OI|Kt*!7nR%Vc4HxP2O& znU8zYg29At{YW_SSR;ah=Fs3$$nC zzbvA_F1Y?!TmK#W8yOpP~v|5TEHkakz4U#06%B0qtsZR_JaT4iZgREs0hFp z5q?!!3NUG9+IunSq|GH@BB3rfGk6HvIWcA?403q;Jt))Wsu2 z@(eTA?uoY6#()5c0R~)%9<51*dG?i0e~AJ0rl=vN%Q+oX1M{tj{a8BFjGAFvXAU|O zL%?Ba(u%R+6^V}}Wh171jXvMxJ<$KI- zZnbsc^8oKtQhCEh;Xhf))nm?%>QD;)8K1-Kk-?gAHV^^6k4Xn4?)I*88!O{@?7y`h zM3~PeH;aZ@^Hoj)^&$Jg?m*!C64~GK@Bac_|2NJ%tND81gs;c|n|iko=TDdHnacAa zksZDnUJglcRG@e5qy6sY?1Va~MaCH;obH<;isVGz5G>$qkM2OnCS%wrZVD-ITlfEe zf#-*+3^h~z^iSV~&%4`_Yc&V1vcO=Be=J3EN`ap^p^kQBY25n!IJ43s79J}#NSKx# z-|f4V(F<-C2KIevrGafr3+NnHQh{Yj|I}UJc4y&3p;?4E7a4zTFT=7(BN>&XdZMf{ zvJ`XFxQ|8G+AHm8a^0BfPb1esyUZ+XM-b<&_@-kJ8e->03y0G+Qiy~1EoNU1wMs8}CELB4fR}>xKg4E69NbzC)DXsw z26{odqgK{j$g&|5IPTx?Gc(mPd{32X>R8tUYymw5+(MEHCW`FS@m0o##<0}uQR9!H zR?wj?O+uU2OOh=iP}h|odbXB%vsiL($ux^X~oECmCFJ%woe|k zRM}_s!s^f58sSF%L-DG|S{_)nZ?9(#8f%u$jzJ4P&7tqNke99E)~QCQLmh4G z>q8mzYPlyM@(G5gd?%Vl!K|lzFPbQ)Kg$+Zw$nh8v$q#+r-hPdt`_R2MR@KEW&@S; zt-&{Hqf?9DU9j{ROTMNg?<3UOgt-J%3w7PZE@0G_tpaX#EcEgXR%9lGaaWL;n zWj~0Uu}|2uPb@?7POY`Yhn-P4R#d_|+4TL|qFzpAnq!l0p%vYThgI6y^VAM4ZDrGD z<&A}soNhQg&9R}Uo7E?G+|jCe*xJ1an5XY%#QOxO7>8HU(`~6X^ij;%?}qhzj^Aa9 zM}#Y(o}&JwV(L{vPgkL`2~t{|#!K)=)L=p5mn)jCBxpXcQ)5ynpDrTsIYvawv;NEy zV0xQdtNnfvP3j!6OkBQclDDe~aYUzb{9(XO*3pdJ)}Eb1Y#?W{p;mzM2=mOMbOJDw zhLxOeV?o=2anRZKgS)|Ga9o?$-O4x8qjNFIt5Ykidhlw9`@)5!5=unw7aiQ8n!gWn zb?}W2wAlP!=h@1UcE)T&ZMf8YjBL@d)M!%LaJYbVc7#l}YV9tvNFQuj)%gAo)}&ul z-x;(>ywoR?7i1u;);TbG*6K>Fw>=W^FWra5l;;*N3pw$Ad=kB zAZwDf_bx(tUL44nz(A+?L(mlrXk}?WK~s@rnyRmK-Ma(+mbCHL0z(Pd?^1Z{t6e*8 z08-tqOI>vhWYZWv-PW!=#p51zbxeFWT|?r|14g<=g%q>|NBt1t_^A($%v(zuF?y8GHg+Q72;?qt z?ex?78a->g$hneXDg8xz_I~u2<`aI-hZc&+iW$ z9#*EFT?=|~^-xTRN~<1g>}&zMUNB!n7S+;YexIsG&d?b1?o8DwD9e!m|23NA_+r=g zS)SN+CdRpXXf-$27_P^^eM0+FqoH_7;RvP_nV{2YDf7BFD(PbPWAXa_v+^n5kB0nH zJTd9j;!FnhV!ADZ7U4<;iEG`DMB4Mmr=oa}6y< zbh@>ihO{BL&7Ach1)tW65lhfkb<8AJJHBO9x2=*M3(XoXh{uRQg=`M~Ti$&wJt0;a zrGEM^d3PeDvXT`{=_G!iZ`QDYyu%UvvhV}F*lq1;=T(38d7LUBDvO}asZugCtQb~I~;TL4$kNIAel?Qd56~ZQi@w;2&8Z> zZ(`dWiaz_LFol6@ImakRE(cF(;}x9}uwzpPAXX?kVx)yp=2Q~ZQ5IsK+LyE}F)qZ) zqWTL#HLbYD;5}f>yv$dB3RWhrZ9t|7*le4@gK#6va{nv7PZU zo%siWIe%;T;V;k*-KYR{zi6}IU4P-_!^>b)_0mfRcj9k$e^>#R{L5z;dZEYDWa)4D z;FOK{Q^i_6Wh+5%i(3`2tI`_pcDE(ku;LT=ebz-DzbgwdIHk~ze^w<%JhhCd)#ND0 z@gsjJ<4R1}u*m_E>H*sbuK<}L*?Bfv4>=!OP2z|a|j<%gnUv3ozfjB9*rD}!u90tRH7n3CFLO3mqCgI z!K|^jx(nyF-=HujijEpj{Ei=8;Pbf|)R*tP{irM7Jo`}B$;zPVvrwHwDC4TIkA`DW zR2p=3x=2fmv1}m2=bo2pvP`Y$xVmUSNp_rd1&TK*r?i~kHNsQZeq*Ve^2Q#bHAZ!) zBQk1?GxNF+ub(|PejdhemtzGJR?GxV@H?lvOL*_|{1W7-7p90SXc5zC!1`5Inp+mw z(s4~e9%#_W1VZ?oVjvR}Rl{yasAVYPK5a5xouMQ6sSFmdIBpdenJ}GWdeB@$W6L2U zAZfz+@WUrZ9t=T&8x1eO21wqkX%0O(b#*I1Wtf1e&)6!wa z9A8Z&TyDCXp?pqBN}G!`;;_c{J}DVN;Ip+ac2^q0 zllMj%CRSTCGHvtT8%p--b3Q_TyY_n$@?E(F^SH6-ALb((YD^WepKVmQT~jnx*xrX` zU<}zeVXJCN@AcQWYX@-xzel&)+FTeb({RW>vA=H-c=G1vH zuCUK~H;BgT24C~zT`qH9KH5duiDRv|^a69l%7;o`JaSE-CV|c3hv9tIhov2f`alAk z%?|;e=}&S{V_Eute<{pnd|29qX+arL^AWjNAcZPPVrb=B0Q<&*#I%*6vs@MkN9snQ zYp`+m+=(>Vs7A&~0;}IzQ7YYM{^kPA0T%gNyDR~+`QgR-v@RI7?dyKr!<|)kn^sI- z>gI+WSddImPevSxTq{|^;#EMayP_|GjrSw^cozIvdEX#ggW2s)t(1n}NAw?g@cDX7 zX5lwyo}E=tg;oshldf0|q!<0+JamkTemy;#A$?IsTMi5+fpD8w7MUzbiy!FH8qp~; zv;pMJImka}tak)Q^du|tFT?u-ADbx%(#=wKJ6DB4woHl#ipQMZW%hclbMNo2?Z#YI z3 z{g0RXe|foIpIO`CrA*-56II*ZRkKpKM^Q&_DA_!eG~DSJ|HQwoPqQ{4T1@2FTu8UR zr{TP(v8w?Pff$X2kZzCI1H6fVbup2kqCxV5pNaq^_68jn>v3|?M&vG|Pww;?8D zUnJrOQNb|E3`uMcNo<_DXt)3Na+xlh-&_s#_&~kb#q%ov0drIfvi_+{1kg*giy(Y* zDK-c_q47G44K%f3U*-NrW$}sd`85qOUf=p=UVbsixP#iSE_P09V6B45I1OI>P4M|b z5Hk$fK?ooi}1Ghuz86b!^3b&U`gR&H=Y5)MINbdR_b?n}qIc)apF z3q&I>=^O2Omu?x+Ok({P1Gg7%&n?ZmmT=LV!sbfxK9B+E4sgk(4QWE`l#j$(#Ps)w z+0EUoooF~yxW7<9^Q(aGyrzGCrvK23IA8^UX4*i<@M~J&Dc<VtWyE`84iHy0$4=aC#Z4w1M5M8VzYqUl_ z`Nb`ALmt^0ELZ6K#5q^7&)s8p>-&5D$+&-9Zr1>O%ibJMz5Sua0$jL&Hp$rV7A z(SuFXjok%z-UBDy{ZGcRHaLsZI-y{$!Oi%~z%;Wu^#EA<))apI@#32+dD@2>q7Tf7 zCn?rZgvQ$z(9a~`UL>qF0EdSxbOm3%qHnneD{no<&10a=W8l_*qtlZFjO)QYYawVL>#0A@BD8!8k>vy*IkFC)~3q z+}04(CMkfCRLVasck)Zg^Ohm*g_JoI^NupY1m!huO+BE^6G|J`cmWUI_mAFa!a7vTiE?Enya%l6lIVYjtk3w+gjN2< zAbYkKt9+HWNIzcTN2xN;N;M770)vGlvHdAy{|wp8d1c)*N!*kHbBnibL(pi#(4<&s z_Yght$$zAI>KT}?r}7>!N(AF$=L3Z*tl!ws?jpWEoe`Q#Ax&rw#LYl2Ih3DN`zH*& z;(GwQR*>ZSzGKV~U*ypr>7L&D=GP`pe#HD!{cn@~arHJM3;(flE4M-?_vCe9SiU`Q zZQi(Hn*9@cUfolW2yfnf%B~RXvln9F5ROf1eXoKL45glEp?#aFK;vtwlY7m6E(0&C zFcin0sLtNl_v-^t4Bm49F!;moZXdW-tB9m{=sCS$7ot3m3fP|AeTxZvhaVD(#{T+l zDC}MD7`}V^*Z2-h4eo)Kk-EPDL6C=7iFE-kL#N=>r5~`_Opd`2$d{9010&(xPeFK>UI3Dqe-_& zhj;@+3|&Q>gCXUuGQnopxhE`=cDVx}j~oY;=`p90x}no2`{#LMz#r`VAE;$WRa9EuHX$jcv2F8XV7rB%MxpeNFJ~ zFG2Ga3F!+HOp{1t%Blfsby3xOA0E6wPNC$hIHe+|ynwjkh0l_(tuE}>=-0(lzkVxr zyDW_IipHD_`6i%^d{(dSdZslqwSWb@0#hZyI+nqC4lv6pc>DOv@jOAesh0jMK8y30^Er0# z{wX-M<(FQ|hXLfRVys^b6mkB-tl;%UuNw-qJ4O1YeAJ6T~Rj&X9su+ z{5^6&x@-K}boN>+`PFJwW>%1u=1Tl&(_a`Dg1mK%^=kkN=#SyGM2vKoL*+j~ycNUs z%iAoDh}^415mvzl?p^lkosT2Yx^Y`mJy}(iXiX0Y1_6Rs6F`0hE$(vu1Xf-IZ@vU; zZs=!N;%8fKzk1w$S**lWwBl_l(*LR4SZm&PcV%>UX0&u>%n-p#)%caCfqv%U2V>Cq zm8t>s5dY~R?)6#x@2wxwT|SjjOO$bM6!15cVo zuQS8`8P!tLFDqtW1iC*AgEn66hb;D(umiqSbpPtK>_27TzGed(wC)mcq)O3mGlcCj zY_Q0M(VrQ47Bp=4gj7#)g>7L;|KygzM2hcmjzs^{sr#b}}-)#=lD-{(2!`F;6+`#sP9dH!Gjr!9;~cy<1Sorp6=Xx6HDoMTrAr{iCB=DExkHNi7^>x@+9(R(AI%V9Gl>{#tKe7nYug{w$O6II7hwvQ2 z+&0=p%V=+nJuMgX7)fTvq3pr!J6-D2>ryxEiD%W`j5+9(T0`!Gg%5#R^%4rLYgYDmFD zvz5<{RiVaF1EDF32foh}A4cGQ|N1P!D}S3)_#6v_P15h_y!$MF2H@Zbu*dq z>W%t4wj!iW2H2wD7et*NWIuB9m98t9yh83})F#ri7y_o5!@GN~zLuicX z72JywbUuomyM4RHO`jey$(!4nOsH;LPhWribov9TEF&gWrvT_|t~F1KK*&Wi9H^IX zu1q()kp@l_95MMK5^;|MWCjNjZa3?4V9E>Q!i$pY0SUJL#l1pK2#?i|L%Tg42@;m) zm$qirB<(v7h`^s`74Wg5Cro;d9(%}|GlbDh5zUNG<1mvHb_|a>Q<*B-;-cd(Q~{oP z8?-v*@5n&THRVxD{G0rg@zth5Ap#i*t1}MAp+#dulS+|h+$smSE`{LIFdV%591DJu z{U>w$Aw#L-UkX>s{fL@%g_peB(=JY2_S}1Z0};|9Gb}E8w9XX}?zIlCx}qc7=6>f> zX{Bn-PE}oe-S1<&;TKtk34MMrAjIlsLx0C+b|ZT(g}Q&Bv5mv?+|l^s_h#8UOQq&= zY*_0PGhnT7efz-1`|RGTgqxUTN3!0pZmYsNlH-&+QotPf~u2`LO}-N(rG!4g~!oA$8baPar- zpFXv^L0B7kM=n?yObc|WTb2|P=3&-O7|J}^rjEU!PL%UYvnmh$_(uj|3BhSpXjj#h zP&u4wj2GjkmQBAiMz*8A-rcv zZu5O>8-+eG8jmnFt>5&%v=Xs+Pn&D+ZV6zSav~CT3xVU`qx1KgQ>{w&bon?AbD)HD zK{`?GNAT1~OX^mR)nZpzWy*&h@bSEE=k3K9L2jAZOs%%S;Tw`9dUoAL)B0y8-v zu;dLAD+Yco9kArv_Bhg~ESfZ7N~^b?B##9^mm|c$yAo@p7UC(lS54nQXk%=gSQN6a z5_jENI=gPgSUyK~FfINAYi+zBtag}EfKjE#i}Xv>P`;?KMkk6AKi@p;N7d7%FLS_EQxWKx8PyhL9%r(tEbH=En5Gu(r=K>z_KJPF>Gm}|{yskQ%j;dcqq3xbgi$cu- zC;l%PhJXx5W8L$X#qy_n&sugHSRTe@zr36FUb*Zpw5DTQC6WwL6i;+=bOgS{mVi_w zR=Q|9zA*Xa%|i^CO!liBQRcL_&NMCcPY3C>PrLhWvmP?c)#@1{Ripk+ew3jVeMK59 z*U`i~HN30gYSv+=OZiOTn2Kw2)P7*Oz4=t3Yx6A;kCm&NPz7uAsdH}f-;O(FGbI3! zx%#w%`I`1_=;ajEfk8k}c+o2kC__pbkXpslbiggjD~F^@T}YP-MWsdcn=!S+_n!!z zcTR=(`4zN#73@8jj$-}c$y*nq+`$0{HBQ8LxZG&Ygdr_<@d;iz<@pw&Zj~DYdt;x6 z{Jd{Gu+`UbDv~MwfuGb4wX0bI?z=6dIv91lzjbZi@bXTUl#l8gmo^j)%Lj0(0odwd h{n?!%^&S6s6#&gZw!~IFm-_R_2(5DqkR Date: Thu, 26 Sep 2024 14:46:03 +0200 Subject: [PATCH 16/31] Fix sdk imports --- src/lib/code-sample/go.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index bc81ed9..705fb76 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -39,8 +39,7 @@ export const createGoRequest = ( const goSdkImports = generateImports({ goPackageName, goPackageBasePath, - shouldIncludeDefaultImport: - isReqWithParams || goPackageName === GO_PACKAGE_CONFIG.defaultPackageName, + shouldIncludeDefaultImport: isReqWithParams, }) const requestStructName = getRequestStructName(request.path) @@ -52,7 +51,7 @@ export const createGoRequest = ( return `${goSdkImports} client${parts.map((p) => pascalCase(p)).join('.')}(${goSdkRequestArgs}) - ` + `.trim() } const getGoPackageName = (path: string): string => { From 7a2048d290ead32f1281e50dafc9d205b12aac2d Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 26 Sep 2024 12:46:29 +0000 Subject: [PATCH 17/31] ci: Generate code --- test/snapshots/blueprint.test.ts.md | 156 ++++++-------------------- test/snapshots/blueprint.test.ts.snap | Bin 20401 -> 20385 bytes 2 files changed, 36 insertions(+), 120 deletions(-) diff --git a/test/snapshots/blueprint.test.ts.md b/test/snapshots/blueprint.test.ts.md index 083cb48..a12bcfd 100644 --- a/test/snapshots/blueprint.test.ts.md +++ b/test/snapshots/blueprint.test.ts.md @@ -134,8 +134,7 @@ Generated by [AVA](https://avajs.dev). go: { request: `import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -234,8 +233,7 @@ Generated by [AVA](https://avajs.dev). go: { request: `import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -332,10 +330,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + request: 'client.Foos.List(context.Background())', request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -432,10 +427,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + request: 'client.Foos.List(context.Background())', request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -534,8 +526,7 @@ Generated by [AVA](https://avajs.dev). go: { request: `import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -634,8 +625,7 @@ Generated by [AVA](https://avajs.dev). go: { request: `import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -732,10 +722,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + request: 'client.Foos.List(context.Background())', request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -832,10 +819,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + request: 'client.Foos.List(context.Background())', request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -934,8 +918,7 @@ Generated by [AVA](https://avajs.dev). go: { request: `import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -1034,8 +1017,7 @@ Generated by [AVA](https://avajs.dev). go: { request: `import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: '{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}', response_syntax: 'json', @@ -1132,10 +1114,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + request: 'client.Foos.List(context.Background())', request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -1232,10 +1211,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + request: 'client.Foos.List(context.Background())', request_syntax: 'go', response: '[{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]', response_syntax: 'json', @@ -1342,10 +1318,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Transport.Air.Planes.List(context.Background())␊ - `, + request: 'client.Transport.Air.Planes.List(context.Background())', request_syntax: 'go', response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', response_syntax: 'json', @@ -1433,10 +1406,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Transport.Air.Planes.List(context.Background())␊ - `, + request: 'client.Transport.Air.Planes.List(context.Background())', request_syntax: 'go', response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', response_syntax: 'json', @@ -1524,10 +1494,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Transport.Air.Planes.List(context.Background())␊ - `, + request: 'client.Transport.Air.Planes.List(context.Background())', request_syntax: 'go', response: '[{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]', response_syntax: 'json', @@ -1629,10 +1596,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Deprecated.Undocumented.Endpoint(context.Background())␊ - `, + request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', request_syntax: 'go', response: 'void', response_syntax: 'json', @@ -1711,10 +1675,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Deprecated.Undocumented.Endpoint(context.Background())␊ - `, + request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', request_syntax: 'go', response: 'void', response_syntax: 'json', @@ -1793,10 +1754,7 @@ Generated by [AVA](https://avajs.dev). { code: { go: { - request: `import api "github.com/seamapi/go"␊ - ␊ - client.Deprecated.Undocumented.Endpoint(context.Background())␊ - `, + request: 'client.Deprecated.Undocumented.Endpoint(context.Background())', request_syntax: 'go', response: 'void', response_syntax: 'json', @@ -2017,8 +1975,7 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -2129,8 +2086,7 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -2239,10 +2195,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -2351,10 +2304,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -2465,8 +2415,7 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -2577,8 +2526,7 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -2687,10 +2635,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -2799,10 +2744,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -2913,8 +2855,7 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -3025,8 +2966,7 @@ Generated by [AVA](https://avajs.dev). request: `// go␊ import api "github.com/seamapi/go"␊ ␊ - client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))␊ - `, + client.Foos.Get(context.Background(), api.FoosGetRequest(FooId: api.String("8d7e0b3a-b889-49a7-9164-4b71a0506a33")))`, request_syntax: 'go', response: `// json␊ {"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}`, @@ -3135,10 +3075,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -3247,10 +3184,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Foos.List(context.Background())␊ - `, + client.Foos.List(context.Background())`, request_syntax: 'go', response: `// json␊ [{"foo_id":"8d7e0b3a-b889-49a7-9164-4b71a0506a33","name":"Best foo","nullable_prop":null,"number_prop":10,"object_prop":{"foo":"bar"},"array_prop":["foo","bar"]}]`, @@ -3369,10 +3303,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Transport.Air.Planes.List(context.Background())␊ - `, + client.Transport.Air.Planes.List(context.Background())`, request_syntax: 'go', response: `// json␊ [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, @@ -3472,10 +3403,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Transport.Air.Planes.List(context.Background())␊ - `, + client.Transport.Air.Planes.List(context.Background())`, request_syntax: 'go', response: `// json␊ [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, @@ -3575,10 +3503,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Transport.Air.Planes.List(context.Background())␊ - `, + client.Transport.Air.Planes.List(context.Background())`, request_syntax: 'go', response: `// json␊ [{"plane_id":"9d3163f9-9185-40d3-a0ce-a03d3c7ce402","name":"Woosh"}]`, @@ -3692,10 +3617,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Deprecated.Undocumented.Endpoint(context.Background())␊ - `, + client.Deprecated.Undocumented.Endpoint(context.Background())`, request_syntax: 'go', response: `// json␊ void`, @@ -3786,10 +3708,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Deprecated.Undocumented.Endpoint(context.Background())␊ - `, + client.Deprecated.Undocumented.Endpoint(context.Background())`, request_syntax: 'go', response: `// json␊ void`, @@ -3880,10 +3799,7 @@ Generated by [AVA](https://avajs.dev). code: { go: { request: `// go␊ - import api "github.com/seamapi/go"␊ - ␊ - client.Deprecated.Undocumented.Endpoint(context.Background())␊ - `, + client.Deprecated.Undocumented.Endpoint(context.Background())`, request_syntax: 'go', response: `// json␊ void`, diff --git a/test/snapshots/blueprint.test.ts.snap b/test/snapshots/blueprint.test.ts.snap index cdb5f059c0e94c7d5c14db03eba383f687743d57..a0ad91aaa053f2999ebf3ab4accdb522947f576a 100644 GIT binary patch literal 20385 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 bPrLtjtxz%9<&v;y?#;Hk){)uYM85kM8vC%Q literal 20401 zcmeF&RZtw!yD0kL?(PuWA-HRBXK)*WyACeF2?Pu75S)QwaCZp73GNIb5S&SHKlz`% z_tSa0_vO~DI{mO})vE5VS9d>rOMWe9C`YgFZtdyg=;2H6CxD6c=G!~@kGE7_VSn?; z1M~VA8^m|vHZ5;8o5ioy@a;~&l+z`mzxm$>(rIC!EWm*3TX-DkjohY@udJ@@8uBgk zZKzR;-~xgYISQ%?@#YWh>G>&*g((g0N!P}CwS~>5CfC=gy2UAGH~!YCci@Ixf&wuI z`$$BY>7x|tbE(-!>5I#v;2DYAf?$WG!x2H7`PEYj@U>WMfnYB`yL!Xq4}XoxB?o(o zciz}*6kSuN02?j8!Q)@H7Rm19U$=n%J^atCfms$;aWCW0vf0b(Ah@a<`8X2m2~CZa+&9w?l0* zv}N4xBfb(iswmf~3tMVvg}SU59}lZpF-)GCkUsj}CY8!Qk#d)R2ZIpP3yUi$LC^=9b#EWrZ-=4qvYm?WcxG=-+ z`xHO90A@<&MG1|Ypfgstc7_bd=Do5ubj9;)JcqhX{-J z=qulI&#RSnP%cUPoU7CHS2lnHzu~8u@p(I22g+veub|jEM@}2mi~jh)o1M>{AzmM{ zsMbczc~)wBb0@zMDqBj4cg7pFe7NX{f(Z>NI}Vs3kqGLTA>jzkDI&QE%~>Et3AWiZ z#!Va75uE!w(wiVr=nc!(l!o`ARyqM8sOKvKYB-WL5t@{%r4j8y@J7^RXP6m|c?Py& zqmX0h%oz=n2d%qw$)AV>Y5ZR{Hsfbf6`&kE#ruIbbmSL|NiixmrS&cg(atWenRt@t zNVE3?hU2Z>^A9+50b^)053(dy;~=6c$ewG`ecnvIeM?(k%)+Ma&R3^%601qU->f6d z3(Aw9SLgAf@X;_tYy>EVJ4wQ?~8*NIfULW4>KZn0$VGJ7EHRU$yy^_;mA! z_iy)N|Mv_2*SGz;2=Bu#krJNzNP&M&SQUYRn2g<9S3ky{{$MO9TV0OPY0^E{9o*kU z#3&x1kP_T8&B>3?oE=&4<2Oo z2@pBt6BAO63G5A{TS<1$53|7+YmoOi2EV95I|->F$VHjV9odK; zIuw*fv9EyGv&`K9J2(U}2|Q53LAYrap$$fCt{rGLfNgN-lyZz1#cb3LUDXnrmkku( zH{XA&_3YpPfKlCQ2fsVRi=Cl;dC0fAut)Hq!_q*rcncU;b;;TfWNbwvUB@#RYS%Ga zaV(1yUyTszENh5kY>w2n__0iApsLb#NZT6Ul!$UEIyx`ah$w3%+Q?<7F%PD%9*M>V z&oP~=BmG>9a_Ky{&NKji_jAaDttOYt~_O$baMrd%j}d zs-s8l%B7MagQI}j_yw4Vuj2S7XsAmOE#iFL$+oq%AC8a2;qo*A{kZ0}NOGXkP>Z>h z7!#0ns6{|M4>g1{*SS3B?_y*z=}-%w4pyhBaczv7sc0R_EU=mgn>&(OpPNLVF-ndO zTOe|`1{lCgK7*#vitk8($f!Wii+qlirg5#W;f5P=#sCjQ4_JzV2hDZUeg>mqoeZj9 z!=8iSAgS?1^ie>}gHFBl$V!~Vv4UJ^K#TNgJzmv`!o3bUR!nl~mzu@|b_F(a1#3&T z9&$`Hg;*r@QL0q_CDHGu8rVklY(hX5j_!!%D`(JfM#mG1-on|v zjD_nfI6(@^LiYb)VMYa6&q-r{iynO9Tg69x9EQo0FJi{sc^*>nteMuWPvFF*>0m_fD~m|Vr(rxJ`v-Z zIApzx8&&Dsz%O!RDx_c=*amquK9=T(L3}KM54)wtb6jm=uiL#FP7AmcloA#i(#n#) zrLibg@Wg&&iXG4N5j*vH3RnAS&0z6XPVpBEpwPDLyPzmBn3`3oDY#{>Dw4dy>ViYD zUI6G7Rw&LcqiL9(5GEH$V6bWhqvEWYo?x~B7P$;f%qg9-`qe_q+4J5VItjU!H$7{G zpLG@09qtf-BZcmpzJL>w%qcpZoVrF@sLnaAd6~l8Z0DT>ycdYBO~M({x0LKy(=Ggk z-`$(!nUkpM=e-@*v=#e&Fn*IaZoN`iPo2eL^a~yTZF_E1@OH&k@ryi1ilD-c5YdFb zLl?<`2CJ1%VpCU(VAfI`6=lf&IWGWRj2V2%ST~^@Uc<8&`U_AcZU; z9HO^M$loS^*{a0MJWWpBAt*XWf0P)qqnMX3CEUjNDzT>L#H{bMhT(pM-0l}ypapG8 zw{6dsxAR~PXdsH8!QZAp_06IWCE*Z|7~Y&|13XLuNI|i7g}e7NaCe6erj1_BQo?l< zN>BuW1<;Tzpeqr%)1uV79IN2)gZe&h?!>JHOr8w=5R<@yp%iQ@^1k$4J?GRhW`6h3 z4@k)oi`+LhK%QUJ@|J5&`8c4eU_7U0n1-D~xq~fU{0YJXEnh#H>lglJlFu7P zQm}4XVcX5~jN;lqJ*!AzCkO_?^65pM%G%?97WI!SXSdga=`nnpKu_ zW!c>M%$WIdy|6aR)FrI*Bb0o*NlpXdv7o^tOZ-KuuB+IVZ9@Cj340R{f=`zfG zQ19;AHr(DrbejtCQ6;O`aINJWiRMApozD0Nnq@ja6+rm+!@#I?n`@ELYJ4ATi>xKI zRMSf3h|?tOyNgH)a|hR&s(y^f>q>465GN zV`O(}A#+zs7kv{a{mjtbAH7!96xbspxwVrujfR<@{V?420{03R-Jy#_RmtktS@WfO z6N)N3_{Lb~&CO(v4F}al1WaZwYZ@a)vo!)=5I+wmIs(ahLU#NwMdtJ#((X}&r!V~- zPGn^i)09}I<^;V8o$cfSTFi8`9G@LN7X|VxUZg_P{^Y+vgD@F#aqQT}DC<8!jLW!* zgQP+D4A4xt=x>>C5gO`n=^%UoSe^66jfiQIB-3r>oE;;z=uQ5wHiL{d_c$V0KqPmf zGiIUy2HXbm4le@Ez!wm2YXWY{5l4OzK)xAwJE`H~!H%$sTWvx&Fb=>)=`Ym@XKSIu zw24#8Dg%%v#tr=~_0({u;%vR<4sopCtUq8~OL#fAyWiM(a<%%1FW}zFp|Wr-R`bnv za<3!BtPnoEXm>P!E%w0G8N~Zmwm&lh(DAhV4a5y&&9;m(im|3}Yx%aHN z`uIoxPRWOfpo$|Lh|9@_D`>iFIs$_C#Aq>D-Hw{$L47noKh<8WuCE__K?&uo4KGbk z%aX8pKha0e{@BWBH;LEH6MTAI=T>Ijw$6g6_Xa+wuK825KMu?2-BeQBAbGSewLPBUwoG?Ci=VcxoEUrl z>!rJLZPANz?Y6H?-3q#y#YU26iOb*k{|X=*QGRN#JVAS}Jh7c&b84r$aVJ6TC~=y6 z0$o8RWp^>@;>~J{xk!Ih2PIlY-QZmnddAiF&5F3zUY*IzS6uAO ziG-Hd_oax<-=4YDH<4GPdGL=eeo2%u4fYSYK3v-6LE6HW%~Re6lz_syK@oBMPjd_evCQ&XUy;EO zF0DGX=rJNUQdY&BJu;C5Pp7S+lT4ZCGmU7ZPdeNfAHI}0eEB7!_eX*OqmpUu!R=tg z!)NUxR23?SQKT9vpb9I*9vuI&vz)MVK0YV1w(Q}-8us`-j3}K!h@z5Z7(DJtPcbtd zhQ<~KJ}FJ!UcTUC4U3x$+q;_6!+XAh%HnAsT4!7SmC*b1*h|Z!5~g2xC-glmR7v6f z2fjGvRhjj%qp`T@-+aj3mH_28t=oxz4^cmnZNJs$*z~g9zmAUSh#2fZjkG5%y(b>k zh&Vl0vW=H0n=$w1UqX5fIPCBbn5XIy-Zl7nnC<0ioUT4gLbE?=QnQ>-9;6*0Wb6tFI+YlO8n`|OG9}XrUNvNcvLtRYyg|<#PiO!g$(9O+f^;e{pt^Q#Q+uLj zQ}T`6Y-Lu|=eh2uxHI-hN<@(j48jk!$9AP+>NYcma7J51mPNS;zx6DExbeZK=tZz8NOyKI}$#jhF((aG???d5x#d^ zG+`QXAF;=;Q)*8RDCUHRm#;l$%wHiLw5bRR0`yWyZ4Lvh6rPrTXBCj0F{;wcAIl)- z-4T#opw|w#fdG}t`ZGZrrFB0+pNJX+42IYUlm=GTp8y>o3dAeD@2q86%58@ZH17C_ z`ld6?MRY8blcMgt+8||xoym<-fk{^8KF__W<%b4$MOhN_dyuR~+REqI(du_D`8&_H z--Y`-+#-3b@@*C?%|j1(WaD!U4c&zCWo$rS1E}IB)kV~?T&}%Y(A6?sKRJizDw5>v z)7RFT*byx)<@;tqogFf@jGc_=gt72HRF^^RGeo&g##R&3DnWLHvtG)7LM)E|e8&(s zQ$tw0=~i09MNF9PV=>adJZ*~SnA8OX+7V|K)YViFXSrQ$oU+xOG2?=xjTVaDeNz4< z8b2mcRoB4sTF`XpFGY>A*f4_dTn}b1)%a?9$X1Is!NwtG!l}m2wXy9#r)#XN)_be! zB(BTy2l=;ne3iAkiIrwrCo`Uk3z1GAqUX#ETlGwPQqXO?uSyv!EMib9I;( zG0EPfB*(=cI}(GcKe%6yO>T5??x=L%lPFa*2Te9N2XBPWP+iiDc65&LlU~LK@kh!8 zB}L-p!RYTEh+e`6Me;n|BDKAUL%y}*Su*zcunv@CK!J#L#cw2723Uz;Q^-fLUO4*{ zn3}Z6zvL8)76IT*!lPm|gsBc>iUgL76 zpVH8Z?sXXH@(vVcLsX{XdP2rEsF*7s|5`gqyJqD3>3w+MqD!8b?qcJ&n2Ou^TRNl| zUw}@-It2ZcDyAEW3;1ws`w~vpoZHPZ)JwGc;}g{8?P)RkjwbT0>X%$ytqP1hSahzQa;x~3aAI!P}M5?NR zK6ZG8t3$nyM0VB34M4RxNuEZGyT0`=!1qFqwY5V@2#UV-AAqq4$&E&gcGb{*O-U}x z+S>l6)^|bld{no}!TJUIP|B%1)JZ!DI`;OIEfLKqqsl>q&a%FnT1o|Ox@qQ%31U9&in}z0`8Y2|&yqTrY+jw(*?pZ}Kr{GRj-Ev7Q zhIA!BACAgZgrGh1(Lw-5L}8}DmWG0UDHAc|dh~>S7l@jXk6|rPdZwY0gJI*KmPIMv z`pe^`S9}4?XKz_py{X5wbJk``b4gQ1)zCbZnWedA_{iZr7%Ew7Ztfepc)jr`IWV!w$-` zNtquJn-Tc4SwQG8bWmvbz9zsUc@OX;sGKD6S8L3Rb;pVIeBXaP<#AZzZ1hZEC6Hr% z)_`3z=Okxdz~@XyoPR~SV%>kOOz@EBcgA^_dPU16&sauS-z09uVfUFnWoWyU8t1v6 z)=|GdIOFL+ta8z-h(_)H@>D;_y+}%}>bF=Gv7}Xn??%X22I)+@g40FFW5$To4O?r^ zm{^6^ZFR=-)?Uv1kKj|C+QtFt3IwcE-MsDrv5G=0fLcG7rw03tr9=ky?Rr(qv1M=u z?)FK6UQ7%}1uYhhK8LYm-26ez4SS)PV~XBg=nVVOxjs90_bh(}-g&daxIb6DqOmGpz$B z4*QIktRFs%iTCuZCgVDgZLBc3ev+b5;`S=at5651UGREos9t`gQ9Gl9YO`M;1ZN0K z!V2bV&;V-d70K*dU5mIC!P)CoR|k5*8O8@a?JdTJKezP?jN(Z^d8L!o{&{~U0b)fa z2gb?ilc(Qxf6G03V+YO^QQt})N-8wSRO>xF%Z+8^akne5+jNGixnysY`37`as8Q}3 zTr*TZoegmYK{-+ zpF@!I8X`vw2$)FXqzA)Hf|Sohw|z>2lyR;aqWp*DjTkek{RYmzQ*g*I+Y zd*D)A1?q@$vr7aYCz^AoAzzU@O;5clM^4lQ`paNo6-O5rA)f`^1xhUjt3{4-Kxee& zW~+c_`tTq6P`K0TOAE5g*MVdyoT}nj$m~FeL&;@x>U|w@qCW6e3QN5>25UCb4=JP* z0kJ3@_y?2gMa=P;ZfBuEEHW*KW`6&pXD3Z-y%jo>k3GFHa04{mFoZya-v@M=nfBwUD@0bfWvdQjx8 zA{H8CGwTUmQxRRdNK8Fqyv(ex4as|PvfR^wQ6#I$Ztw@;I~%I#e$4X?2Ip>MbsgYy zo5GM^PAg5(4z7s=ERBZHH6Ah84XvjYiRbL&T%o5EtKcg0U@Qmpyu0LrC#MOkXcfh& z+xo~I!w-xY3=-*Sqq6ToJ+X?ql7hOXATO{(r-OlywCJHUu|2p;J0FWYRG^9|S=Xq) zdJ*Eb-&~07e$R(>8$~j+LzRLV{CKB!u*`1cx6Pn8+!$GPTErfMj~;TrHat%@<{as; zw^#?SFuB6%G&azRFOV+$ffo{pnq&Ivg!w?5GIeD6Fcc2;Wd(J4&u+LZSO@I$h4_%y(nfeB%eL||nMWkJ z+@oy%MX?P*nC$yVplp4viy@*gDiusDOcV29C11>2I>hf7tTD7z|5J%Ns@w*8O5Ov) zJ{QB4NLKF%h*c@-z-Duby_kfjo z0ROZ@FU>I8HAZQkN&6m1A41Ud`=f3g=ubXJ2kVSV1)%=RZACi@SGTZG(!7F9&q;&L zl4j2hlT}~RK1r;Uf++u4)s8s8=DiR6QcOh@Z((-0gbuilN9Z1tV0Mip`SR~GqW_Q? z>ZD^hjEoL89tCy1k>dGytBrq2RPc&%Y@Xqn0`Bl5E4_Rl@b_(qAA#W$_Qf;TZjp`` zS$OPDSnP-uaGN(Z1cTK4i{}YoGgck`lezkibMr6f(+#I!*S|9XUe7!VLv{f#@2I=5 zsluXW!_z%a3^p(NBgQUD9%&AqaYJ7}ehOFVr~+&IahtD&21vXHD8 zp`&6ATFAo_@HKphB!9E)S^~V#wvd%Kk(ahmXtq#VrI5EInKsoqc$O4WcNqd!72s`g zFn8@idu@!{rUZ#!?4tJ0znL9>GgtrO?ie*2ax?T2_mE3y2YzY?R<#4Ol;8zQLvFfW zXo8UnlyV+)a*&jgiU!#W&Rsunhe=;#cPNTPD9Z0p6y666t$Wpu6@WQVOm4|LGHf6D zejhpN2}S>zd6Sl;eclS5(+}+L=i^;D!^AJZN%d?1cTDV~2u)%IWs&{Ld%+?8jF;i* zQQc7y5gCVsa)FE)hD+>PPcLd9H`H766OjXx!-$xxmTlEk7vEfUuIfwlV?%;^1Jid1 z)2g{D9KYtfSp36PCQuIf2f z0S2CRwb2qKKYPF!PhgA(0MRc4B5E)To0Y{-=+~bgz*u=kWS<*&j14Sc1`2cKvC$H2 zd#>8yl{}+6rV5^Mt_P{dVIeq!zbGTET+okKh^Ok=R{{D%g?e6(E|}6_c610cxv@H2 zk9+XQl<>SI0jy)DQ{P74*aoz88ysDaOr^)TZ7n={t1`!^!Y85v|By;wom^r>gK?Xb zAh1mEYni~cmho;Vx`s1H$7m=N{4;Bbq^^!r)Z7SGMq=xTg6GV<>CfRFX9({yoMSdl zCE&VaGlnZeqaRgAmv9K8W6{6GqSIm$#0N!o1QDKpO`x*WE&;O!)E2?^f+BIRQJk)s zH)lEAUy9vGm&if@R&*k;Sz@kITj-;8lx=^BRT&CH`|la?lIa(qoc&618Cm?wCR8W zI|g{=hwiI8I?&}N(FZLEB9jOrqX-aFln7^xMq`8t1)Z6`J2M%tsleBZi)SZAWk`%# z8%z9bbYDX0W>(g zMUhd$WKqIcR>au;O!!3399UoTlS3KHSqV$;D~fs<%Enie9cA?nQx1sfXL>fJR02k0 zO2$=EMo|*RU1zXpv9a8}@nEX);FR$oQFz#ksNoPwO^13TVjg;z5P_`_0hiO;)g{HD zC0(zveDpr|xAC8duv3UMQivo;Sa*+WJMi|9i$^fdr?WOhg)S!oUGSu!qkJ!y$jAt3Y0tq+ z6L_nZ)-vxTWEhpR9hy&V9#h?R{dR{$>8$m>JC=EsGl-QN{6QDQ<(G<}n&&7l+y47K z_DIFuG>?a0Q|6t(WDdpr#8uT1FzBoF$wcXD&Nl`nA5;i6UpI~u$(QO$%-nfVMTem3 z`-z%e22yaPK4ax~-ct6@vI$GWS9j0_%{lk2&!einhqd`70>2zJKPA8GXW)5XOk}8+ zSs6{n`(7CADWY0SJ?5Ivw^P*hr%TRgorKZLVtw;VZr+jEPDbZOxlU6IW*RZ}2UWzI`EZtP^6ct2bzB5gvEmSjj0B zq2W{mZ2WszQ!rC&YwtjdQS-v`!NV5?PzL#9(PW=!}pZ!)PNRf?r6JLG(-F=+1-_+xLUc<#Sa zOK+b8Xn|4({so``TDyyuA)cX4#$v#;bl33zMkXWiV=@!(U*~RYU*ln~nY#_dF3+Yaoo?6FR&5jy- z?em;DpL!%%)*+stfEf;zYM=>H3>hCj8N4`uvJ0y+V<**o{b~a9*t`{xB5(zDpHJ}0 zcdFG=F%?6;Oc>~Os&N>p?sL?bGiQR!yKvPwR^C-H&*UE(mb>I$imPV+D<62y%_j?1 zoG1=W4|;YvlvdvT?gtKelVn4F&KsC-lh^!DwJSm0$m@uM$0HtNvNi7fK{eN9@D>$+ zrxkW$3I}oDWoZf>{O`&(dGklG>x0O_l!0*P1dGwyFOGb3yL7Otcc$h__}VYii5~Z$ zk1p(&J6RkndI#4Qo1Izj8W!HowPpkk8+?XTOob0d?{n~2j8=di??x{!gFq ziL(CP`u|-AL}b?ln-uL9U|beTZ8f0)GzCMztDr^f3uUJ6*Gsr6LoQ2P7E_x>a-til zNSB@Ml z#}1=lX2q4=0|ffIf7x;raI7X~t$Xw;yr2EWaFiWEQTqh^r}(Pob#lafMUtP4y<&-? zsfDycE%Jr)nWk^c6^#4(TBeVINtR_b7ams50@WQBYD7q+{^Zs-5m0^5-ucfH!=aSKd0PjEA6se zqX94T2}8EjU^}Kd zssRT0md{gsr(+pYS$KbcR}>dfuvvGM(kPq_Yx z!16!}SIW$4YY!F-n*2(flx?SAw_ALj*j%soZr8dC&#+v1S4+Jnt$(^r{ZiLIye6r5 ziAUp-A8*$MmwAJOSO#2}n=^wI{ZEIrkpi!8!zOnqcX`&)dp6LWTN_D40Hh+7NhKy! z?7BF=6a!gX2(UdEbLNzw6-h7^s)%4Sxu`b6mTqj&#iHR{Sv|0Baq$ej%`KF`J>Hwe zD*@48B+*%#Me)a=qJ`mZA1M{LW__koR&rzMS%0Mswd+Z>&0Ri;ug2Iy$ciB?C*}nL z*?WruiNS-#c`ewImQHh_8}A9jZPTG&WaU{oWWKp>p+S3r`FH{QlT+uz)IV-8HUA8?r;&tgVfpG`0Rx^z0_ z=U`77y>6z7M?LarlOHnv4{nF4&M=z6@ObPmcPZB{+iCjF)+}7PW#_xS?-ifa0D};m zU+DYHBJ}!oBS~RhP@q5aCzEK;dB3UgiEC9Q)dAv!tJ1`aU{(srOyP8m!V>^+-dhvMd|B$fx6cSlkfdM41DQcoc%_ zA!$1U(^35#VQx4fbrEHhcZNu0%uxoeIO~AT3;MuI&r5_PJit{1Jsp+0`vrUba0vYb z8tUCZ0G$(;A|;laMLr9_%my3+^P&rwL2FZkY-KKc+zm)bdoH8Z-l;+IML{$UE>kPM z+k$2Pc1;ToSRP3=eH!jeE5&3Ocygsp?MJf0=q0D z{~u77mq0I2cbJhMp0*?X@;)s4f$U!D!0ML>N6B}OFxj-76-2JE=V){;ZEM^1eCdZA z8EM_^zxzYl@&A|9{a;e|e@Wf{e@WdwYH#*_GGMpZT`g*!qgJp|;$?YfqPJ* zXxqGs4&D%@Y@z{Hm=g$yKh-6dzAr;QW0#&ppqPm3)4_y6obq zw@zyMOr4*&;_OUL{#(!qW4R&7{}T4`ob7ITT(DBvw+`a^Ws0%yWGM!!OrKtNKFUV@ zFFwa%3gkwTdz#XYN$MP&WS;E0i83_Gu=>JpBBPRBlv~Ngn0Y)3VBzFCXAiRDYV6}Z zw6SDO5N^lB|Ilr)86y!h^&dLNw*F(!*JQOSUs@TwK+1Du;)~-J=5xH>+=*mSCCE!+ zA@XGA+bR;XihklkusqKt8~>b~vDCuW*i?zO-kJqkcxz|Y-eHnSvosXZl&Ge>w(`n7 zk>$yC_bm+qGR^wO-b(iWvA4S{Twe<#@vg8Jj~}fgj1i9evTK#~YIaO~EnOy=7BH2y zt%|bK(eT73W@@ZR(|=%3_C${Y%f7Ww3}kVkvcgzV=29X2N@$@jN!a4LC%bkfT=9;u zuFEMibU3Z4KP$QEhnokfoy+=`XQ07RbQ^9)(MDUj+GB2JTaZBY`x7^w`UaJtskG&# z^~^8Jz3ZJVZ7SlBLZo^+PVRaTz0sbyd5D za3Q^Vp5Z}-WW)a_UhbE}DNAb{VvVj)P1^6RGi&SMfF`M)m#QV7vx==qoP7)ZqE>NP zPc)UoH~QiOWi(7G(SMCE&}d+?Xl5Kqb{xtQ14c9-lXbcoeJ|M7+-h~k&(ZH`c8`*w z{fy>W4BW&VyM^>!>D-xy?=rIrVOd(9F09{=kU1q({esy6H-3?~;t_|~yM@-W4jA)B zrSF;rrp{c|EBZC;bRCSBDT*$zFZ^QFo3=KHIZ7=`bjiqnpxA>Vs=8HDH%K^?y9Pe- zv;odjYeIHVczh#1Lhyf(5O%5g=@WA-bPd%(pq-r5XP9~JgtnjME1X0ex2Chy@-!;c zMGlv6zH|>>xx+JDMT|P3g6DO?rSJ#6QyA7v^uS< zf=3wsR~cNqfVHVJ46LA`nIg|FR=^>%^|{fS?=gy0&{~tpS183Imiq~cNiVF(5^B=c zqi5$+M^~&j{tc9AaP!*lwc-+M9^)f(HZ10^iHBY4H zO7VW(M398SgeaQj?0g`2=BGB32Z1q3hgjR8avNmpS1}oVU-pdv!dQ<(NTJpqR-!9p z&R6Mt4YjU8*HH-1u4|_{tJoK4U15BUbX-Sh-L{j#2EsenQFIS-j^T$3bl#8ZIiVc+ zV~@iN&u(iWCD6bc8P^j$y4$$RX9mZQw)a?>n(YX44sVFDKVBmN`#+0SHvOSRe?f9v zE6`a5P@&5qm9EK>i{e*eXK)qku1QMc7tx|Cqebq}JBq6e73i;(V@F=ewYi4rtZI-W z>!S{Sk%K?ci!zz@)%^>E{Ss9=3?!EzC&kO+3$J$FCda%Wg&z-0f6Z2aKPK9|LC;wQ==T~hjre@a|z{W*~IrgiqQE%g` ze^5p@Nxpx`Rnya%M_3!LY&=D~DM|U!Ljl01Y2RyetX}KR{yNWaveZ8}t}?m3of8Ti z`L6&avU+~ajCLtcjCLLq{5MVIZcjA0Ei`^(pj8*7#Ejm*`nsb(+Tfwy;Wh3*T;^UP z`iRbS^LShYk>mazY^pPm%;AX(C6gpaAObYtX75lesKN4~O(zTAV$BBOqQU9=AzgLiBO_&~gP{DM54ZdE&x(2S`7_TqXVIUQP?RB?kLK@MLB}Yiic$3%2X=I#{POxUIJZWJLX%TJcu|z!i~)F zzJDyGNG(Fx5P+p)i}H5g=&fArCCyDZo^*Zj{Mpsi({Zu1f*zH`_YK`F3A%&6L&dzZ zWU$hhJ14oY41x-*FeIE<=JL@K>Akb|VF}5>*s)iGP*p?9zR5j_nyvhpF&|qk>iNbC z>3p$N(YxXZ(VnC^@-mt<##?y#{Q;2MI(-rL&Nkm_Q&=v$VVd7rA0q8TMn9s#2^OY` zFK!gq?ZFw@ugI^6Y3;hAqKq+UVy=C*BQyYJMOD|@XKDhBJmyV?Y6}g-tt%`-SO1NM zN|T53bbmtY=xjKZ@|H7ICC6w+FF`e9jI4*Q>?pPy7nF7q=xoA|dFGna&696yxs-MH zGj##pO_f=C#%;YG&1KNGY|%PGOU>X3Cfc+;dfJPEroOxG=AlSp zK%P1CP^DP7x$)w&opZtVZJIf`F-K%Ek>Kfv3vtLCGTPuuG5i&)??MqcGdkj{PMz@j4Z*@bOZ$MG*cJ>J{D<&~!USt_rRy|r)Hv-0^xeJJ=tiiwvHLxg7~FEuQDU92Pu;9sW{5}IYGLh1BDOLzxLJb*V*{D zvhma}t;;rB(g_zF?mYqS%kMuOeUN_2!Xsgk|D|{+N)W3VJ@tvuw}eoi_42hlXL?hJ z;Jgq$MJt+y$of_B&i!qN_Lr&8-W-~9Ow}S7dD@Y3>GU8%jbdbVTLB8KY1bTNUaiP> zmcemVI2c2k;@^*@_AC-OwF|a~{1i$Wu}|Zkv$n<(6m4quo99C{g(^E4o_9F7-`!*kJcQ6R;wBa<{E9ixdKfDerhE@2X_PeMHjnti#p}`gAvL46=QW44Z-!x+Z0}*<3-UQpJ zZyzt%j$y)l5dvmX*HNqe<0Pg((t3BxRutZTrzj~#xEBEa!4B|7J~L&J0Jcu#ZIl84%K)N-$(I_EB2^=~&_D+hU5@SiJy8;wY2Cf#o&~SXasTyC!S{tXdoOUUV6Vq1 zP*K8-kAWJ|fq3QBl(|HP)>Nx@&5gwk8&21xSVi}_9{X9(B!5NmMUw*igZpEK(vDlo zd_s4j{=>x<2XlX5GCQciAx`f_@-d?*-yvoGC~$@yW!8v&OL&LBBIfc;XI)}Pn%OHw zN{#!%OUr3filYK_D_ZG$MJtiv%mvkU8bA!rIN!|ZRN5w)SwLWIw4sON9dAqjL?(+@XS?>-3^CU3?X?8$@=fjt-uj~pg zcE&~Tx_AviIen{*xV*e=Wy5QuHz0Jg5883M>IGHyM}(R4kLuL=^OC?gy+^cD{fXcK z+6o*z(JJ3#gv>8~H8yJPJgo{x+Z8wLy`77+%voX=+}v529qq)wNj|(Uv_E_|R%rk9 z&LG(#ODt>e*E@P|I2BGNAGRRhv$kLqud;omxe~jE#9K)5h@eN!dajrrKFHkpACmiV8NfCN2~L{FH6viUYdQGm%k?D zwEu*hc+Xixfz;ej&|EKW()Pzv4;8*b#C$laMj+BmF9L(d(7j0MizP-@buw45HOw*q z#9OeA<TI0pQ*@f(-Kf{p) zMx_z3c{`?iC#LyAzWx?A60EZu`X3@E6i&C^hxZdH{_aiK)0-ALHNG-LmsbYgXZ*Gh z^qmm&h7jbPP^Q6mB*vMq^7XGn1+POsuQ9>5!<>)I|H&HnVRzm#zOUroGO=xFz*7W_ ztcn3r>W`ynuz3XZXJk?IBs?{!E6VaMJ+?G@KHkuuDEL$r{HThMOF7~XML;NOx^$GX zOw`ouZs{!ZDltmiwa@CcSO87rLEOM^z7}b&!AcHj`7lrv`viAbInH{IK-60?Qd3_w z48hV$_K}zV8Ot$@_)57#qGlm8c-zt^Whk-?{!LdjoOt_@Fzi`xh@`rs#75_W99sgl zIeGBo9^ZaPbbjg2W$HN4Sm_MLp&uegVYHc+TF1ZTrtj$`G8iXXLshK1H4QMh5utlg z!lgLMzLwmDKHm#5wiJ$lmU_p%UqDeTsA_lB3H^yu`k7L2N2MbeV7}*3GA_b*KxO=d zV;hQv7tXm$THQgjGjy^uJQ)ZFOg#0JvZ>On3cT{z`v7fd7|B%mA^9i4~@H) zz`}5_zA)+VCEXTB%l-%6&Uip*6|Ij!pFM=;TL-}O8af#3~2hr!||IoP1SCrZ( zM6_^(c6I0l;Zum}kQC%+?JFiIEaovRW~+bb>m>AdQ*^NWXsAC$SO+#^cvNS<-0=nU z&>y2+YxLhtt?dc-A8(tb(?OAAjpjaACCQGYrx}bx4^x1D!Vl*mbJc?Hy8_>u!rYdA>K^;9a81Xf6bfDtCT=k1L@-8j5C%t} zdIy<-xr>J!nulCOJFvGMSfm91qBPWN8&{>|Y0OxC&UpBfk?n%h@q}~N@}GjUl1pd+ zRy4r4tp@kPB2%82Htk9L2eskg;u2M{!FcaT&v3cO{^*UbKUwavFrQFl?y-(h(fcs) z0i3-5!Ep!sC~mJS+qq-kbc?K?0;$JTS5(hLy?7*MppEIRds3&@t$xexKJ>^8)HRg! zl)>4yF=s+EsMR`v2sMMn+6q8zwGP6ktjY>a1|9sbIv8>YHF41$h};z|0NF%S5|Tr? zrK!{1LXYKh(Yh3z3mGJd0OYW!<;0Sc^~G3g z5%PA%>ir#O{H!5cSCw~x1B#ad${$CRKZYn?-a>yKoZsL2bVCAgc1;zo8W_GUHtsc^35AaXcqc{9sktmExm7~$g<%_Y7>hAfE{RccnQP?MFh@=?HMcTG zsGTgA8FQO9m&)AA(%dEttz%)VvyheI>D6=ke4gj?ee-+wfAM?!`}`SGdN_z4PFYWu zavVz|NUqh9l6$GO7vZDSW1U?&Nl|K?rt-G14pQ71T zRD*DnwkvY)87pDTB26hPvr4B|al1c9-Hbl(nTo#LEfx8$+rm z8D&Y)5YE_H-?wKUglQ2lO1!RRMkMNm@VFw1k2I#efX7Mp^SV|T`YA9L{2Ln{@edI4 zo%PtCV@Nlw(0w}QIxWzdSp~NIawYALHmipVHbGpThNe0|KF9@Dh06jd(9KSOy#Rhd z@iic=ofsOaeU#0rV`o!GsmWDD3EI?MMQidV>sp>9%#BmmAQVBYw;pM_Puof^Wxevr zGH%gj6#i&~86n`+F2k)kw$KUNwN^!%C%?3g1+07NZZR1j-K-ehq9_#!BjF{e!!b23 z9FMp05junxpv)AmbP89|46LW?GnP~tfGZbe#6$p}4B$Tp@bLh9`T$j5RzcsEl`b#t zk&ihAYd>%<&OAX4j4MF$`AGh18A}d=D}pHTf|;VOGFXgq3_@9aR$2VSh;${Bv^o*b zhGgZ8yziuCB*n^zp94rXl!c`g#&6xMEfev3lNdc`gB9(aylm=`Ols-Gtc&VLZPbEx zc5;?L-JZ^)GMh8oD4A{a%p_W-?$Ys;j%+H2IyHsxokXNODU!q+iz`qsMxHFRXB$1e z&mBJCWZdA=VZ=C$?Ml!UW#bRk!CWe`&>}k;>)l`7o%xdD+0dv3;K}VrZBz5Z&G{Vf zIOw}6^tbW}YUm47MGaS2JwozzJ--&<(wmzDhpyv$ON;Fi?17sF@YUtJeH$<^+gh3E z%EU~o<$n$hu&heXgn(^l2zfK2edaAKNtbRHSuY~+{lvAnQ!Uje-Yn#lVjqKwGvgB(nd^=lGzWSVl>cBd{#jXyS0H!3 zZ?xjE;}DE^opzFVs0gOKk_~w(pG0#fIzJh#^sntxEVN2rp8CmIW>by7PP}Rk~ zdn+_Fa#f~I32v3{#QP9pE(_sqrLhJPUv|~pD}POyZfgDN(P&}bn;v9`?FyzS_oKa^ zbcgdE1yRd4KmetDu^M<4fs~3+_yT9gllT!t& zC4#^ksOZKxz$?KUoA+mIjX-pQ|J70KT)XvRi{nys>p_pRU6lB9cPRGA4;wLIN^axz zwR;TG3XHAN=XW-^2VDGD|8X6I?bCfmR_AlfvDR8T{enVhTAujhvnv*F(4F(S*5M(+ zuJ2_vUAHcNvblA9NF`8^t=+PSjs+dCI>M?5+Cwu@h}k+66KLe{0B;C*`Z4LihMM=_ z+=tPdDfebEkT2|BX}HNosI&mEUzKf@Qv~HtgCVbpU71DjGn+8!_7yByeE-IHWdErD zm|}|l*~HzmyMFSk5&Tn1ri)L{oi$9JXADxR(!-#Rzgxx;t%Ruc_URecBY2AWXr!_vG_o03o5FIipg|U?re0NpB?pEn`gX2j(gL55xZcd*m-y%-u=^ zyQA)!v6WR7D$$*Db3cysI9?w%Grq5?0E29*?S}z>qTi-EU_r7U+QBg@AMMLM_&zn2 z<~Td!o(cuK_6L8a58p-}ltKEaWbZ1Syy)7-B&-tN< zhc{jhe-}&gyG6SLY6xheUjB({_0lyLEd7$kdr%g`xpeOrZ#nUzA8`wL4A-+UoBF-T^jb_~%&K}d^Y7AKBuftC{6^!LM z7yZQlZ-t}VI!4uo|K+EvaEdvqZk;izei!NN0AGWd@tIeliW*kn18Nqiy?D4bpC-Ps z=cCf%OMhUly}&w!N!~Zxe<3I**h{;F>bzyz_5yRNNw?oOC=^cJTUK+I4q=+jh~AF( zIu;Pf$mgLk>||-si9^NpcV1lHkHswgEEagl;AZ6%5w|IJcd#--Z)NXYRFmv`M2TWkl>l_A zDaO0Px&FqF7d;0f58rP$NsucuSMD9N8}U1+&;Ave21c+UvrCB%Uu`hK<46&?bbJN` zn?4D9pxTHEN*=9UUOd7t%HD=1Qde?wmby8diGLP23#_XVQ1R&z6(n`+&z(E|1J)wn Az5oCK From 0d3cc1cf4cc68414690a592103481057896f89a2 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 15:10:27 +0200 Subject: [PATCH 18/31] Imporve go package name determination and nested imports logic --- src/lib/blueprint.ts | 2 ++ src/lib/code-sample/go.ts | 55 ++++++++++++--------------------------- 2 files changed, 18 insertions(+), 39 deletions(-) diff --git a/src/lib/blueprint.ts b/src/lib/blueprint.ts index 0261c53..28adf6e 100644 --- a/src/lib/blueprint.ts +++ b/src/lib/blueprint.ts @@ -253,6 +253,8 @@ export const createBlueprint = async ( // TODO: Move openapi to TypesModuleSchema const openapi = typesModule.openapi as Openapi + console.log("🚀 ~ openapi:", Object.keys(openapi.paths)) + const isFakeData = openapi.info.title === 'Foo' const targetPaths = ['/acs', '/events', '/thermostats'] diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 705fb76..2f6f4f6 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -5,26 +5,7 @@ import type { Json, NonNullJson } from 'lib/json.js' import { createJsonResponse } from './create-json-response.js' import type { CodeSampleDefinition, Context } from './schema.js' -interface GoPackageConfig { - readonly pathsWithCustomPackageName: readonly string[] - readonly defaultPackageName: string -} - -const GO_PACKAGE_CONFIG: GoPackageConfig = { - pathsWithCustomPackageName: [ - '/acs', - '/access_codes/simulate', - '/access_codes/unmanaged', - '/devices/simulate', - '/devices/unmanaged', - '/noise_sensors/noise_thresholds', - '/noise_sensors/simulate', - '/phones/simulate', - '/user_identities/enrollment_automations', - // TODO: thermostats - ], - defaultPackageName: 'api', -} +const DEFAULT_GO_PACKAGE_NAME = 'api' export const createGoRequest = ( { request }: CodeSampleDefinition, @@ -39,7 +20,7 @@ export const createGoRequest = ( const goSdkImports = generateImports({ goPackageName, goPackageBasePath, - shouldIncludeDefaultImport: isReqWithParams, + isReqWithParams, }) const requestStructName = getRequestStructName(request.path) @@ -55,48 +36,44 @@ export const createGoRequest = ( } const getGoPackageName = (path: string): string => { - if ( - !GO_PACKAGE_CONFIG.pathsWithCustomPackageName.some((p) => - path.startsWith(p), - ) - ) { - return GO_PACKAGE_CONFIG.defaultPackageName + if (!isPathNested(path)) { + return DEFAULT_GO_PACKAGE_NAME } - const parts = path.split('/').filter(Boolean) - const firstPart = parts[1] + const firstPathPart = path.split('/').slice(1)[1] - if (firstPart == null) { + if (firstPathPart == null) { throw new Error(`Invalid path: missing second part in "${path}"`) } - return `${firstPart.replace(/_/g, '')}` + return `${firstPathPart.replace(/_/g, '')}` } +const isPathNested = (path: string): boolean => + path.split('/').slice(1).length > 2 + const generateImports = ({ goPackageName, goPackageBasePath, - shouldIncludeDefaultImport, + isReqWithParams, }: { goPackageName: string goPackageBasePath: string - shouldIncludeDefaultImport: boolean + isReqWithParams: boolean }): string => { - const goPackageDefaultImport = `import ${GO_PACKAGE_CONFIG.defaultPackageName} "${goPackageBasePath}"` + const goPackageDefaultImport = `import ${DEFAULT_GO_PACKAGE_NAME} "${goPackageBasePath}"` const shouldImportNestedPackage = - goPackageName !== GO_PACKAGE_CONFIG.defaultPackageName + goPackageName !== DEFAULT_GO_PACKAGE_NAME && isReqWithParams const goPackageNestedPackageImport = `import ${goPackageName} "${goPackageBasePath}/${goPackageName}"` - return `${shouldIncludeDefaultImport ? goPackageDefaultImport : ''} + return `${isReqWithParams ? goPackageDefaultImport : ''} ${shouldImportNestedPackage ? goPackageNestedPackageImport : ''}`.trim() } const getRequestStructName = (path: string): string => { const requestStructNameSuffix = 'Request' - if ( - GO_PACKAGE_CONFIG.pathsWithCustomPackageName.some((p) => path.startsWith(p)) - ) { + if (isPathNested(path)) { return `${pascalCase(removeUntilSecondSlash(path))}${requestStructNameSuffix}` } From 08d9c3fbf364e400e745acdac8f6161168720419 Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 26 Sep 2024 13:10:54 +0000 Subject: [PATCH 19/31] ci: Format code --- src/lib/blueprint.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/blueprint.ts b/src/lib/blueprint.ts index 28adf6e..1ebe577 100644 --- a/src/lib/blueprint.ts +++ b/src/lib/blueprint.ts @@ -253,8 +253,7 @@ export const createBlueprint = async ( // TODO: Move openapi to TypesModuleSchema const openapi = typesModule.openapi as Openapi - console.log("🚀 ~ openapi:", Object.keys(openapi.paths)) - + console.log('🚀 ~ openapi:', Object.keys(openapi.paths)) const isFakeData = openapi.info.title === 'Foo' const targetPaths = ['/acs', '/events', '/thermostats'] From b638638b7d6a4c1e3229a4220d2177cf5efbecb2 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 15:16:19 +0200 Subject: [PATCH 20/31] Improve var names --- src/lib/code-sample/go.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 2f6f4f6..e8784a2 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -6,6 +6,7 @@ import { createJsonResponse } from './create-json-response.js' import type { CodeSampleDefinition, Context } from './schema.js' const DEFAULT_GO_PACKAGE_NAME = 'api' +const GO_PACKAGE_BASE_PATH = 'github.com/seamapi/go' export const createGoRequest = ( { request }: CodeSampleDefinition, @@ -15,11 +16,9 @@ export const createGoRequest = ( const isReqWithParams = Object.keys(request.parameters).length !== 0 const goPackageName = getGoPackageName(request.path) - const goPackageBasePath = 'github.com/seamapi/go' const goSdkImports = generateImports({ goPackageName, - goPackageBasePath, isReqWithParams, }) @@ -54,20 +53,20 @@ const isPathNested = (path: string): boolean => const generateImports = ({ goPackageName, - goPackageBasePath, isReqWithParams, }: { goPackageName: string - goPackageBasePath: string isReqWithParams: boolean }): string => { - const goPackageDefaultImport = `import ${DEFAULT_GO_PACKAGE_NAME} "${goPackageBasePath}"` - const shouldImportNestedPackage = + const goPackageDefaultImport = `import ${DEFAULT_GO_PACKAGE_NAME} "${GO_PACKAGE_BASE_PATH}"` + const nestedPackageImport = `import ${goPackageName} "${GO_PACKAGE_BASE_PATH}/${goPackageName}"` + + const shouldAddDefaultImport = isReqWithParams + const shouldAddNestedPackageImport = goPackageName !== DEFAULT_GO_PACKAGE_NAME && isReqWithParams - const goPackageNestedPackageImport = `import ${goPackageName} "${goPackageBasePath}/${goPackageName}"` - return `${isReqWithParams ? goPackageDefaultImport : ''} - ${shouldImportNestedPackage ? goPackageNestedPackageImport : ''}`.trim() + return `${shouldAddDefaultImport ? goPackageDefaultImport : ''} + ${shouldAddNestedPackageImport ? nestedPackageImport : ''}`.trim() } const getRequestStructName = (path: string): string => { From 842baffc3ff3625ac3cbc1a0182c635f262bc220 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 15:17:57 +0200 Subject: [PATCH 21/31] More renames --- src/lib/code-sample/go.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index e8784a2..d13cf9a 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -58,14 +58,14 @@ const generateImports = ({ goPackageName: string isReqWithParams: boolean }): string => { - const goPackageDefaultImport = `import ${DEFAULT_GO_PACKAGE_NAME} "${GO_PACKAGE_BASE_PATH}"` + const defaultPackageImport = `import ${DEFAULT_GO_PACKAGE_NAME} "${GO_PACKAGE_BASE_PATH}"` const nestedPackageImport = `import ${goPackageName} "${GO_PACKAGE_BASE_PATH}/${goPackageName}"` - const shouldAddDefaultImport = isReqWithParams + const shouldAddDefaultPackageImport = isReqWithParams const shouldAddNestedPackageImport = goPackageName !== DEFAULT_GO_PACKAGE_NAME && isReqWithParams - return `${shouldAddDefaultImport ? goPackageDefaultImport : ''} + return `${shouldAddDefaultPackageImport ? defaultPackageImport : ''} ${shouldAddNestedPackageImport ? nestedPackageImport : ''}`.trim() } From 9dc26874836fb061e3c7908fbe105ba1f6ec172d Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 17:46:00 +0200 Subject: [PATCH 22/31] Improve array property value handling --- src/lib/blueprint.ts | 1 - src/lib/code-sample/go.ts | 58 +++++++++++++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/lib/blueprint.ts b/src/lib/blueprint.ts index 1ebe577..0261c53 100644 --- a/src/lib/blueprint.ts +++ b/src/lib/blueprint.ts @@ -253,7 +253,6 @@ export const createBlueprint = async ( // TODO: Move openapi to TypesModuleSchema const openapi = typesModule.openapi as Openapi - console.log('🚀 ~ openapi:', Object.keys(openapi.paths)) const isFakeData = openapi.info.title === 'Foo' const targetPaths = ['/acs', '/events', '/thermostats'] diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index d13cf9a..00102c1 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -12,9 +12,7 @@ export const createGoRequest = ( { request }: CodeSampleDefinition, _context: Context, ): string => { - const parts = request.path.split('/') const isReqWithParams = Object.keys(request.parameters).length !== 0 - const goPackageName = getGoPackageName(request.path) const goSdkImports = generateImports({ @@ -23,14 +21,14 @@ export const createGoRequest = ( }) const requestStructName = getRequestStructName(request.path) - const formattedParams = formatGoArgs(request.parameters) - const goSdkRequestArgs = `context.Background()${isReqWithParams ? `, ${goPackageName}.${requestStructName}(${formattedParams})` : ''}` + const pathParts = request.path.split('/') + return `${goSdkImports} - client${parts.map((p) => pascalCase(p)).join('.')}(${goSdkRequestArgs}) + client${pathParts.map((p) => pascalCase(p)).join('.')}(${goSdkRequestArgs}) `.trim() } @@ -85,30 +83,68 @@ const removeUntilSecondSlash = (str: string): string => const formatGoArgs = (jsonParams: NonNullJson): string => Object.entries(jsonParams as Record) .map(([paramKey, paramValue]) => { - const formattedValue = formatGoValue(paramValue) + const formattedValue = formatGoValue({ value: paramValue, key: paramKey }) return `${pascalCase(paramKey)}: ${formattedValue}` }) .join(', ') -const formatGoValue = (value: Json): string => { +const formatGoValue = ({ + value, + key, +}: { + value: Json + key: string +}): string => { if (value == null) return 'nil' if (typeof value === 'string') return `api.String("${value}")` if (typeof value === 'boolean') return `api.Bool(${value})` if (typeof value === 'number') return `api.Float64(${value})` if (Array.isArray(value)) { - const formattedItems = value.map(formatGoValue) - return `[]{${formattedItems.join(', ')}}` + if (value.length === 0) { + // in Go there's no way define an empty array without specifying the type + // and code samples definitions don't include the type annotations + return 'nil' + } + + const formattedItems = value.map((v) => formatGoValue({ value: v, key })) + const item = value[0] + const arrayType = item + ? isPrimitiveValue(item) + ? getPrimitiveTypeName(item) + : `api.${pascalCase(key)}` + : '' + return `[${value.length}]${arrayType}{${formattedItems.join(', ')}}` } if (typeof value === 'object') { const formattedEntries = Object.entries(value) - .map(([key, val]) => `${pascalCase(key)}: ${formatGoValue(val)}`) + .map( + ([key, val]) => + `${pascalCase(key)}: ${formatGoValue({ value: val, key })}`, + ) .join(', ') - return `interface{}{${formattedEntries}}` + return `struct{}{${formattedEntries}}` } throw new Error(`Unsupported type: ${typeof value}`) } +const isPrimitiveValue = (value: Json): boolean => + value != null && typeof value !== 'object' + +const getPrimitiveTypeName = (value: Json): string => { + switch (typeof value) { + case 'string': + return 'string' + case 'number': + return 'float64' + case 'boolean': + return 'bool' + + default: + throw new Error(`Unsupported type: ${typeof value}`) + } +} + export const createGoResponse = createJsonResponse From b0fa535b348e567d66ae678d42ddc8ea3c28d98c Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 17:47:17 +0200 Subject: [PATCH 23/31] Improve array item check --- src/lib/code-sample/go.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 00102c1..bd95141 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -109,11 +109,14 @@ const formatGoValue = ({ const formattedItems = value.map((v) => formatGoValue({ value: v, key })) const item = value[0] - const arrayType = item - ? isPrimitiveValue(item) - ? getPrimitiveTypeName(item) - : `api.${pascalCase(key)}` - : '' + if (item == null) { + throw new Error(`Null value in response array for '${key}'`) + } + + const arrayType = isPrimitiveValue(item) + ? getPrimitiveTypeName(item) + : `api.${pascalCase(key)}` + return `[${value.length}]${arrayType}{${formattedItems.join(', ')}}` } From 829f5ace2a9dd59c29f5971aad56f8c2d0d5838f Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 17:48:37 +0200 Subject: [PATCH 24/31] Improve object property value handling --- src/lib/code-sample/go.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index bd95141..d94bd89 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -121,13 +121,18 @@ const formatGoValue = ({ } if (typeof value === 'object') { + if (Object.keys(value).length === 0) { + return 'struct{}{}' + } + const formattedEntries = Object.entries(value) .map( ([key, val]) => `${pascalCase(key)}: ${formatGoValue({ value: val, key })}`, ) .join(', ') - return `struct{}{${formattedEntries}}` + + return `api.${pascalCase(key)}{${formattedEntries}}` } throw new Error(`Unsupported type: ${typeof value}`) From 4afc95b0aaafb0a6eb0d106c6f1e325207e6889a Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 17:58:14 +0200 Subject: [PATCH 25/31] Improve code readability and structure --- src/lib/code-sample/go.ts | 93 +++++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 43 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index d94bd89..3497d26 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -43,7 +43,7 @@ const getGoPackageName = (path: string): string => { throw new Error(`Invalid path: missing second part in "${path}"`) } - return `${firstPathPart.replace(/_/g, '')}` + return firstPathPart.replace(/_/g, '') } const isPathNested = (path: string): boolean => @@ -56,25 +56,27 @@ const generateImports = ({ goPackageName: string isReqWithParams: boolean }): string => { - const defaultPackageImport = `import ${DEFAULT_GO_PACKAGE_NAME} "${GO_PACKAGE_BASE_PATH}"` - const nestedPackageImport = `import ${goPackageName} "${GO_PACKAGE_BASE_PATH}/${goPackageName}"` + const imports: string[] = [] - const shouldAddDefaultPackageImport = isReqWithParams - const shouldAddNestedPackageImport = - goPackageName !== DEFAULT_GO_PACKAGE_NAME && isReqWithParams + if (isReqWithParams) { + const defaultPackageImport = `import ${DEFAULT_GO_PACKAGE_NAME} "${GO_PACKAGE_BASE_PATH}"` + imports.push(defaultPackageImport) + } + + if (goPackageName !== DEFAULT_GO_PACKAGE_NAME && isReqWithParams) { + const nestedPackageImport = `import ${goPackageName} "${GO_PACKAGE_BASE_PATH}/${goPackageName}"` + imports.push(nestedPackageImport) + } - return `${shouldAddDefaultPackageImport ? defaultPackageImport : ''} - ${shouldAddNestedPackageImport ? nestedPackageImport : ''}`.trim() + return imports.join('\n') } const getRequestStructName = (path: string): string => { const requestStructNameSuffix = 'Request' - if (isPathNested(path)) { - return `${pascalCase(removeUntilSecondSlash(path))}${requestStructNameSuffix}` - } - - return `${pascalCase(path)}${requestStructNameSuffix}` + return isPathNested(path) + ? `${pascalCase(removeUntilSecondSlash(path))}${requestStructNameSuffix}` + : `${pascalCase(path)}${requestStructNameSuffix}` } const removeUntilSecondSlash = (str: string): string => @@ -101,43 +103,49 @@ const formatGoValue = ({ if (typeof value === 'number') return `api.Float64(${value})` if (Array.isArray(value)) { - if (value.length === 0) { - // in Go there's no way define an empty array without specifying the type - // and code samples definitions don't include the type annotations - return 'nil' - } - - const formattedItems = value.map((v) => formatGoValue({ value: v, key })) - const item = value[0] - if (item == null) { - throw new Error(`Null value in response array for '${key}'`) - } - - const arrayType = isPrimitiveValue(item) - ? getPrimitiveTypeName(item) - : `api.${pascalCase(key)}` - - return `[${value.length}]${arrayType}{${formattedItems.join(', ')}}` + return formatGoArray(value, key) } if (typeof value === 'object') { - if (Object.keys(value).length === 0) { - return 'struct{}{}' - } - - const formattedEntries = Object.entries(value) - .map( - ([key, val]) => - `${pascalCase(key)}: ${formatGoValue({ value: val, key })}`, - ) - .join(', ') - - return `api.${pascalCase(key)}{${formattedEntries}}` + return formatGoObject(value, key) } throw new Error(`Unsupported type: ${typeof value}`) } +const formatGoArray = (value: Json[], key: string): string => { + if (value.length === 0) { + return 'nil' + } + + const formattedItems = value.map((v) => formatGoValue({ value: v, key })) + const item = value[0] + if (item == null) { + throw new Error(`Null value in response array for '${key}'`) + } + + const arrayType = isPrimitiveValue(item) + ? getPrimitiveTypeName(item) + : `api.${pascalCase(key)}` + + return `[${value.length}]${arrayType}{${formattedItems.join(', ')}}` +} + +const formatGoObject = (value: Record, key: string): string => { + if (Object.keys(value).length === 0) { + return 'struct{}{}' + } + + const formattedEntries = Object.entries(value) + .map( + ([objKey, val]) => + `${pascalCase(objKey)}: ${formatGoValue({ value: val, key: objKey })}`, + ) + .join(', ') + + return `api.${pascalCase(key)}{${formattedEntries}}` +} + const isPrimitiveValue = (value: Json): boolean => value != null && typeof value !== 'object' @@ -149,7 +157,6 @@ const getPrimitiveTypeName = (value: Json): string => { return 'float64' case 'boolean': return 'bool' - default: throw new Error(`Unsupported type: ${typeof value}`) } From 3384d757964f66912f8fe803502e5375b738d6ab Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 17:59:08 +0200 Subject: [PATCH 26/31] Improve naming --- src/lib/code-sample/go.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 3497d26..244475a 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -21,8 +21,8 @@ export const createGoRequest = ( }) const requestStructName = getRequestStructName(request.path) - const formattedParams = formatGoArgs(request.parameters) - const goSdkRequestArgs = `context.Background()${isReqWithParams ? `, ${goPackageName}.${requestStructName}(${formattedParams})` : ''}` + const formattedArgs = formatGoArgs(request.parameters) + const goSdkRequestArgs = `context.Background()${isReqWithParams ? `, ${goPackageName}.${requestStructName}(${formattedArgs})` : ''}` const pathParts = request.path.split('/') From 9a1ed46c8f8827b036f814ae8500e3e549fea3a7 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 18:00:11 +0200 Subject: [PATCH 27/31] Add comment --- src/lib/code-sample/go.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 244475a..2f47471 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -115,6 +115,8 @@ const formatGoValue = ({ const formatGoArray = (value: Json[], key: string): string => { if (value.length === 0) { + // in Go there's no way define an empty array without specifying type + // and code samples definitions don't include the type annotations return 'nil' } From 52d95b8ba902b21ac9a9d57bfc39a94a336bdccc Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 26 Sep 2024 18:00:56 +0200 Subject: [PATCH 28/31] Reorg function order --- src/lib/code-sample/go.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 2f47471..8a0cc02 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -133,21 +133,6 @@ const formatGoArray = (value: Json[], key: string): string => { return `[${value.length}]${arrayType}{${formattedItems.join(', ')}}` } -const formatGoObject = (value: Record, key: string): string => { - if (Object.keys(value).length === 0) { - return 'struct{}{}' - } - - const formattedEntries = Object.entries(value) - .map( - ([objKey, val]) => - `${pascalCase(objKey)}: ${formatGoValue({ value: val, key: objKey })}`, - ) - .join(', ') - - return `api.${pascalCase(key)}{${formattedEntries}}` -} - const isPrimitiveValue = (value: Json): boolean => value != null && typeof value !== 'object' @@ -164,4 +149,19 @@ const getPrimitiveTypeName = (value: Json): string => { } } +const formatGoObject = (value: Record, key: string): string => { + if (Object.keys(value).length === 0) { + return 'struct{}{}' + } + + const formattedEntries = Object.entries(value) + .map( + ([objKey, val]) => + `${pascalCase(objKey)}: ${formatGoValue({ value: val, key: objKey })}`, + ) + .join(', ') + + return `api.${pascalCase(key)}{${formattedEntries}}` +} + export const createGoResponse = createJsonResponse From 00c6f70e8cf256b4ed99a706609e73f73102d32e Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <84702959+andrii-balitskyi@users.noreply.github.com> Date: Fri, 27 Sep 2024 15:15:19 +0200 Subject: [PATCH 29/31] Update src/lib/code-sample/go.ts Co-authored-by: Evan Sosenko --- src/lib/code-sample/go.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index 8a0cc02..b751aaa 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -5,8 +5,8 @@ import type { Json, NonNullJson } from 'lib/json.js' import { createJsonResponse } from './create-json-response.js' import type { CodeSampleDefinition, Context } from './schema.js' -const DEFAULT_GO_PACKAGE_NAME = 'api' -const GO_PACKAGE_BASE_PATH = 'github.com/seamapi/go' +const defaultGoPackageName = 'api' +const goPackageBasePath = 'github.com/seamapi/go' export const createGoRequest = ( { request }: CodeSampleDefinition, From 382f701c8ab2100c1c307d5fd29b6ad14b3526ca Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Fri, 27 Sep 2024 15:17:01 +0200 Subject: [PATCH 30/31] Fix var names casing --- src/lib/code-sample/go.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index b751aaa..2f4d360 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -34,7 +34,7 @@ export const createGoRequest = ( const getGoPackageName = (path: string): string => { if (!isPathNested(path)) { - return DEFAULT_GO_PACKAGE_NAME + return defaultGoPackageName } const firstPathPart = path.split('/').slice(1)[1] @@ -59,12 +59,12 @@ const generateImports = ({ const imports: string[] = [] if (isReqWithParams) { - const defaultPackageImport = `import ${DEFAULT_GO_PACKAGE_NAME} "${GO_PACKAGE_BASE_PATH}"` + const defaultPackageImport = `import ${defaultGoPackageName} "${goPackageBasePath}"` imports.push(defaultPackageImport) } - if (goPackageName !== DEFAULT_GO_PACKAGE_NAME && isReqWithParams) { - const nestedPackageImport = `import ${goPackageName} "${GO_PACKAGE_BASE_PATH}/${goPackageName}"` + if (goPackageName !== defaultGoPackageName && isReqWithParams) { + const nestedPackageImport = `import ${goPackageName} "${goPackageBasePath}/${goPackageName}"` imports.push(nestedPackageImport) } From 63faa0f4116e400418f60876160c6e4597b81e84 Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Fri, 27 Sep 2024 14:14:10 +0000 Subject: [PATCH 31/31] ci: Format code --- src/lib/code-sample/go.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/code-sample/go.ts b/src/lib/code-sample/go.ts index d250afb..ebb56e7 100644 --- a/src/lib/code-sample/go.ts +++ b/src/lib/code-sample/go.ts @@ -2,8 +2,8 @@ import { pascalCase } from 'change-case' import type { Json, NonNullJson } from 'lib/json.js' -import type { CodeSampleDefinition, Context } from './schema.js' import { createJsonResponse } from './json.js' +import type { CodeSampleDefinition, Context } from './schema.js' const defaultGoPackageName = 'api' const goPackageBasePath = 'github.com/seamapi/go'