@fern-api/go-dynamic-snippets 0.0.17 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/DynamicSnippetsGenerator.cjs +2 -2
- package/cjs/DynamicSnippetsGenerator.cjs.map +1 -1
- package/cjs/DynamicSnippetsGenerator.d.cts +2 -1
- package/cjs/EndpointSnippetGenerator.cjs +4 -4
- package/cjs/EndpointSnippetGenerator.cjs.map +1 -1
- package/cjs/EndpointSnippetGenerator.d.cts +6 -1
- package/cjs/index.cjs +7 -7
- package/cjs/index.cjs.map +1 -1
- package/esm/DynamicSnippetsGenerator.d.ts +2 -1
- package/esm/DynamicSnippetsGenerator.js +1 -1
- package/esm/EndpointSnippetGenerator.d.ts +6 -1
- package/esm/EndpointSnippetGenerator.js +1 -1
- package/esm/chunk-3Z2URLHB.js +2 -0
- package/esm/chunk-3Z2URLHB.js.map +1 -0
- package/esm/{chunk-PZ73VBNX.js → chunk-B2A7QNZM.js} +2 -2
- package/esm/{chunk-VTPICU2V.js → chunk-DVDVP26D.js} +2 -2
- package/esm/chunk-MYN2HZVH.js +2 -0
- package/esm/chunk-MYN2HZVH.js.map +1 -0
- package/esm/chunk-TXVHHFW3.js +2 -0
- package/esm/chunk-TXVHHFW3.js.map +1 -0
- package/esm/context/DynamicSnippetsGeneratorContext.js +1 -1
- package/esm/context/DynamicTypeInstantiationMapper.js +1 -1
- package/esm/index.js +1 -1
- package/package.json +1 -1
- package/esm/chunk-ADZ6FCNI.js +0 -2
- package/esm/chunk-ADZ6FCNI.js.map +0 -1
- package/esm/chunk-FTDA4363.js +0 -2
- package/esm/chunk-FTDA4363.js.map +0 -1
- package/esm/chunk-GDQPUUAY.js +0 -2
- package/esm/chunk-GDQPUUAY.js.map +0 -1
- /package/esm/{chunk-PZ73VBNX.js.map → chunk-B2A7QNZM.js.map} +0 -0
- /package/esm/{chunk-VTPICU2V.js.map → chunk-DVDVP26D.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AbstractDynamicSnippetsGenerator, FernGeneratorExec, AbstractFormatter, Options } from '@fern-api/browser-compatible-base-generator';
|
|
1
|
+
import { AbstractDynamicSnippetsGenerator, FernGeneratorExec, AbstractFormatter, Options, AbstractAstNode } from '@fern-api/browser-compatible-base-generator';
|
|
2
2
|
import { FernIr } from '@fern-api/dynamic-ir-sdk';
|
|
3
3
|
import { D as DynamicSnippetsGeneratorContext } from './DynamicSnippetsGeneratorContext-D8VcLYKk.js';
|
|
4
4
|
import { EndpointSnippetGenerator } from './EndpointSnippetGenerator.js';
|
|
@@ -13,6 +13,7 @@ declare class DynamicSnippetsGenerator extends AbstractDynamicSnippetsGenerator<
|
|
|
13
13
|
});
|
|
14
14
|
generate(request: FernIr.dynamic.EndpointSnippetRequest, options?: Options): Promise<FernIr.dynamic.EndpointSnippetResponse>;
|
|
15
15
|
generateSync(request: FernIr.dynamic.EndpointSnippetRequest, options?: Options): FernIr.dynamic.EndpointSnippetResponse;
|
|
16
|
+
generateSnippetAst(request: FernIr.dynamic.EndpointSnippetRequest): Promise<AbstractAstNode>;
|
|
16
17
|
protected createSnippetGenerator(context: DynamicSnippetsGeneratorContext): EndpointSnippetGenerator;
|
|
17
18
|
}
|
|
18
19
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"./chunk-
|
|
1
|
+
import{a}from"./chunk-MYN2HZVH.js";import"./chunk-TXVHHFW3.js";import"./chunk-B2A7QNZM.js";import"./chunk-DVDVP26D.js";import"./chunk-3Z2URLHB.js";import"./chunk-ZNTXZ3YV.js";import"./chunk-SVPRIX53.js";import"./chunk-JHIUGKJ4.js";export{a as DynamicSnippetsGenerator};
|
|
2
2
|
//# sourceMappingURL=DynamicSnippetsGenerator.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AbstractFormatter, Options } from '@fern-api/browser-compatible-base-generator';
|
|
2
2
|
import { FernIr } from '@fern-api/dynamic-ir-sdk';
|
|
3
|
+
import { go } from '@fern-api/go-ast';
|
|
3
4
|
import { D as DynamicSnippetsGeneratorContext } from './DynamicSnippetsGeneratorContext-D8VcLYKk.js';
|
|
4
|
-
import '@fern-api/go-ast';
|
|
5
5
|
|
|
6
6
|
declare class EndpointSnippetGenerator {
|
|
7
7
|
private context;
|
|
@@ -20,6 +20,11 @@ declare class EndpointSnippetGenerator {
|
|
|
20
20
|
request: FernIr.dynamic.EndpointSnippetRequest;
|
|
21
21
|
options?: Options;
|
|
22
22
|
}): string;
|
|
23
|
+
generateSnippetAst({ endpoint, request, options }: {
|
|
24
|
+
endpoint: FernIr.dynamic.Endpoint;
|
|
25
|
+
request: FernIr.dynamic.EndpointSnippetRequest;
|
|
26
|
+
options?: Options;
|
|
27
|
+
}): Promise<go.AstNode>;
|
|
23
28
|
private generateWiremockTest;
|
|
24
29
|
private buildCodeBlock;
|
|
25
30
|
private buildWiremockTestCodeBlock;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"./chunk-
|
|
1
|
+
import{a}from"./chunk-TXVHHFW3.js";import"./chunk-3Z2URLHB.js";import"./chunk-JHIUGKJ4.js";export{a as EndpointSnippetGenerator};
|
|
2
2
|
//# sourceMappingURL=EndpointSnippetGenerator.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as T,b as P,c as S,d as A,e as p,f as l,g as u,h,i as R}from"./chunk-JHIUGKJ4.js";l();u();l();u();var y=class{constructor(){p(this,"reporter");p(this,"snippet");p(this,"err");this.snippet=void 0,this.reporter=void 0,this.err=void 0}update({context:e,snippet:r}){this.shouldUpdate({snippet:r,reporter:e.errors})&&(this.reporter=e.errors.clone(),this.snippet=r)}getResponseOrThrow({endpoint:e}){var r;if(this.snippet!=null&&this.reporter!=null)return{snippet:this.snippet,errors:this.reporter.toDynamicSnippetErrors()};throw(r=this.err)!=null?r:new Error(`Failed to generate snippet for endpoint "${e.method} ${e.path}"`)}shouldUpdate({snippet:e,reporter:r}){var t,n;return this.reporter==null||this.reporter.size()>0&&r.size()===0?!0:e.length>((n=(t=this.snippet)==null?void 0:t.length)!=null?n:0)}};var E=class{constructor(e){p(this,"context");this.context=e}async generate(e,r={}){let t=this.context.resolveEndpointLocationOrThrow(e.endpoint);if(t.length===0)throw new Error(`No endpoints found that match "${e.endpoint.method} ${e.endpoint.path}"`);let n=new y;for(let i of t){let s=this.context.clone(),d=this.createSnippetGenerator(s);try{let a=await d.generateSnippet({endpoint:i,request:e,options:r});if(s.errors.empty())return{snippet:a,errors:void 0};n.update({context:s,snippet:a})}catch(a){n.err==null&&(n.err=a)}}return n.getResponseOrThrow({endpoint:e.endpoint})}async generateSnippetAst(e,r={}){let t=this.context.resolveEndpointLocationOrThrow(e.endpoint);if(t.length===0)throw new Error(`No endpoints found that match "${e.endpoint.method} ${e.endpoint.path}"`);let n;for(let i of t){let s=this.context.clone(),d=this.createSnippetGenerator(s);try{return await d.generateSnippetAst({endpoint:i,request:e,options:r})}catch(a){n=a}}throw n!=null?n:new Error(`Failed to generate snippet AST for endpoint: ${e.endpoint.method} ${e.endpoint.path}`)}generateSync(e,r={}){let t=this.context.resolveEndpointLocationOrThrow(e.endpoint);if(t.length===0)throw new Error(`No endpoints found that match "${e.endpoint.method} ${e.endpoint.path}"`);let n=new y;for(let i of t){let s=this.context.clone(),d=this.createSnippetGenerator(s);try{let a=d.generateSnippetSync({endpoint:i,request:e,options:r});if(s.errors.empty())return{snippet:a,errors:void 0};n.update({context:s,snippet:a})}catch(a){n.err==null&&(n.err=a)}}return n.getResponseOrThrow({endpoint:e.endpoint})}};l();u();var o={Critical:"CRITICAL",Warning:"WARNING"},g=class m{constructor(){p(this,"errors");p(this,"path");this.errors=[],this.path=[]}add(e){this.errors.push(P(T({},e),{path:[...this.path]}))}scope(e){this.path.push(e)}unscope(){this.path.pop()}getBySeverity(e){return this.errors.filter(r=>r.severity===e)}empty(){return this.errors.length===0}size(){return this.errors.length}clone(){let e=new m;return e.errors=[...this.errors],e.path=[...this.path],e}reset(){this.errors=[],this.path=[]}toDynamicSnippetErrors(){return this.errors.map(e=>({severity:e.severity,path:e.path!=null?this.pathToStringArray(e.path):void 0,message:e.message}))}pathToStringArray(e){let r=[];for(let t of e){if(typeof t=="string"){r.push(t);continue}r[r.length-1]+=`[${t.index}]`}return r}};l();u();l();u();l();u();var v=class{constructor(){p(this,"REFERENCE_REGEX",/^(GET|POST|PUT|DELETE|PATCH|HEAD)\s(\/\S*)$/)}validate(e){return this.REFERENCE_REGEX.test(e)?{type:"valid"}:{type:"invalid"}}tryParse(e){if(this.validate(e).type==="invalid")return;let t=e.match(this.REFERENCE_REGEX);if(!(t==null||t[1]==null||t[2]==null))return{method:t[1],path:t[2]}}};var w=class{constructor({ir:e,config:r,options:t={}}){p(this,"config");p(this,"options");p(this,"errors");p(this,"_ir");p(this,"httpEndpointReferenceParser");this._ir=e,this.config=r,this.options=t,this.errors=new g,this.httpEndpointReferenceParser=new v}associateQueryParametersByWireValue({parameters:e,values:r}){let t=[];for(let[n,i]of Object.entries(r)){this.errors.scope(n);try{let s=e.find(a=>a.name.wireValue===n);if(s==null)throw this.newParameterNotRecognizedError(n);let d=this.isListTypeReference(s.typeReference)&&!Array.isArray(i)?[i]:i;t.push({name:s.name,typeReference:s.typeReference,value:d})}finally{this.errors.unscope()}}return t}associateByWireValueOrDefault({parameters:e,values:r}){let t=[];for(let n of e){this.errors.scope(n.name.wireValue);try{let i=r[n.name.wireValue];if(i==null)if(n.typeReference.type==="primitive"&&n.typeReference.value==="STRING")i=`<${n.name.wireValue}>`;else{this.errors.add({severity:o.Critical,message:this.newParameterNotRecognizedError(n.name.wireValue).message});continue}t.push({name:n.name,typeReference:n.typeReference,value:i})}finally{this.errors.unscope()}}return t}associateByWireValue({parameters:e,values:r,ignoreMissingParameters:t}){let n=[];for(let[i,s]of Object.entries(r)){this.errors.scope(i);try{let d=e.find(a=>a.name.wireValue===i);if(d==null){if(t)continue;this.errors.add({severity:o.Critical,message:this.newParameterNotRecognizedError(i).message});continue}n.push({name:d.name,typeReference:d.typeReference,value:s})}finally{this.errors.unscope()}}return n}getExampleObjectProperties({parameters:e,snippetObject:r}){let t=typeof r=="object"&&r!==null&&!Array.isArray(r)?r:{},n=[];for(let i of e){let s=t[i.name.wireValue];s==null?i.typeReference.type==="nullable"&&n.push({name:i.name,typeReference:i.typeReference,value:null}):n.push({name:i.name,typeReference:i.typeReference,value:s})}return n}getSingleFileValue({property:e,record:r}){let t=r[e.wireValue];if(t!=null){if(typeof t!="string"){this.errors.add({severity:o.Critical,message:`Expected file value to be a string, got ${typeof t}`});return}return t}}getFileArrayValues({property:e,record:r}){let t=r[e.wireValue];if(t==null)return;if(!Array.isArray(t)){this.errors.add({severity:o.Critical,message:`Expected file array value to be an array of strings, got ${typeof t}`});return}let n=[];for(let i of t){if(typeof i!="string"){this.errors.add({severity:o.Critical,message:`Expected file array value to be an array of strings, got ${typeof i}`});return}n.push(i)}return n}getRecord(e){if(typeof e!="object"||Array.isArray(e)){this.errors.add({severity:o.Critical,message:`Expected object with key, value pairs but got: ${Array.isArray(e)?"array":typeof e}`});return}return e==null?{}:e}resolveNamedType({typeId:e}){let r=this._ir.types[e];if(r==null){this.errors.add({severity:o.Critical,message:`Type identified by "${e}" could not be found`});return}return r}resolveDiscriminatedUnionTypeInstance({discriminatedUnion:e,value:r}){let t=this.getRecord(r);if(t==null)return;let n=e.discriminant.wireValue,i=t[n];if(i==null){this.errors.add({severity:o.Critical,message:this.newParameterNotRecognizedError(n).message});return}if(typeof i!="string"){this.errors.add({severity:o.Critical,message:`Expected discriminant value to be a string but got: ${typeof i}`});return}let s=e.types[i];if(s==null){this.errors.add({severity:o.Critical,message:`No type found for discriminant value "${i}"`});return}let x=t,{[n]:d}=x,a=A(x,[S(n)]);return{singleDiscriminatedUnionType:s,discriminantValue:s.discriminantValue,value:a}}resolveEndpointOrThrow(e){let r=this.httpEndpointReferenceParser.tryParse(e);if(r==null)throw new Error(`Failed to parse endpoint reference "${e}"`);return this.resolveEndpointLocationOrThrow(r)}resolveEndpointLocation(e){let r=[];for(let t of Object.values(this._ir.endpoints))this.parsedEndpointMatches({endpoint:t,parsedEndpoint:e})&&r.push(t);return r}resolveEndpointLocationOrThrow(e){let r=this.resolveEndpointLocation(e);if(r.length===0)throw new Error(`Failed to find endpoint identified by "${e.method} ${e.path}"`);return r}needsRequestParameter({request:e,inlinePathParameters:r,inlineFileProperties:t}){var n;return this.includePathParametersInWrappedRequest({request:e,inlinePathParameters:r})||e.queryParameters!=null&&e.queryParameters.length>0||e.headers!=null&&e.headers.length>0?!0:e.body!=null?this.includeRequestBodyInWrappedRequest({body:e.body,inlineFileProperties:t}):!((n=e.metadata)!=null&&n.onlyPathParameters)}includePathParametersInWrappedRequest({request:e,inlinePathParameters:r}){var t,n;return r&&((n=(t=e.metadata)==null?void 0:t.includePathParameters)!=null?n:!1)}isFileUploadRequestBody(e){switch(e.type){case"fileUpload":return!0;case"properties":case"referenced":return!1;default:h(e)}}resolveEnvironmentName(e){if(this._ir.environments==null)return;let r=this._ir.environments.environments;switch(r.type){case"singleBaseUrl":{let t=r.environments.find(n=>n.id===e);return t==null?void 0:t.name}case"multipleBaseUrls":{let t=r.environments.find(n=>n.id===e);return t==null?void 0:t.name}default:h(r)}}isSingleEnvironmentID(e){return typeof e=="string"}isMultiEnvironmentValues(e){return typeof e=="object"}validateMultiEnvironmentUrlValues(e){if(this._ir.environments==null)return this.errors.add({severity:o.Critical,message:"Multiple environments are not supported for single base URL environments; use the baseUrl option instead"}),!1;let r=this._ir.environments.environments;switch(r.type){case"singleBaseUrl":return this.errors.add({severity:o.Critical,message:"Multiple environments are not supported for single base URL environments; use the baseUrl option instead"}),!1;case"multipleBaseUrls":{let t=r.environments[0];if(t==null)return this.errors.add({severity:o.Critical,message:"Multiple environments are not supported; use the baseUrl option instead"}),!1;let n=new Set(R(t.urls));for(let i of R(e))n.has(i)&&n.delete(i);return n.size>0?(this.errors.add({severity:o.Critical,message:`The provided environments are invalid; got: [${Object.keys(e).join(", ")}], expected: [${R(t.urls).join(", ")}]`}),!1):!0}}}getValueAsNumber({value:e}){if(typeof e!="number"){this.errors.add({severity:o.Critical,message:this.newTypeMismatchError({expected:"number",value:e}).message});return}return e}getValueAsBoolean({value:e}){if(typeof e!="boolean"){this.errors.add({severity:o.Critical,message:this.newTypeMismatchError({expected:"boolean",value:e}).message});return}return e}getValueAsString({value:e}){if(typeof e!="string"){this.errors.add({severity:o.Critical,message:this.newTypeMismatchError({expected:"string",value:e}).message});return}return e}isOptional(e){switch(e.type){case"nullable":return this.isOptional(e.value);case"optional":return!0;case"named":{let r=this.resolveNamedType({typeId:e.value});return r==null?!1:r.type==="alias"?this.isNullable(r.typeReference):!1}}return!1}isNullable(e){switch(e.type){case"nullable":return!0;case"optional":return this.isNullable(e.value);case"named":{let r=this.resolveNamedType({typeId:e.value});return r==null?!1:r.type==="alias"?this.isNullable(r.typeReference):!1}}return!1}newAuthMismatchError({auth:e,values:r}){return new Error(`Expected auth type ${e.type}, got ${r.type}`)}newParameterNotRecognizedError(e){return new Error(`"${e}" is not a recognized parameter for this endpoint`)}newTypeMismatchError({expected:e,value:r}){return new Error(`Expected ${e}, got ${typeof r}`)}includeRequestBodyInWrappedRequest({body:e,inlineFileProperties:r}){switch(e.type){case"properties":case"referenced":return!0;case"fileUpload":return this.includeFileUploadBodyInWrappedRequest({fileUpload:e,inlineFileProperties:r});default:h(e)}}includeFileUploadBodyInWrappedRequest({fileUpload:e,inlineFileProperties:r}){return this.fileUploadHasBodyProperties({fileUpload:e})||r&&this.fileUploadHasFileProperties({fileUpload:e})}fileUploadHasBodyProperties({fileUpload:e}){return e.properties.some(r=>{switch(r.type){case"file":case"fileArray":return!1;case"bodyProperty":return!0;default:h(r)}})}fileUploadHasFileProperties({fileUpload:e}){return e.properties.some(r=>{switch(r.type){case"file":case"fileArray":return!0;case"bodyProperty":return!1;default:h(r)}})}isListTypeReference(e){return e.type==="optional"?this.isListTypeReference(e.value):e.type==="list"||e.type==="set"}parsedEndpointMatches({endpoint:e,parsedEndpoint:r}){return e.location.method===r.method&&e.location.path===r.path}};l();u();var b={PathParameters:"pathParameters",QueryParameters:"queryParameters",Headers:"headers",RequestBody:"requestBody"};l();u();export{E as a,o as b,w as c,b as d};
|
|
2
|
+
//# sourceMappingURL=chunk-3Z2URLHB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../browser-compatible-base/src/dynamic-snippets/AbstractDynamicSnippetsGenerator.ts","../../../../browser-compatible-base/src/dynamic-snippets/Result.ts","../../../../browser-compatible-base/src/dynamic-snippets/ErrorReporter.ts","../../../../browser-compatible-base/src/dynamic-snippets/AbstractDynamicSnippetsGeneratorContext.ts","../../../../../packages/cli/fern-definition/schema/src/index.ts","../../../../../packages/cli/fern-definition/schema/src/utils/HttpEndpointReferenceParser.ts","../../../../browser-compatible-base/src/dynamic-snippets/Scope.ts","../../../../browser-compatible-base/src/dynamic-snippets/index.ts"],"sourcesContent":["import { FernIr } from \"@fern-api/dynamic-ir-sdk\";\nimport { AbstractAstNode } from \"../ast\";\nimport { AbstractDynamicSnippetsGeneratorContext } from \"./AbstractDynamicSnippetsGeneratorContext\";\nimport { AbstractEndpointSnippetGenerator } from \"./AbstractEndpointSnippetGenerator\";\nimport { Options } from \"./Options\";\nimport { Result } from \"./Result\";\n\nexport abstract class AbstractDynamicSnippetsGenerator<\n Context extends AbstractDynamicSnippetsGeneratorContext,\n EndpointSnippetGenerator extends AbstractEndpointSnippetGenerator<Context>\n> {\n public constructor(public readonly context: Context) {}\n\n protected abstract createSnippetGenerator(context: Context): EndpointSnippetGenerator;\n\n public async generate(\n request: FernIr.dynamic.EndpointSnippetRequest,\n options: Options = {}\n ): Promise<FernIr.dynamic.EndpointSnippetResponse> {\n const endpoints = this.context.resolveEndpointLocationOrThrow(request.endpoint);\n if (endpoints.length === 0) {\n throw new Error(`No endpoints found that match \"${request.endpoint.method} ${request.endpoint.path}\"`);\n }\n const result = new Result();\n for (const endpoint of endpoints) {\n const context = this.context.clone() as Context;\n const snippetGenerator = this.createSnippetGenerator(context);\n try {\n const snippet = await snippetGenerator.generateSnippet({ endpoint, request, options });\n if (context.errors.empty()) {\n return {\n snippet,\n errors: undefined\n };\n }\n result.update({ context, snippet });\n } catch (error) {\n if (result.err == null) {\n result.err = error as Error;\n }\n }\n }\n return result.getResponseOrThrow({ endpoint: request.endpoint });\n }\n\n public async generateSnippetAst(\n request: FernIr.dynamic.EndpointSnippetRequest,\n options: Options = {}\n ): Promise<AbstractAstNode> {\n const endpoints = this.context.resolveEndpointLocationOrThrow(request.endpoint);\n if (endpoints.length === 0) {\n throw new Error(`No endpoints found that match \"${request.endpoint.method} ${request.endpoint.path}\"`);\n }\n let lastError: Error | undefined = undefined;\n for (const endpoint of endpoints) {\n const context = this.context.clone() as Context;\n const snippetGenerator = this.createSnippetGenerator(context);\n try {\n const ast = await snippetGenerator.generateSnippetAst({ endpoint, request, options });\n return ast;\n } catch (error) {\n lastError = error as Error;\n }\n }\n if (lastError != null) {\n throw lastError;\n }\n throw new Error(\n `Failed to generate snippet AST for endpoint: ${request.endpoint.method} ${request.endpoint.path}`\n );\n }\n\n public generateSync(\n request: FernIr.dynamic.EndpointSnippetRequest,\n options: Options = {}\n ): FernIr.dynamic.EndpointSnippetResponse {\n const endpoints = this.context.resolveEndpointLocationOrThrow(request.endpoint);\n if (endpoints.length === 0) {\n throw new Error(`No endpoints found that match \"${request.endpoint.method} ${request.endpoint.path}\"`);\n }\n const result = new Result();\n for (const endpoint of endpoints) {\n const context = this.context.clone() as Context;\n const snippetGenerator = this.createSnippetGenerator(context);\n try {\n const snippet = snippetGenerator.generateSnippetSync({ endpoint, request, options });\n if (context.errors.empty()) {\n return {\n snippet,\n errors: undefined\n };\n }\n result.update({ context, snippet });\n } catch (error) {\n if (result.err == null) {\n result.err = error as Error;\n }\n }\n }\n return result.getResponseOrThrow({ endpoint: request.endpoint });\n }\n}\n","import { FernIr } from \"@fern-api/dynamic-ir-sdk\";\n\nimport { AbstractDynamicSnippetsGeneratorContext } from \"./AbstractDynamicSnippetsGeneratorContext\";\nimport { ErrorReporter } from \"./ErrorReporter\";\n\nexport class Result {\n public reporter: ErrorReporter | undefined;\n public snippet: string | undefined;\n public err: Error | undefined;\n\n constructor() {\n this.snippet = undefined;\n this.reporter = undefined;\n this.err = undefined;\n }\n\n public update({ context, snippet }: { context: AbstractDynamicSnippetsGeneratorContext; snippet: string }): void {\n if (this.shouldUpdate({ snippet, reporter: context.errors })) {\n this.reporter = context.errors.clone();\n this.snippet = snippet;\n }\n }\n\n public getResponseOrThrow({\n endpoint\n }: {\n endpoint: FernIr.dynamic.EndpointLocation;\n }): FernIr.dynamic.EndpointSnippetResponse {\n if (this.snippet != null && this.reporter != null) {\n return {\n snippet: this.snippet,\n errors: this.reporter.toDynamicSnippetErrors()\n };\n }\n throw this.err ?? new Error(`Failed to generate snippet for endpoint \"${endpoint.method} ${endpoint.path}\"`);\n }\n\n private shouldUpdate({ snippet, reporter }: { snippet: string; reporter: ErrorReporter }): boolean {\n if (this.reporter == null || (this.reporter.size() > 0 && reporter.size() === 0)) {\n return true;\n }\n return snippet.length > (this.snippet?.length ?? 0);\n }\n}\n","export const Severity = {\n Critical: \"CRITICAL\",\n Warning: \"WARNING\"\n} as const;\n\nexport declare namespace ErrorReporter {\n type Path = readonly PathItem[];\n\n type PathItem = string | ArrayPathItem;\n\n type Severity = (typeof Severity)[keyof typeof Severity];\n\n interface ArrayPathItem {\n index: number;\n }\n\n interface Error {\n path?: Path;\n severity: Severity;\n message: string;\n }\n}\n\ninterface Error_ {\n severity: \"CRITICAL\" | \"WARNING\";\n path: string[] | undefined;\n message: string;\n}\n\nexport class ErrorReporter {\n private errors: ErrorReporter.Error[];\n private path: ErrorReporter.PathItem[];\n\n constructor() {\n this.errors = [];\n this.path = [];\n }\n\n public add(err: Omit<ErrorReporter.Error, \"path\">): void {\n this.errors.push({\n ...err,\n path: [...this.path]\n });\n }\n\n public scope(path: ErrorReporter.PathItem): void {\n this.path.push(path);\n }\n\n public unscope(): void {\n this.path.pop();\n }\n\n public getBySeverity(severity: ErrorReporter.Severity): ErrorReporter.Error[] {\n return this.errors.filter((err) => err.severity === severity);\n }\n\n public empty(): boolean {\n return this.errors.length === 0;\n }\n\n public size(): number {\n return this.errors.length;\n }\n\n public clone(): ErrorReporter {\n const clone = new ErrorReporter();\n clone.errors = [...this.errors];\n clone.path = [...this.path];\n return clone;\n }\n\n public reset(): void {\n this.errors = [];\n this.path = [];\n }\n\n public toDynamicSnippetErrors(): Error_[] {\n return this.errors.map((err) => ({\n severity: err.severity,\n path: err.path != null ? this.pathToStringArray(err.path) : undefined,\n message: err.message\n }));\n }\n\n private pathToStringArray(path: ErrorReporter.Path): string[] {\n const result: string[] = [];\n for (const item of path) {\n if (typeof item === \"string\") {\n result.push(item);\n continue;\n }\n result[result.length - 1] += `[${item.index}]`;\n }\n return result;\n }\n}\n","import { assertNever, keys } from \"@fern-api/core-utils\";\nimport { FernIr } from \"@fern-api/dynamic-ir-sdk\";\nimport { HttpEndpointReferenceParser } from \"@fern-api/fern-definition-schema\";\n\nimport { FernGeneratorExec } from \"../GeneratorNotificationService\";\nimport { DiscriminatedUnionTypeInstance } from \"./DiscriminatedUnionTypeInstance\";\nimport { ErrorReporter, Severity } from \"./ErrorReporter\";\nimport { Options } from \"./Options\";\nimport { TypeInstance } from \"./TypeInstance\";\n\nexport abstract class AbstractDynamicSnippetsGeneratorContext {\n public config: FernGeneratorExec.GeneratorConfig;\n public options: Options;\n public errors: ErrorReporter;\n\n private _ir: FernIr.dynamic.DynamicIntermediateRepresentation;\n private httpEndpointReferenceParser: HttpEndpointReferenceParser;\n\n constructor({\n ir,\n config,\n options = {}\n }: {\n ir: FernIr.dynamic.DynamicIntermediateRepresentation;\n config: FernGeneratorExec.GeneratorConfig;\n options?: Options;\n }) {\n this._ir = ir;\n this.config = config;\n this.options = options;\n this.errors = new ErrorReporter();\n this.httpEndpointReferenceParser = new HttpEndpointReferenceParser();\n }\n\n public abstract clone(): AbstractDynamicSnippetsGeneratorContext;\n\n public associateQueryParametersByWireValue({\n parameters,\n values\n }: {\n parameters: FernIr.dynamic.NamedParameter[];\n values: FernIr.dynamic.Values;\n }): TypeInstance[] {\n const instances: TypeInstance[] = [];\n for (const [key, value] of Object.entries(values)) {\n this.errors.scope(key);\n try {\n const parameter = parameters.find((param) => param.name.wireValue === key);\n if (parameter == null) {\n throw this.newParameterNotRecognizedError(key);\n }\n // If this query parameter supports allow-multiple, the user-provided values\n // must be wrapped in an array.\n const typeInstanceValue =\n this.isListTypeReference(parameter.typeReference) && !Array.isArray(value) ? [value] : value;\n instances.push({\n name: parameter.name,\n typeReference: parameter.typeReference,\n value: typeInstanceValue\n });\n } finally {\n this.errors.unscope();\n }\n }\n return instances;\n }\n\n public associateByWireValueOrDefault({\n parameters,\n values\n }: {\n parameters: FernIr.dynamic.NamedParameter[];\n values: FernIr.dynamic.Values;\n }): TypeInstance[] {\n const instances: TypeInstance[] = [];\n for (const parameter of parameters) {\n this.errors.scope(parameter.name.wireValue);\n try {\n let value = values[parameter.name.wireValue];\n\n if (value == null) {\n if (parameter.typeReference.type === \"primitive\" && parameter.typeReference.value === \"STRING\") {\n // synthesize a parameter value for string parameters that are missing data\n value = `<${parameter.name.wireValue}>`;\n } else {\n this.errors.add({\n severity: Severity.Critical,\n message: this.newParameterNotRecognizedError(parameter.name.wireValue).message\n });\n continue;\n }\n }\n\n instances.push({\n name: parameter.name,\n typeReference: parameter.typeReference,\n value\n });\n } finally {\n this.errors.unscope();\n }\n }\n\n return instances;\n }\n\n public associateByWireValue({\n parameters,\n values,\n ignoreMissingParameters\n }: {\n parameters: FernIr.dynamic.NamedParameter[];\n values: FernIr.dynamic.Values;\n ignoreMissingParameters?: boolean;\n }): TypeInstance[] {\n const instances: TypeInstance[] = [];\n for (const [key, value] of Object.entries(values)) {\n this.errors.scope(key);\n try {\n const parameter = parameters.find((param) => param.name.wireValue === key);\n if (parameter == null) {\n if (ignoreMissingParameters) {\n // Required for request payloads that include more information than\n // just the target parameters (e.g. union base properties).\n continue;\n }\n this.errors.add({\n severity: Severity.Critical,\n message: this.newParameterNotRecognizedError(key).message\n });\n continue;\n }\n instances.push({\n name: parameter.name,\n typeReference: parameter.typeReference,\n value\n });\n } finally {\n this.errors.unscope();\n }\n }\n return instances;\n }\n\n /**\n * Similar to `associateByWireValue` but it builds TypeInstance objects by iterating over schema parameters rather\n * than snippet values. Skips non-nullable parameters that are missing from the snippet object.\n */\n public getExampleObjectProperties({\n parameters,\n snippetObject\n }: {\n parameters: FernIr.dynamic.NamedParameter[];\n snippetObject: unknown;\n }): TypeInstance[] {\n const objectRecord = (\n typeof snippetObject === \"object\" && snippetObject !== null && !Array.isArray(snippetObject)\n ? snippetObject\n : {}\n ) as Record<string, unknown>;\n const instances: TypeInstance[] = [];\n for (const parameter of parameters) {\n const value = objectRecord[parameter.name.wireValue];\n if (value == null) {\n if (parameter.typeReference.type === \"nullable\") {\n instances.push({\n name: parameter.name,\n typeReference: parameter.typeReference,\n value: null\n });\n }\n } else {\n instances.push({\n name: parameter.name,\n typeReference: parameter.typeReference,\n value\n });\n }\n }\n return instances;\n }\n\n public getSingleFileValue({\n property,\n record\n }: {\n property: FernIr.dynamic.FileUploadRequestBodyProperty.File_;\n record: Record<string, unknown>;\n }): string | undefined {\n const fileValue = record[property.wireValue];\n if (fileValue == null) {\n return undefined;\n }\n if (typeof fileValue !== \"string\") {\n this.errors.add({\n severity: Severity.Critical,\n message: `Expected file value to be a string, got ${typeof fileValue}`\n });\n return undefined;\n }\n return fileValue;\n }\n\n public getFileArrayValues({\n property,\n record\n }: {\n property: FernIr.dynamic.FileUploadRequestBodyProperty.FileArray;\n record: Record<string, unknown>;\n }): string[] | undefined {\n const fileArrayValue = record[property.wireValue];\n if (fileArrayValue == null) {\n return undefined;\n }\n if (!Array.isArray(fileArrayValue)) {\n this.errors.add({\n severity: Severity.Critical,\n message: `Expected file array value to be an array of strings, got ${typeof fileArrayValue}`\n });\n return undefined;\n }\n const stringValues: string[] = [];\n for (const value of fileArrayValue) {\n if (typeof value !== \"string\") {\n this.errors.add({\n severity: Severity.Critical,\n message: `Expected file array value to be an array of strings, got ${typeof value}`\n });\n return undefined;\n }\n stringValues.push(value);\n }\n return stringValues;\n }\n\n public getRecord(value: unknown): Record<string, unknown> | undefined {\n if (typeof value !== \"object\" || Array.isArray(value)) {\n this.errors.add({\n severity: Severity.Critical,\n message: `Expected object with key, value pairs but got: ${\n Array.isArray(value) ? \"array\" : typeof value\n }`\n });\n return undefined;\n }\n if (value == null) {\n return {};\n }\n return value as Record<string, unknown>;\n }\n\n public resolveNamedType({ typeId }: { typeId: FernIr.dynamic.TypeId }): FernIr.dynamic.NamedType | undefined {\n const namedType = this._ir.types[typeId];\n if (namedType == null) {\n this.errors.add({\n severity: Severity.Critical,\n message: `Type identified by \"${typeId}\" could not be found`\n });\n return undefined;\n }\n return namedType;\n }\n\n public resolveDiscriminatedUnionTypeInstance({\n discriminatedUnion,\n value\n }: {\n discriminatedUnion: FernIr.dynamic.DiscriminatedUnionType;\n value: unknown;\n }): DiscriminatedUnionTypeInstance | undefined {\n const record = this.getRecord(value);\n if (record == null) {\n return undefined;\n }\n\n const discriminantFieldName = discriminatedUnion.discriminant.wireValue;\n const discriminantValue = record[discriminantFieldName];\n if (discriminantValue == null) {\n this.errors.add({\n severity: Severity.Critical,\n message: this.newParameterNotRecognizedError(discriminantFieldName).message\n });\n return undefined;\n }\n if (typeof discriminantValue !== \"string\") {\n this.errors.add({\n severity: Severity.Critical,\n message: `Expected discriminant value to be a string but got: ${typeof discriminantValue}`\n });\n return undefined;\n }\n\n const singleDiscriminatedUnionType = discriminatedUnion.types[discriminantValue];\n if (singleDiscriminatedUnionType == null) {\n this.errors.add({\n severity: Severity.Critical,\n message: `No type found for discriminant value \"${discriminantValue}\"`\n });\n return undefined;\n }\n\n // Remove the discriminant from the record so that the value is valid for the type.\n const { [discriminantFieldName]: _, ...filtered } = record;\n\n return {\n singleDiscriminatedUnionType,\n discriminantValue: singleDiscriminatedUnionType.discriminantValue,\n value: filtered\n };\n }\n\n public resolveEndpointOrThrow(rawEndpoint: string): FernIr.dynamic.Endpoint[] {\n const parsedEndpoint = this.httpEndpointReferenceParser.tryParse(rawEndpoint);\n if (parsedEndpoint == null) {\n throw new Error(`Failed to parse endpoint reference \"${rawEndpoint}\"`);\n }\n return this.resolveEndpointLocationOrThrow(parsedEndpoint);\n }\n\n public resolveEndpointLocation(location: FernIr.dynamic.EndpointLocation): FernIr.dynamic.Endpoint[] {\n const endpoints: FernIr.dynamic.Endpoint[] = [];\n for (const endpoint of Object.values(this._ir.endpoints)) {\n if (this.parsedEndpointMatches({ endpoint, parsedEndpoint: location })) {\n endpoints.push(endpoint);\n }\n }\n\n return endpoints;\n }\n\n public resolveEndpointLocationOrThrow(location: FernIr.dynamic.EndpointLocation): FernIr.dynamic.Endpoint[] {\n const endpoints = this.resolveEndpointLocation(location);\n if (endpoints.length === 0) {\n throw new Error(`Failed to find endpoint identified by \"${location.method} ${location.path}\"`);\n }\n return endpoints;\n }\n\n public needsRequestParameter({\n request,\n inlinePathParameters,\n inlineFileProperties\n }: {\n request: FernIr.dynamic.InlinedRequest;\n inlinePathParameters: boolean;\n inlineFileProperties: boolean;\n }): boolean {\n if (this.includePathParametersInWrappedRequest({ request, inlinePathParameters })) {\n return true;\n }\n if (request.queryParameters != null && request.queryParameters.length > 0) {\n return true;\n }\n if (request.headers != null && request.headers.length > 0) {\n return true;\n }\n if (request.body != null) {\n return this.includeRequestBodyInWrappedRequest({ body: request.body, inlineFileProperties });\n }\n if (request.metadata?.onlyPathParameters) {\n return false;\n }\n return true;\n }\n\n public includePathParametersInWrappedRequest({\n request,\n inlinePathParameters\n }: {\n request: FernIr.dynamic.InlinedRequest;\n inlinePathParameters: boolean;\n }): boolean {\n return inlinePathParameters && (request.metadata?.includePathParameters ?? false);\n }\n\n public isFileUploadRequestBody(\n body: FernIr.dynamic.InlinedRequestBody\n ): body is FernIr.dynamic.InlinedRequestBody.FileUpload {\n switch (body.type) {\n case \"fileUpload\":\n return true;\n case \"properties\":\n case \"referenced\":\n return false;\n default:\n assertNever(body);\n }\n }\n\n public resolveEnvironmentName(environmentID: string): FernIr.Name | undefined {\n if (this._ir.environments == null) {\n return undefined;\n }\n const environments = this._ir.environments.environments;\n switch (environments.type) {\n case \"singleBaseUrl\": {\n const environment = environments.environments.find((env) => env.id === environmentID);\n if (environment == null) {\n return undefined;\n }\n return environment.name;\n }\n case \"multipleBaseUrls\": {\n const environment = environments.environments.find((env) => env.id === environmentID);\n if (environment == null) {\n return undefined;\n }\n return environment.name;\n }\n default:\n assertNever(environments);\n }\n }\n\n public isSingleEnvironmentID(\n environment: FernIr.dynamic.EnvironmentValues\n ): environment is FernIr.dynamic.EnvironmentId {\n return typeof environment === \"string\";\n }\n\n public isMultiEnvironmentValues(\n environment: FernIr.dynamic.EnvironmentValues\n ): environment is FernIr.dynamic.MultipleEnvironmentUrlValues {\n return typeof environment === \"object\";\n }\n\n public validateMultiEnvironmentUrlValues(\n multiEnvironmentUrlValues: FernIr.dynamic.MultipleEnvironmentUrlValues\n ): boolean {\n if (this._ir.environments == null) {\n this.errors.add({\n severity: Severity.Critical,\n message:\n \"Multiple environments are not supported for single base URL environments; use the baseUrl option instead\"\n });\n return false;\n }\n const environments = this._ir.environments.environments;\n switch (environments.type) {\n case \"singleBaseUrl\": {\n this.errors.add({\n severity: Severity.Critical,\n message:\n \"Multiple environments are not supported for single base URL environments; use the baseUrl option instead\"\n });\n return false;\n }\n case \"multipleBaseUrls\": {\n const firstEnvironment = environments.environments[0];\n if (firstEnvironment == null) {\n this.errors.add({\n severity: Severity.Critical,\n message: \"Multiple environments are not supported; use the baseUrl option instead\"\n });\n return false;\n }\n const expectedKeys = new Set(keys(firstEnvironment.urls));\n for (const key of keys(multiEnvironmentUrlValues)) {\n if (expectedKeys.has(key)) {\n expectedKeys.delete(key);\n }\n }\n if (expectedKeys.size > 0) {\n this.errors.add({\n severity: Severity.Critical,\n message: `The provided environments are invalid; got: [${Object.keys(multiEnvironmentUrlValues).join(\", \")}], expected: [${keys(firstEnvironment.urls).join(\", \")}]`\n });\n return false;\n }\n return true;\n }\n }\n }\n\n public getValueAsNumber({ value }: { value: unknown }): number | undefined {\n if (typeof value !== \"number\") {\n this.errors.add({\n severity: Severity.Critical,\n message: this.newTypeMismatchError({ expected: \"number\", value }).message\n });\n return undefined;\n }\n return value;\n }\n\n public getValueAsBoolean({ value }: { value: unknown }): boolean | undefined {\n if (typeof value !== \"boolean\") {\n this.errors.add({\n severity: Severity.Critical,\n message: this.newTypeMismatchError({ expected: \"boolean\", value }).message\n });\n return undefined;\n }\n return value;\n }\n\n public getValueAsString({ value }: { value: unknown }): string | undefined {\n if (typeof value !== \"string\") {\n this.errors.add({\n severity: Severity.Critical,\n message: this.newTypeMismatchError({ expected: \"string\", value }).message\n });\n return undefined;\n }\n return value;\n }\n\n public isOptional(typeReference: FernIr.dynamic.TypeReference): boolean {\n switch (typeReference.type) {\n case \"nullable\":\n return this.isOptional(typeReference.value);\n case \"optional\":\n return true;\n case \"named\": {\n const resolvedType = this.resolveNamedType({ typeId: typeReference.value });\n if (resolvedType == null) {\n return false;\n }\n if (resolvedType.type === \"alias\") {\n return this.isNullable(resolvedType.typeReference);\n }\n return false;\n }\n }\n return false;\n }\n\n public isNullable(typeReference: FernIr.dynamic.TypeReference): boolean {\n switch (typeReference.type) {\n case \"nullable\":\n return true;\n case \"optional\":\n return this.isNullable(typeReference.value);\n case \"named\": {\n const resolvedType = this.resolveNamedType({ typeId: typeReference.value });\n if (resolvedType == null) {\n return false;\n }\n if (resolvedType.type === \"alias\") {\n return this.isNullable(resolvedType.typeReference);\n }\n return false;\n }\n }\n return false;\n }\n\n public newAuthMismatchError({\n auth,\n values\n }: {\n auth: FernIr.dynamic.Auth;\n values: FernIr.dynamic.AuthValues;\n }): Error {\n return new Error(`Expected auth type ${auth.type}, got ${values.type}`);\n }\n\n public newParameterNotRecognizedError(parameterName: string): Error {\n return new Error(`\"${parameterName}\" is not a recognized parameter for this endpoint`);\n }\n\n public newTypeMismatchError({ expected, value }: { expected: string; value: unknown }): Error {\n return new Error(`Expected ${expected}, got ${typeof value}`);\n }\n\n private includeRequestBodyInWrappedRequest({\n body,\n inlineFileProperties\n }: {\n body: FernIr.dynamic.InlinedRequestBody;\n inlineFileProperties: boolean;\n }): boolean {\n switch (body.type) {\n case \"properties\":\n case \"referenced\":\n return true;\n case \"fileUpload\":\n return this.includeFileUploadBodyInWrappedRequest({ fileUpload: body, inlineFileProperties });\n default:\n assertNever(body);\n }\n }\n\n private includeFileUploadBodyInWrappedRequest({\n fileUpload,\n inlineFileProperties\n }: {\n fileUpload: FernIr.dynamic.FileUploadRequestBody;\n inlineFileProperties: boolean;\n }): boolean {\n return (\n this.fileUploadHasBodyProperties({ fileUpload }) ||\n (inlineFileProperties && this.fileUploadHasFileProperties({ fileUpload }))\n );\n }\n\n private fileUploadHasBodyProperties({ fileUpload }: { fileUpload: FernIr.dynamic.FileUploadRequestBody }): boolean {\n return fileUpload.properties.some((property) => {\n switch (property.type) {\n case \"file\":\n case \"fileArray\":\n return false;\n case \"bodyProperty\":\n return true;\n default:\n assertNever(property);\n }\n });\n }\n\n private fileUploadHasFileProperties({ fileUpload }: { fileUpload: FernIr.dynamic.FileUploadRequestBody }): boolean {\n return fileUpload.properties.some((property) => {\n switch (property.type) {\n case \"file\":\n case \"fileArray\":\n return true;\n case \"bodyProperty\":\n return false;\n default:\n assertNever(property);\n }\n });\n }\n\n private isListTypeReference(typeReference: FernIr.dynamic.TypeReference): boolean {\n if (typeReference.type === \"optional\") {\n return this.isListTypeReference(typeReference.value);\n }\n return typeReference.type === \"list\" || typeReference.type === \"set\";\n }\n\n private parsedEndpointMatches({\n endpoint,\n parsedEndpoint\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n parsedEndpoint: HttpEndpointReferenceParser.Parsed;\n }): boolean {\n return endpoint.location.method === parsedEndpoint.method && endpoint.location.path === parsedEndpoint.path;\n }\n}\n","export { EXAMPLE_REFERENCE_PREFIX, YAML_SCHEMA_VERSION } from \"./constants\";\nexport { type NodePath, type NodePathItem } from \"./NodePath\";\nexport * as RawSchemas from \"./schemas\";\nexport { type DefinitionFileSchema, type PackageMarkerFileSchema, type RootApiFileSchema } from \"./schemas\";\nexport * from \"./utils/auth\";\nexport * from \"./utils/generics\";\nexport { getRequestBody } from \"./utils/getRequestBody\";\nexport { getResponseBodyType } from \"./utils/getResponseBodyType\";\nexport { HttpEndpointReferenceParser } from \"./utils/HttpEndpointReferenceParser\";\nexport { isInlineRequestBody } from \"./utils/isInlineRequestBody\";\nexport { isOpenApiSourceSchema } from \"./utils/isOpenApiSourceSchema\";\nexport { isRawProtobufSourceSchema } from \"./utils/isRawProtobufSourceSchema\";\nexport { isRawTextType } from \"./utils/isRawTextType\";\nexport { type BytesRequest, parseBytesRequest } from \"./utils/parseBytesRequest\";\nexport { parseFileUploadRequest, type RawFileUploadRequest } from \"./utils/parseFileUploadRequest\";\nexport { parseRawBytesType, type RawBytesType } from \"./utils/parseRawBytesType\";\nexport { parseRawFileType, type RawFileType } from \"./utils/parseRawFileType\";\nexport { parseRawTextType, type RawTextType } from \"./utils/parseRawTextType\";\nexport { RawPrimitiveType } from \"./utils/RawPrimitiveType\";\nexport { recursivelyVisitRawTypeReference } from \"./utils/recursivelyVisitRawTypeReference\";\nexport { visitExampleCodeSampleSchema } from \"./utils/visitExampleCodeSampleSchema\";\nexport { type ExampleResponseSchemaVisitor, visitExampleResponseSchema } from \"./utils/visitExampleResponseSchema\";\nexport { isAnyAuthSchemes, isSingleAuthScheme, type RawApiAuthVisitor, visitRawApiAuth } from \"./utils/visitRawApiAuth\";\nexport {\n type AuthSchemeDeclarationVisitor,\n isHeaderAuthScheme,\n visitRawAuthSchemeDeclaration\n} from \"./utils/visitRawAuthSchemeDeclaration\";\nexport {\n isRawMultipleBaseUrlsEnvironment,\n isRawSingleBaseUrlEnvironment,\n visitRawEnvironmentDeclaration\n} from \"./utils/visitRawEnvironmentDeclaration\";\nexport {\n isVariablePathParameter,\n type PathParameterDeclarationVisitor,\n visitRawPathParameter\n} from \"./utils/visitRawPathParameter\";\nexport {\n isRawAliasDefinition,\n isRawDiscriminatedUnionDefinition,\n isRawEnumDefinition,\n isRawObjectDefinition,\n isRawUndiscriminatedUnionDefinition,\n type RawTypeDeclarationVisitor,\n visitRawTypeDeclaration\n} from \"./utils/visitRawTypeDeclaration\";\nexport { FernContainerRegex, visitRawTypeReference } from \"./utils/visitRawTypeReference\";\n","export declare namespace HttpEndpointReferenceParser {\n interface Parsed {\n path: string;\n method: Method;\n }\n\n type Method = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\" | \"HEAD\";\n\n export type ValidationResult = Valid | Invalid;\n\n interface Valid {\n type: \"valid\";\n }\n\n interface Invalid {\n type: \"invalid\";\n }\n}\n\n/**\n * Parses an HTTP endpoint reference like `POST /users/get`\n */\nexport class HttpEndpointReferenceParser {\n //eslint-disable-next-line\n private REFERENCE_REGEX = /^(GET|POST|PUT|DELETE|PATCH|HEAD)\\s(\\/\\S*)$/;\n\n public validate(reference: string): HttpEndpointReferenceParser.ValidationResult {\n const validFormat = this.REFERENCE_REGEX.test(reference);\n if (!validFormat) {\n return { type: \"invalid\" };\n }\n return { type: \"valid\" };\n }\n\n public tryParse(reference: string): HttpEndpointReferenceParser.Parsed | undefined {\n const validationResponse = this.validate(reference);\n if (validationResponse.type === \"invalid\") {\n return undefined;\n }\n const match = reference.match(this.REFERENCE_REGEX);\n if (match == null || match[1] == null || match[2] == null) {\n return undefined;\n }\n return {\n method: match[1] as HttpEndpointReferenceParser.Method,\n path: match[2]\n };\n }\n}\n","export const Scope = {\n PathParameters: \"pathParameters\",\n QueryParameters: \"queryParameters\",\n Headers: \"headers\",\n RequestBody: \"requestBody\"\n} as const;\n\nexport type Scope = (typeof Scope)[keyof typeof Scope];\n","export { AbstractDynamicSnippetsGenerator } from \"./AbstractDynamicSnippetsGenerator\";\nexport { AbstractDynamicSnippetsGeneratorContext } from \"./AbstractDynamicSnippetsGeneratorContext\";\nexport { type DiscriminatedUnionTypeInstance } from \"./DiscriminatedUnionTypeInstance\";\nexport { ErrorReporter, Severity } from \"./ErrorReporter\";\nexport { type Options, Style } from \"./Options\";\nexport { Result } from \"./Result\";\nexport { Scope } from \"./Scope\";\nexport { type TypeInstance } from \"./TypeInstance\";\nexport { DynamicSnippetsTestRunner } from \"./test-utils/DynamicSnippetsTestRunner\";\n"],"mappings":"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","names":["init_process","init_buffer","init_process","init_buffer","Result","__publicField","context","snippet","endpoint","_a","reporter","_b","AbstractDynamicSnippetsGenerator","context","__publicField","request","options","endpoints","result","Result","endpoint","snippetGenerator","snippet","error","lastError","init_process","init_buffer","Severity","ErrorReporter","_ErrorReporter","__publicField","err","__spreadProps","__spreadValues","path","severity","clone","result","item","init_process","init_buffer","init_process","init_buffer","init_process","init_buffer","HttpEndpointReferenceParser","__publicField","reference","match","AbstractDynamicSnippetsGeneratorContext","ir","config","options","__publicField","ErrorReporter","HttpEndpointReferenceParser","parameters","values","instances","key","value","parameter","param","typeInstanceValue","Severity","ignoreMissingParameters","snippetObject","objectRecord","property","record","fileValue","fileArrayValue","stringValues","typeId","namedType","discriminatedUnion","discriminantFieldName","discriminantValue","singleDiscriminatedUnionType","_a","_","filtered","__objRest","__restKey","rawEndpoint","parsedEndpoint","location","endpoints","endpoint","request","inlinePathParameters","inlineFileProperties","_b","body","assertNever","environmentID","environments","environment","env","multiEnvironmentUrlValues","firstEnvironment","expectedKeys","keys","typeReference","resolvedType","auth","parameterName","expected","fileUpload","init_process","init_buffer","Scope","init_process","init_buffer"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as u}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as u}from"./chunk-DVDVP26D.js";import{c as p}from"./chunk-3Z2URLHB.js";import{a as l}from"./chunk-ZNTXZ3YV.js";import{a as g}from"./chunk-SVPRIX53.js";import{e as r,f as a,g as s,h as c,j as n,k as m}from"./chunk-JHIUGKJ4.js";a();s();var h=class f extends p{constructor({ir:e,config:t}){super({ir:e,config:t});r(this,"ir");r(this,"customConfig");r(this,"dynamicTypeMapper");r(this,"dynamicTypeInstantiationMapper");r(this,"filePropertyMapper");r(this,"rootImportPath");this.ir=e,this.customConfig=t.customConfig!=null?t.customConfig:void 0,this.dynamicTypeMapper=new l({context:this}),this.dynamicTypeInstantiationMapper=new u({context:this}),this.filePropertyMapper=new g({context:this}),this.rootImportPath=m({config:t,customConfig:this.customConfig})}clone(){return new f({ir:this.ir,config:this.config})}isOptional(e){switch(e.type){case"optional":case"map":return!0;case"nullable":case"list":case"set":return this.isOptional(e.value);case"named":case"literal":case"primitive":case"unknown":return!1;default:c(e)}}getMethodName(e){return e.pascalCase.unsafeName}getTestMethodName(e){return e.declaration.fernFilepath.allParts.map(t=>t.pascalCase.unsafeName).join("")+e.declaration.name.pascalCase.unsafeName}getTypeName(e){return e.pascalCase.unsafeName}getImportPath(e){let t=e.packagePath.map(i=>i.pascalCase.unsafeName.toLowerCase());return[this.rootImportPath,...t].join("/")}getImportPathForRequest(e){var t;return(t=this.customConfig)!=null&&t.exportAllRequestsAtRoot?this.rootImportPath:this.getImportPath(e)}getContextTypeReference(){return n.typeReference({name:"Context",importPath:"context"})}getContextTodoFunctionInvocation(){return n.invokeFunc({func:n.typeReference({name:"TODO",importPath:"context"}),arguments_:[]})}getIoReaderTypeReference(){return n.typeReference({name:"Reader",importPath:"io"})}getTestingTypeReference(){return n.typeReference({name:"T",importPath:"testing"})}getNewStringsReaderFunctionInvocation(e){return n.invokeFunc({func:n.typeReference({name:"NewReader",importPath:"strings"}),arguments_:[n.TypeInstantiation.string(e)]})}getClientConstructorName(){var e,t;return((e=this.customConfig)==null?void 0:e.clientConstructorName)!=null?this.customConfig.clientConstructorName:((t=this.customConfig)==null?void 0:t.exportedClientName)!=null?`New${this.customConfig.exportedClientName}`:`New${this.getClientName()}`}getClientName(){var e;return((e=this.customConfig)==null?void 0:e.clientName)!=null?this.customConfig.clientName:"Client"}getClientImportPath(){return`${this.rootImportPath}/client`}getOptionImportPath(){return`${this.rootImportPath}/option`}getGoTypeReferenceFromDeclaration({declaration:e}){return n.typeReference({name:e.name.pascalCase.unsafeName,importPath:this.getImportPath(e.fernFilepath)})}getEnvironmentTypeReferenceFromID(e){let t=this.resolveEnvironmentName(e);if(t!=null)return this.getEnvironmentTypeReference(t)}getEnvironmentTypeReference(e){return n.typeReference({name:`Environments.${this.getTypeName(e)}`,importPath:this.rootImportPath})}static chainMethods(e,...t){if(t.length===0)throw new Error("Must have methods to chain");let i=e;for(let o of t)i=n.invokeMethod({on:i,method:o.method,arguments_:o.arguments_,multiline:o.multiline});return i}};export{h as a};
|
|
2
|
+
//# sourceMappingURL=chunk-B2A7QNZM.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as p}from"./chunk-FTDA4363.js";import{e as u,f as l,g as d,h as c,j as r}from"./chunk-JHIUGKJ4.js";l();d();var y=class{constructor({context:e}){u(this,"context");this.context=e}convert(e){if(e.value===null&&!this.context.isNullable(e.typeReference)&&this.context.errors.add({severity:p.Critical,message:"Expected non-null value, but got null"}),e.value==null)return r.TypeInstantiation.nop();switch(e.typeReference.type){case"list":return this.convertList({list:e.typeReference.value,value:e.value});case"literal":return r.TypeInstantiation.nop();case"map":return this.convertMap({map:e.typeReference,value:e.value});case"named":{let t=this.context.resolveNamedType({typeId:e.typeReference.value});return t==null?r.TypeInstantiation.nop():this.convertNamed({named:t,value:e.value,as:e.as})}case"nullable":{let t=e.typeReference.value;if(t.type==="named"){let n=this.context.resolveNamedType({typeId:t.value});if((n==null?void 0:n.type)==="alias"&&["list","set","map"].includes(n.typeReference.type)){let i=this.convert({typeReference:n.typeReference,value:e.value,as:e.as}),a=this.context.getTypeName(n.declaration.name),o=this.context.getImportPath(n.declaration.fernFilepath);return this.reconstructAliasCollectionLiteral({collectionLiteral:i,aliasName:a,aliasImportPath:o})}}return r.TypeInstantiation.optional(this.convert({typeReference:t,value:e.value,as:e.as}))}case"optional":{let t=e.typeReference.value;if(t.type==="named"){let n=this.context.resolveNamedType({typeId:t.value});if((n==null?void 0:n.type)==="alias"&&["list","set","map"].includes(n.typeReference.type)){let i=this.convert({typeReference:n.typeReference,value:e.value,as:e.as}),a=this.context.getTypeName(n.declaration.name),o=this.context.getImportPath(n.declaration.fernFilepath);return this.reconstructAliasCollectionLiteral({collectionLiteral:i,aliasName:a,aliasImportPath:o})}}return r.TypeInstantiation.optional(this.convert({typeReference:t,value:e.value,as:e.as}))}case"primitive":return this.convertPrimitive({primitive:e.typeReference.value,value:e.value,as:e.as});case"set":return this.convertList({list:e.typeReference.value,value:e.value});case"unknown":return this.convertUnknown({value:e.value});default:c(e.typeReference)}}convertToPointerIfPossible(e){let t=this.convert(e);switch(e.typeReference.type){case"named":{let n=this.context.resolveNamedType({typeId:e.typeReference.value});return(n==null?void 0:n.type)==="enum"?r.TypeInstantiation.reference(r.invokeMethod({on:t,method:"Ptr",arguments_:[]})):t}default:return t}}convertList({list:e,value:t}){return Array.isArray(t)?r.TypeInstantiation.slice({valueType:this.context.dynamicTypeMapper.convert({typeReference:e}),values:t.map((n,i)=>{this.context.errors.scope({index:i});try{return this.convert({typeReference:e,value:n})}finally{this.context.errors.unscope()}})}):(this.context.errors.add({severity:p.Critical,message:`Expected array but got: ${typeof t}`}),r.TypeInstantiation.nop())}convertMap({map:e,value:t}){return typeof t!="object"||t==null?(this.context.errors.add({severity:p.Critical,message:`Expected object but got: ${t==null?"null":typeof t}`}),r.TypeInstantiation.nop()):r.TypeInstantiation.map({keyType:this.context.dynamicTypeMapper.convert({typeReference:e.key}),valueType:this.context.dynamicTypeMapper.convert({typeReference:e.value}),entries:Object.entries(t).map(([n,i])=>{this.context.errors.scope(n);try{return{key:this.convert({typeReference:e.key,value:n,as:"key"}),value:this.convert({typeReference:e.value,value:i})}}finally{this.context.errors.unscope()}})})}convertNamed({named:e,value:t,as:n}){switch(e.type){case"alias":return this.convertAlias({aliasType:e,value:t,as:n});case"discriminatedUnion":return this.convertDiscriminatedUnion({discriminatedUnion:e,value:t});case"enum":return this.convertEnum({enum_:e,value:t});case"object":return this.convertObject({object_:e,value:t});case"undiscriminatedUnion":return this.convertUndiscriminatedUnion({undiscriminatedUnion:e,value:t});default:c(e)}}convertAlias({aliasType:e,value:t,as:n}){switch(e.typeReference.type){case"literal":return r.TypeInstantiation.reference(r.invokeFunc({func:r.typeReference({name:this.context.getTypeName(e.declaration.name),importPath:this.context.getImportPath(e.declaration.fernFilepath)}),arguments_:[this.convertLiteralValue(e.typeReference.value)]}));default:return this.convert({typeReference:e.typeReference,value:t,as:n})}}reconstructAliasCollectionLiteral({collectionLiteral:e,aliasName:t,aliasImportPath:n}){let i=e.internalType;return i.type==="slice"?r.TypeInstantiation.reference(r.codeblock(a=>{a.write("&"),a.writeNode(r.typeReference({name:t,importPath:n}));let o=i.values;if(o.length===0){a.write("{}");return}a.writeLine("{"),a.indent();for(let s of o)a.writeNode(s),a.writeLine(",");a.dedent(),a.write("}")})):i.type==="map"?r.TypeInstantiation.reference(r.codeblock(a=>{a.write("&"),a.writeNode(r.typeReference({name:t,importPath:n}));let o=i.entries;if(o.length===0){a.write("{}");return}a.writeLine("{"),a.indent();for(let s of o)a.writeNode(s.key),a.write(": "),a.writeNode(s.value),a.writeLine(",");a.dedent(),a.write("}")})):r.TypeInstantiation.reference(r.codeblock(a=>{a.write("&"),a.writeNode(e)}))}convertLiteralValue(e){switch(e.type){case"boolean":return r.TypeInstantiation.bool(e.value);case"string":return r.TypeInstantiation.string(e.value);default:c(e)}}convertDiscriminatedUnion({discriminatedUnion:e,value:t}){let n=this.context.getGoTypeReferenceFromDeclaration({declaration:e.declaration}),i=this.context.resolveDiscriminatedUnionTypeInstance({discriminatedUnion:e,value:t});if(i==null)return r.TypeInstantiation.nop();let a=i.singleDiscriminatedUnionType,o=this.getBaseFields({discriminatedUnionTypeInstance:i,singleDiscriminatedUnionType:a});switch(a.type){case"samePropertiesAsObject":{let s=this.context.resolveNamedType({typeId:a.typeId});return s==null?r.TypeInstantiation.nop():r.TypeInstantiation.structPointer({typeReference:n,fields:[{name:this.context.getTypeName(a.discriminantValue.name),value:this.convertNamed({named:s,value:i.value})},...o]})}case"singleProperty":{let s=this.context.getRecord(i.value);if(s==null)return r.TypeInstantiation.nop();try{return this.context.errors.scope(a.discriminantValue.wireValue),r.TypeInstantiation.structPointer({typeReference:n,fields:[{name:this.context.getTypeName(a.discriminantValue.name),value:this.convert({typeReference:a.typeReference,value:s[a.discriminantValue.wireValue]})},...o]})}finally{this.context.errors.unscope()}}case"noProperties":return r.TypeInstantiation.structPointer({typeReference:n,fields:[{name:this.context.getTypeName(i.discriminantValue.name),value:r.TypeInstantiation.string(a.discriminantValue.wireValue)},...o]});default:c(a)}}getBaseFields({discriminatedUnionTypeInstance:e,singleDiscriminatedUnionType:t}){var i,a;return this.context.associateByWireValue({parameters:(i=t.properties)!=null?i:[],values:(a=this.context.getRecord(e.value))!=null?a:{},ignoreMissingParameters:!0}).map(o=>{this.context.errors.scope(o.name.wireValue);try{return{name:this.context.getTypeName(o.name.name),value:this.convert(o)}}finally{this.context.errors.unscope()}})}convertObject({object_:e,value:t}){var i;let n=this.context.associateByWireValue({parameters:e.properties,values:(i=this.context.getRecord(t))!=null?i:{}});return r.TypeInstantiation.structPointer({typeReference:r.typeReference({name:this.context.getTypeName(e.declaration.name),importPath:this.context.getImportPath(e.declaration.fernFilepath)}),fields:n.map(a=>{this.context.errors.scope(a.name.wireValue);try{return{name:this.context.getTypeName(a.name.name),value:this.convert(a)}}finally{this.context.errors.unscope()}})})}convertEnum({enum_:e,value:t}){let n=this.getEnumValueName({enum_:e,value:t});return n==null?r.TypeInstantiation.nop():r.TypeInstantiation.enum(r.typeReference({name:n,importPath:this.context.getImportPath(e.declaration.fernFilepath)}))}getEnumValueName({enum_:e,value:t}){if(typeof t!="string"){this.context.errors.add({severity:p.Critical,message:`Expected enum value string, got: ${typeof t}`});return}let n=e.values.find(i=>i.wireValue===t);if(n==null){this.context.errors.add({severity:p.Critical,message:`An enum value named "${t}" does not exist in this context`});return}return`${this.context.getTypeName(e.declaration.name)}${this.context.getTypeName(n.name)}`}convertUndiscriminatedUnion({undiscriminatedUnion:e,value:t}){let n=this.findMatchingUndiscriminatedUnionType({undiscriminatedUnion:e,value:t});if(n==null)return r.TypeInstantiation.nop();let i=this.getUndiscriminatedUnionFieldName({typeReference:n.valueTypeReference});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.structPointer({typeReference:this.context.getGoTypeReferenceFromDeclaration({declaration:e.declaration}),fields:[{name:i,value:n.typeInstantiation}]})}findMatchingUndiscriminatedUnionType({undiscriminatedUnion:e,value:t}){for(let n of e.types)try{let i=this.convert({typeReference:n,value:t});return{valueTypeReference:n,typeInstantiation:i}}catch(i){continue}this.context.errors.add({severity:p.Critical,message:`None of the types in the undiscriminated union matched the given "${typeof t}" value`})}getUndiscriminatedUnionFieldName({typeReference:e}){switch(e.type){case"list":return this.getUndiscriminatedUnionFieldNameForList({list:e});case"literal":return this.getUndiscriminatedUnionFieldNameForLiteral({literal:e.value});case"map":return this.getUndiscriminatedUnionFieldNameForMap({map:e});case"named":{let t=this.context.resolveNamedType({typeId:e.value});return t==null?void 0:this.context.getTypeName(t.declaration.name)}case"optional":return this.getUndiscriminatedUnionFieldNameForOptional({typeReference:e});case"nullable":return this.getUndiscriminatedUnionFieldNameForOptional({typeReference:e});case"primitive":return this.getUndiscriminatedUnionFieldNameForPrimitive({primitive:e.value});case"set":return this.getUndiscriminatedUnionFieldNameForSet({set:e});case"unknown":return"Unknown";default:c(e)}}getUndiscriminatedUnionFieldNameForList({list:e}){let t=this.getUndiscriminatedUnionFieldName({typeReference:e});if(t!=null)return`${t}List`}getUndiscriminatedUnionFieldNameForMap({map:e}){let t=this.getUndiscriminatedUnionFieldName({typeReference:e.key});if(t==null)return;let n=this.getUndiscriminatedUnionFieldName({typeReference:e.value});if(n!=null)return`${t}${n}Map`}getUndiscriminatedUnionFieldNameForOptional({typeReference:e}){let t=this.getUndiscriminatedUnionFieldName({typeReference:e});if(t!=null)return`${t}Optional`}getUndiscriminatedUnionFieldNameForSet({set:e}){let t=this.getUndiscriminatedUnionFieldName({typeReference:e});if(t!=null)return`${t}Set`}getUndiscriminatedUnionFieldNameForLiteral({literal:e}){switch(e.type){case"boolean":return e.value?"TrueLiteral":"FalseLiteral";case"string":return`${e.value}StringLiteral`;default:c(e)}}getUndiscriminatedUnionFieldNameForPrimitive({primitive:e}){switch(e){case"INTEGER":case"UINT":return"Integer";case"LONG":case"UINT_64":return"Long";case"FLOAT":case"DOUBLE":return"Double";case"BOOLEAN":return"Boolean";case"BIG_INTEGER":case"STRING":return"String";case"UUID":return"Uuid";case"DATE":return"Date";case"DATE_TIME":return"DateTime";case"BASE_64":return"Base64";default:c(e)}}convertUnknown({value:e}){return r.TypeInstantiation.any(e)}convertPrimitive({primitive:e,value:t,as:n}){switch(e){case"INTEGER":case"UINT":{let i=this.getValueAsNumber({value:t,as:n});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.int(i)}case"LONG":case"UINT_64":{let i=this.getValueAsNumber({value:t,as:n});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.int64(i)}case"FLOAT":case"DOUBLE":{let i=this.getValueAsNumber({value:t,as:n});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.float64(i)}case"BOOLEAN":{let i=this.getValueAsBoolean({value:t,as:n});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.bool(i)}case"STRING":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.string(i)}case"DATE":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.date(i)}case"DATE_TIME":{let i=this.context.getValueAsString({value:t});if(i==null)return r.TypeInstantiation.nop();let a=this.normalizeDateTimeString(i);return r.TypeInstantiation.dateTime(a)}case"UUID":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.uuid(i)}case"BASE_64":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.bytes(i)}case"BIG_INTEGER":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.string(i)}default:c(e)}}getValueAsNumber({value:e,as:t}){let n=t==="key"&&typeof e=="string"?Number(e):e;return this.context.getValueAsNumber({value:n})}getValueAsBoolean({value:e,as:t}){let n=t==="key"?typeof e=="string"?e==="true":e==="false"?!1:e:e;return this.context.getValueAsBoolean({value:n})}normalizeDateTimeString(e){return/^\d{4}-\d{2}-\d{2}$/.test(e)?`${e}T00:00:00Z`:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/.test(e)?`${e}Z`:e}};export{y as a};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{b as p}from"./chunk-3Z2URLHB.js";import{e as u,f as l,g as d,h as c,j as r}from"./chunk-JHIUGKJ4.js";l();d();var y=class{constructor({context:e}){u(this,"context");this.context=e}convert(e){if(e.value===null&&!this.context.isNullable(e.typeReference)&&this.context.errors.add({severity:p.Critical,message:"Expected non-null value, but got null"}),e.value==null)return r.TypeInstantiation.nop();switch(e.typeReference.type){case"list":return this.convertList({list:e.typeReference.value,value:e.value});case"literal":return r.TypeInstantiation.nop();case"map":return this.convertMap({map:e.typeReference,value:e.value});case"named":{let t=this.context.resolveNamedType({typeId:e.typeReference.value});return t==null?r.TypeInstantiation.nop():this.convertNamed({named:t,value:e.value,as:e.as})}case"nullable":{let t=e.typeReference.value;if(t.type==="named"){let n=this.context.resolveNamedType({typeId:t.value});if((n==null?void 0:n.type)==="alias"&&["list","set","map"].includes(n.typeReference.type)){let i=this.convert({typeReference:n.typeReference,value:e.value,as:e.as}),a=this.context.getTypeName(n.declaration.name),o=this.context.getImportPath(n.declaration.fernFilepath);return this.reconstructAliasCollectionLiteral({collectionLiteral:i,aliasName:a,aliasImportPath:o})}}return r.TypeInstantiation.optional(this.convert({typeReference:t,value:e.value,as:e.as}))}case"optional":{let t=e.typeReference.value;if(t.type==="named"){let n=this.context.resolveNamedType({typeId:t.value});if((n==null?void 0:n.type)==="alias"&&["list","set","map"].includes(n.typeReference.type)){let i=this.convert({typeReference:n.typeReference,value:e.value,as:e.as}),a=this.context.getTypeName(n.declaration.name),o=this.context.getImportPath(n.declaration.fernFilepath);return this.reconstructAliasCollectionLiteral({collectionLiteral:i,aliasName:a,aliasImportPath:o})}}return r.TypeInstantiation.optional(this.convert({typeReference:t,value:e.value,as:e.as}))}case"primitive":return this.convertPrimitive({primitive:e.typeReference.value,value:e.value,as:e.as});case"set":return this.convertList({list:e.typeReference.value,value:e.value});case"unknown":return this.convertUnknown({value:e.value});default:c(e.typeReference)}}convertToPointerIfPossible(e){let t=this.convert(e);switch(e.typeReference.type){case"named":{let n=this.context.resolveNamedType({typeId:e.typeReference.value});return(n==null?void 0:n.type)==="enum"?r.TypeInstantiation.reference(r.invokeMethod({on:t,method:"Ptr",arguments_:[]})):t}default:return t}}convertList({list:e,value:t}){return Array.isArray(t)?r.TypeInstantiation.slice({valueType:this.context.dynamicTypeMapper.convert({typeReference:e}),values:t.map((n,i)=>{this.context.errors.scope({index:i});try{return this.convert({typeReference:e,value:n})}finally{this.context.errors.unscope()}})}):(this.context.errors.add({severity:p.Critical,message:`Expected array but got: ${typeof t}`}),r.TypeInstantiation.nop())}convertMap({map:e,value:t}){return typeof t!="object"||t==null?(this.context.errors.add({severity:p.Critical,message:`Expected object but got: ${t==null?"null":typeof t}`}),r.TypeInstantiation.nop()):r.TypeInstantiation.map({keyType:this.context.dynamicTypeMapper.convert({typeReference:e.key}),valueType:this.context.dynamicTypeMapper.convert({typeReference:e.value}),entries:Object.entries(t).map(([n,i])=>{this.context.errors.scope(n);try{return{key:this.convert({typeReference:e.key,value:n,as:"key"}),value:this.convert({typeReference:e.value,value:i})}}finally{this.context.errors.unscope()}})})}convertNamed({named:e,value:t,as:n}){switch(e.type){case"alias":return this.convertAlias({aliasType:e,value:t,as:n});case"discriminatedUnion":return this.convertDiscriminatedUnion({discriminatedUnion:e,value:t});case"enum":return this.convertEnum({enum_:e,value:t});case"object":return this.convertObject({object_:e,value:t});case"undiscriminatedUnion":return this.convertUndiscriminatedUnion({undiscriminatedUnion:e,value:t});default:c(e)}}convertAlias({aliasType:e,value:t,as:n}){switch(e.typeReference.type){case"literal":return r.TypeInstantiation.reference(r.invokeFunc({func:r.typeReference({name:this.context.getTypeName(e.declaration.name),importPath:this.context.getImportPath(e.declaration.fernFilepath)}),arguments_:[this.convertLiteralValue(e.typeReference.value)]}));default:return this.convert({typeReference:e.typeReference,value:t,as:n})}}reconstructAliasCollectionLiteral({collectionLiteral:e,aliasName:t,aliasImportPath:n}){let i=e.internalType;return i.type==="slice"?r.TypeInstantiation.reference(r.codeblock(a=>{a.write("&"),a.writeNode(r.typeReference({name:t,importPath:n}));let o=i.values;if(o.length===0){a.write("{}");return}a.writeLine("{"),a.indent();for(let s of o)a.writeNode(s),a.writeLine(",");a.dedent(),a.write("}")})):i.type==="map"?r.TypeInstantiation.reference(r.codeblock(a=>{a.write("&"),a.writeNode(r.typeReference({name:t,importPath:n}));let o=i.entries;if(o.length===0){a.write("{}");return}a.writeLine("{"),a.indent();for(let s of o)a.writeNode(s.key),a.write(": "),a.writeNode(s.value),a.writeLine(",");a.dedent(),a.write("}")})):r.TypeInstantiation.reference(r.codeblock(a=>{a.write("&"),a.writeNode(e)}))}convertLiteralValue(e){switch(e.type){case"boolean":return r.TypeInstantiation.bool(e.value);case"string":return r.TypeInstantiation.string(e.value);default:c(e)}}convertDiscriminatedUnion({discriminatedUnion:e,value:t}){let n=this.context.getGoTypeReferenceFromDeclaration({declaration:e.declaration}),i=this.context.resolveDiscriminatedUnionTypeInstance({discriminatedUnion:e,value:t});if(i==null)return r.TypeInstantiation.nop();let a=i.singleDiscriminatedUnionType,o=this.getBaseFields({discriminatedUnionTypeInstance:i,singleDiscriminatedUnionType:a});switch(a.type){case"samePropertiesAsObject":{let s=this.context.resolveNamedType({typeId:a.typeId});return s==null?r.TypeInstantiation.nop():r.TypeInstantiation.structPointer({typeReference:n,fields:[{name:this.context.getTypeName(a.discriminantValue.name),value:this.convertNamed({named:s,value:i.value})},...o]})}case"singleProperty":{let s=this.context.getRecord(i.value);if(s==null)return r.TypeInstantiation.nop();try{return this.context.errors.scope(a.discriminantValue.wireValue),r.TypeInstantiation.structPointer({typeReference:n,fields:[{name:this.context.getTypeName(a.discriminantValue.name),value:this.convert({typeReference:a.typeReference,value:s[a.discriminantValue.wireValue]})},...o]})}finally{this.context.errors.unscope()}}case"noProperties":return r.TypeInstantiation.structPointer({typeReference:n,fields:[{name:this.context.getTypeName(i.discriminantValue.name),value:r.TypeInstantiation.string(a.discriminantValue.wireValue)},...o]});default:c(a)}}getBaseFields({discriminatedUnionTypeInstance:e,singleDiscriminatedUnionType:t}){var i,a;return this.context.associateByWireValue({parameters:(i=t.properties)!=null?i:[],values:(a=this.context.getRecord(e.value))!=null?a:{},ignoreMissingParameters:!0}).map(o=>{this.context.errors.scope(o.name.wireValue);try{return{name:this.context.getTypeName(o.name.name),value:this.convert(o)}}finally{this.context.errors.unscope()}})}convertObject({object_:e,value:t}){var i;let n=this.context.associateByWireValue({parameters:e.properties,values:(i=this.context.getRecord(t))!=null?i:{}});return r.TypeInstantiation.structPointer({typeReference:r.typeReference({name:this.context.getTypeName(e.declaration.name),importPath:this.context.getImportPath(e.declaration.fernFilepath)}),fields:n.map(a=>{this.context.errors.scope(a.name.wireValue);try{return{name:this.context.getTypeName(a.name.name),value:this.convert(a)}}finally{this.context.errors.unscope()}})})}convertEnum({enum_:e,value:t}){let n=this.getEnumValueName({enum_:e,value:t});return n==null?r.TypeInstantiation.nop():r.TypeInstantiation.enum(r.typeReference({name:n,importPath:this.context.getImportPath(e.declaration.fernFilepath)}))}getEnumValueName({enum_:e,value:t}){if(typeof t!="string"){this.context.errors.add({severity:p.Critical,message:`Expected enum value string, got: ${typeof t}`});return}let n=e.values.find(i=>i.wireValue===t);if(n==null){this.context.errors.add({severity:p.Critical,message:`An enum value named "${t}" does not exist in this context`});return}return`${this.context.getTypeName(e.declaration.name)}${this.context.getTypeName(n.name)}`}convertUndiscriminatedUnion({undiscriminatedUnion:e,value:t}){let n=this.findMatchingUndiscriminatedUnionType({undiscriminatedUnion:e,value:t});if(n==null)return r.TypeInstantiation.nop();let i=this.getUndiscriminatedUnionFieldName({typeReference:n.valueTypeReference});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.structPointer({typeReference:this.context.getGoTypeReferenceFromDeclaration({declaration:e.declaration}),fields:[{name:i,value:n.typeInstantiation}]})}findMatchingUndiscriminatedUnionType({undiscriminatedUnion:e,value:t}){for(let n of e.types)try{let i=this.convert({typeReference:n,value:t});return{valueTypeReference:n,typeInstantiation:i}}catch(i){continue}this.context.errors.add({severity:p.Critical,message:`None of the types in the undiscriminated union matched the given "${typeof t}" value`})}getUndiscriminatedUnionFieldName({typeReference:e}){switch(e.type){case"list":return this.getUndiscriminatedUnionFieldNameForList({list:e});case"literal":return this.getUndiscriminatedUnionFieldNameForLiteral({literal:e.value});case"map":return this.getUndiscriminatedUnionFieldNameForMap({map:e});case"named":{let t=this.context.resolveNamedType({typeId:e.value});return t==null?void 0:this.context.getTypeName(t.declaration.name)}case"optional":return this.getUndiscriminatedUnionFieldNameForOptional({typeReference:e});case"nullable":return this.getUndiscriminatedUnionFieldNameForOptional({typeReference:e});case"primitive":return this.getUndiscriminatedUnionFieldNameForPrimitive({primitive:e.value});case"set":return this.getUndiscriminatedUnionFieldNameForSet({set:e});case"unknown":return"Unknown";default:c(e)}}getUndiscriminatedUnionFieldNameForList({list:e}){let t=this.getUndiscriminatedUnionFieldName({typeReference:e});if(t!=null)return`${t}List`}getUndiscriminatedUnionFieldNameForMap({map:e}){let t=this.getUndiscriminatedUnionFieldName({typeReference:e.key});if(t==null)return;let n=this.getUndiscriminatedUnionFieldName({typeReference:e.value});if(n!=null)return`${t}${n}Map`}getUndiscriminatedUnionFieldNameForOptional({typeReference:e}){let t=this.getUndiscriminatedUnionFieldName({typeReference:e});if(t!=null)return`${t}Optional`}getUndiscriminatedUnionFieldNameForSet({set:e}){let t=this.getUndiscriminatedUnionFieldName({typeReference:e});if(t!=null)return`${t}Set`}getUndiscriminatedUnionFieldNameForLiteral({literal:e}){switch(e.type){case"boolean":return e.value?"TrueLiteral":"FalseLiteral";case"string":return`${e.value}StringLiteral`;default:c(e)}}getUndiscriminatedUnionFieldNameForPrimitive({primitive:e}){switch(e){case"INTEGER":case"UINT":return"Integer";case"LONG":case"UINT_64":return"Long";case"FLOAT":case"DOUBLE":return"Double";case"BOOLEAN":return"Boolean";case"BIG_INTEGER":case"STRING":return"String";case"UUID":return"Uuid";case"DATE":return"Date";case"DATE_TIME":return"DateTime";case"BASE_64":return"Base64";default:c(e)}}convertUnknown({value:e}){return r.TypeInstantiation.any(e)}convertPrimitive({primitive:e,value:t,as:n}){switch(e){case"INTEGER":case"UINT":{let i=this.getValueAsNumber({value:t,as:n});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.int(i)}case"LONG":case"UINT_64":{let i=this.getValueAsNumber({value:t,as:n});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.int64(i)}case"FLOAT":case"DOUBLE":{let i=this.getValueAsNumber({value:t,as:n});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.float64(i)}case"BOOLEAN":{let i=this.getValueAsBoolean({value:t,as:n});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.bool(i)}case"STRING":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.string(i)}case"DATE":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.date(i)}case"DATE_TIME":{let i=this.context.getValueAsString({value:t});if(i==null)return r.TypeInstantiation.nop();let a=this.normalizeDateTimeString(i);return r.TypeInstantiation.dateTime(a)}case"UUID":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.uuid(i)}case"BASE_64":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.bytes(i)}case"BIG_INTEGER":{let i=this.context.getValueAsString({value:t});return i==null?r.TypeInstantiation.nop():r.TypeInstantiation.string(i)}default:c(e)}}getValueAsNumber({value:e,as:t}){let n=t==="key"&&typeof e=="string"?Number(e):e;return this.context.getValueAsNumber({value:n})}getValueAsBoolean({value:e,as:t}){let n=t==="key"?typeof e=="string"?e==="true":e==="false"?!1:e:e;return this.context.getValueAsBoolean({value:n})}normalizeDateTimeString(e){return/^\d{4}-\d{2}-\d{2}$/.test(e)?`${e}T00:00:00Z`:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/.test(e)?`${e}Z`:e}};export{y as a};
|
|
2
|
+
//# sourceMappingURL=chunk-DVDVP26D.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a}from"./chunk-TXVHHFW3.js";import{a as o}from"./chunk-B2A7QNZM.js";import{a as i}from"./chunk-3Z2URLHB.js";import{e as r,f as n,g as p}from"./chunk-JHIUGKJ4.js";n();p();var s=class extends i{constructor({ir:e,config:t,formatter:c}){super(new o({ir:e,config:t}));r(this,"formatter");this.formatter=c}async generate(e,t){return super.generate(e,t)}generateSync(e,t){return super.generateSync(e,t)}async generateSnippetAst(e){return super.generateSnippetAst(e)}createSnippetGenerator(e){return new a({context:e,formatter:this.formatter})}};export{s as a};
|
|
2
|
+
//# sourceMappingURL=chunk-MYN2HZVH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/DynamicSnippetsGenerator.ts"],"sourcesContent":["import {\n AbstractAstNode,\n AbstractDynamicSnippetsGenerator,\n AbstractFormatter,\n FernGeneratorExec,\n Options\n} from \"@fern-api/browser-compatible-base-generator\";\nimport { FernIr } from \"@fern-api/dynamic-ir-sdk\";\nimport { DynamicSnippetsGeneratorContext } from \"./context/DynamicSnippetsGeneratorContext\";\nimport { EndpointSnippetGenerator } from \"./EndpointSnippetGenerator\";\n\nexport class DynamicSnippetsGenerator extends AbstractDynamicSnippetsGenerator<\n DynamicSnippetsGeneratorContext,\n EndpointSnippetGenerator\n> {\n private formatter: AbstractFormatter | undefined;\n\n constructor({\n ir,\n config,\n formatter\n }: {\n ir: FernIr.dynamic.DynamicIntermediateRepresentation;\n config: FernGeneratorExec.GeneratorConfig;\n formatter?: AbstractFormatter;\n }) {\n super(new DynamicSnippetsGeneratorContext({ ir, config }));\n this.formatter = formatter;\n }\n\n public async generate(\n request: FernIr.dynamic.EndpointSnippetRequest,\n options?: Options\n ): Promise<FernIr.dynamic.EndpointSnippetResponse> {\n return super.generate(request, options);\n }\n\n public generateSync(\n request: FernIr.dynamic.EndpointSnippetRequest,\n options?: Options\n ): FernIr.dynamic.EndpointSnippetResponse {\n return super.generateSync(request, options);\n }\n\n public async generateSnippetAst(request: FernIr.dynamic.EndpointSnippetRequest): Promise<AbstractAstNode> {\n return super.generateSnippetAst(request);\n }\n\n protected createSnippetGenerator(context: DynamicSnippetsGeneratorContext): EndpointSnippetGenerator {\n return new EndpointSnippetGenerator({ context, formatter: this.formatter });\n }\n}\n"],"mappings":"yKAAAA,IAAAC,IAWO,IAAMC,EAAN,cAAuCC,CAG5C,CAGE,YAAY,CACR,GAAAC,EACA,OAAAC,EACA,UAAAC,CACJ,EAIG,CACC,MAAM,IAAIC,EAAgC,CAAE,GAAAH,EAAI,OAAAC,CAAO,CAAC,CAAC,EAX7DG,EAAA,KAAQ,aAYJ,KAAK,UAAYF,CACrB,CAEA,MAAa,SACTG,EACAC,EAC+C,CAC/C,OAAO,MAAM,SAASD,EAASC,CAAO,CAC1C,CAEO,aACHD,EACAC,EACsC,CACtC,OAAO,MAAM,aAAaD,EAASC,CAAO,CAC9C,CAEA,MAAa,mBAAmBD,EAA0E,CACtG,OAAO,MAAM,mBAAmBA,CAAO,CAC3C,CAEU,uBAAuBE,EAAoE,CACjG,OAAO,IAAIC,EAAyB,CAAE,QAAAD,EAAS,UAAW,KAAK,SAAU,CAAC,CAC9E,CACJ","names":["init_process","init_buffer","DynamicSnippetsGenerator","AbstractDynamicSnippetsGenerator","ir","config","formatter","DynamicSnippetsGeneratorContext","__publicField","request","options","context","EndpointSnippetGenerator"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as p,d}from"./chunk-3Z2URLHB.js";import{e as v,f as R,g as N,h as m,j as r}from"./chunk-JHIUGKJ4.js";R();N();var b="example",P="fern",T="do",I="client",l=r.TypeInstantiation,w="WireMockBaseURL",C="WireMockClient",x=class{constructor({context:e,formatter:t}){v(this,"context");v(this,"formatter");this.context=e,this.formatter=t}async generateSnippet({endpoint:e,request:t,options:n}){var s,a,c;return((a=(s=n==null?void 0:n.config)==null?void 0:s.outputWiremockTests)!=null?a:!1)?this.generateWiremockTest({endpoint:e,snippet:t}):await this.buildCodeBlock({endpoint:e,snippet:t}).toStringAsync({packageName:b,importPath:P,rootImportPath:this.context.rootImportPath,customConfig:(c=this.context.customConfig)!=null?c:{},formatter:this.formatter})}generateSnippetSync({endpoint:e,request:t,options:n}){var s,a,c;return((a=(s=n==null?void 0:n.config)==null?void 0:s.outputWiremockTests)!=null?a:!1)?this.generateWiremockTest({endpoint:e,snippet:t}):this.buildCodeBlock({endpoint:e,snippet:t}).toString({packageName:b,importPath:P,rootImportPath:this.context.rootImportPath,customConfig:(c=this.context.customConfig)!=null?c:{},formatter:this.formatter})}async generateSnippetAst({endpoint:e,request:t,options:n}){throw new Error("Unsupported")}generateWiremockTest({endpoint:e,snippet:t}){var o;return this.buildWiremockTestCodeBlock({endpoint:e,snippet:t}).toString({packageName:"wiremock",importPath:P,rootImportPath:this.context.rootImportPath,customConfig:(o=this.context.customConfig)!=null?o:{},formatter:this.formatter})}buildCodeBlock({endpoint:e,snippet:t}){return r.codeblock(n=>{n.writeNode(r.func({name:T,parameters:[],return_:[],body:r.codeblock(o=>{o.writeNode(this.constructClient({endpoint:e,snippet:t})),o.writeLine(),o.writeNode(this.callMethod({endpoint:e,snippet:t}))})})),n.writeNewLineIfLastLineNot()})}buildWiremockTestCodeBlock({endpoint:e,snippet:t}){return r.codeblock(n=>{n.writeNode(r.func({name:"Test"+this.context.getTestMethodName(e)+"WithWireMock",parameters:[r.parameter({name:"t",type:r.Type.pointer(r.Type.reference(this.context.getTestingTypeReference()))})],return_:[],body:r.codeblock(o=>{for(let i of this.buildWiremockTestSetup({endpoint:e}))o.writeNode(i),o.writeLine();o.writeLine(),o.writeNode(this.constructWiremockTestClient({endpoint:e,snippet:t})),o.writeLine(),o.writeNode(this.callClientMethodAndAssert({endpoint:e,snippet:t}))})})),n.writeNewLineIfLastLineNot()})}constructClient({endpoint:e,snippet:t}){return r.codeblock(n=>{n.write(`${I} := `),n.writeNode(this.getRootClientFuncInvocation(this.getConstructorArgs({endpoint:e,snippet:t})))})}constructWiremockTestClient({endpoint:e,snippet:t}){return r.codeblock(n=>{n.write(`${I} := `),n.writeNode(this.getRootClientFuncInvocation(this.getWiremockTestConstructorArgs()))})}writeMethodInvocation({writer:e,endpoint:t,snippet:n}){let{otherArgs:o,requestArg:i}=this.getMethodArgs({endpoint:t,snippet:n});if(i!=null)if(i instanceof r.TypeInstantiation&&r.TypeInstantiation.isNop(i))e.writeNode(r.invokeMethod({on:r.codeblock(I),method:this.getMethod({endpoint:t}),arguments_:[this.context.getContextTodoFunctionInvocation(),...o,r.codeblock("nil")]}));else{e.write("request := "),e.writeNode(i),e.writeLine();let s=r.codeblock("request");e.writeNode(r.invokeMethod({on:r.codeblock(I),method:this.getMethod({endpoint:t}),arguments_:[this.context.getContextTodoFunctionInvocation(),...o,s]}))}else e.writeNode(r.invokeMethod({on:r.codeblock(I),method:this.getMethod({endpoint:t}),arguments_:[this.context.getContextTodoFunctionInvocation(),...o]}))}callMethod({endpoint:e,snippet:t}){return r.codeblock(n=>{this.writeMethodInvocation({writer:n,endpoint:e,snippet:t})})}getConstructorArgs({endpoint:e,snippet:t}){let n=[],o=this.getConstructorBaseUrlArg({baseUrl:t.baseURL,environment:t.environment});return o!=null&&n.push(o),e.auth!=null&&(t.auth!=null?n.push(this.getConstructorAuthArg({auth:e.auth,values:t.auth})):this.context.errors.add({severity:p.Warning,message:`Auth with ${e.auth.type} configuration is required for this endpoint`})),this.context.errors.scope(d.Headers),this.context.ir.headers!=null&&t.headers!=null&&n.push(...this.getConstructorHeaderArgs({headers:this.context.ir.headers,values:t.headers})),this.context.errors.unscope(),n}getWiremockTestConstructorArgs(){return[r.codeblock(e=>{e.writeNode(r.invokeFunc({func:r.typeReference({name:"WithBaseURL",importPath:this.context.getOptionImportPath()}),arguments_:[r.codeblock(w)]}))})]}getConstructorAuthArg({auth:e,values:t}){if(t.type!==e.type)return this.addError(this.context.newAuthMismatchError({auth:e,values:t}).message),l.nop();switch(e.type){case"basic":return t.type==="basic"?this.getConstructorBasicAuthArg({auth:e,values:t}):l.nop();case"bearer":return t.type==="bearer"?this.getConstructorBearerAuthArg({auth:e,values:t}):l.nop();case"header":return t.type==="header"?this.getConstructorHeaderAuthArg({auth:e,values:t}):l.nop();case"oauth":return this.addWarning("The Go SDK doesn't support OAuth client credentials yet"),l.nop();case"inferred":return this.addWarning("The Go SDK Generator does not support Inferred auth scheme yet"),l.nop();default:m(e)}}addError(e){this.context.errors.add({severity:p.Critical,message:e})}addWarning(e){this.context.errors.add({severity:p.Warning,message:e})}getConstructorBasicAuthArg({auth:e,values:t}){return r.codeblock(n=>{n.writeNode(r.invokeFunc({func:r.typeReference({name:"WithBasicAuth",importPath:this.context.getOptionImportPath()}),arguments_:[r.TypeInstantiation.string(t.username),r.TypeInstantiation.string(t.password)]}))})}getConstructorBaseUrlArg({baseUrl:e,environment:t}){let n=this.getBaseUrlArg({baseUrl:e,environment:t});if(n!=null)return r.codeblock(o=>{o.writeNode(r.invokeFunc({func:r.typeReference({name:"WithBaseURL",importPath:this.context.getOptionImportPath()}),arguments_:[n]}))})}getBaseUrlArg({baseUrl:e,environment:t}){if(e!=null&&t!=null){this.context.errors.add({severity:p.Critical,message:"Cannot specify both baseUrl and environment options"});return}if(e!=null)return r.TypeInstantiation.string(e);if(t!=null){if(this.context.isSingleEnvironmentID(t)){let n=this.context.getEnvironmentTypeReferenceFromID(t);if(n==null){this.context.errors.add({severity:p.Warning,message:`Environment ${JSON.stringify(t)} was not found`});return}return r.TypeInstantiation.reference(n)}this.context.isMultiEnvironmentValues(t)&&this.context.errors.add({severity:p.Warning,message:"The Go SDK doesn't support a multi-environment client option yet; use the baseUrl option instead"})}}getConstructorBearerAuthArg({auth:e,values:t}){return r.codeblock(n=>{n.writeNode(r.invokeFunc({func:r.typeReference({name:`With${e.token.pascalCase.unsafeName}`,importPath:this.context.getOptionImportPath()}),arguments_:[r.TypeInstantiation.string(t.token)]}))})}getConstructorHeaderAuthArg({auth:e,values:t}){return r.codeblock(n=>{n.writeNode(r.invokeFunc({func:r.typeReference({name:`With${e.header.name.name.pascalCase.unsafeName}`,importPath:this.context.getOptionImportPath()}),arguments_:[this.context.dynamicTypeInstantiationMapper.convert({typeReference:e.header.typeReference,value:t.value})]}))})}getConstructorHeaderArgs({headers:e,values:t}){let n=[];for(let o of e){let i=this.getConstructorHeaderArg({header:o,value:t.value});i!=null&&n.push(i)}return n}getConstructorHeaderArg({header:e,value:t}){let n=this.context.dynamicTypeInstantiationMapper.convert({typeReference:e.typeReference,value:t});if(!r.TypeInstantiation.isNop(n))return r.codeblock(o=>{o.writeNode(r.invokeFunc({func:r.typeReference({name:`With${e.name.name.pascalCase.unsafeName}`,importPath:this.context.getOptionImportPath()}),arguments_:[n]}))})}getMethodArgs({endpoint:e,snippet:t}){switch(e.request.type){case"inlined":return this.getMethodArgsForInlinedRequest({request:e.request,snippet:t});case"body":return this.getMethodArgsForBodyRequest({request:e.request,snippet:t});default:m(e.request)}}getMethodArgsForBodyRequest({request:e,snippet:t}){var s,a;let n=[];this.context.errors.scope(d.PathParameters);let o=[...(s=this.context.ir.pathParameters)!=null?s:[],...(a=e.pathParameters)!=null?a:[]];o.length>0&&n.push(...this.getPathParameters({namedParameters:o,snippet:t}).map(c=>c.value)),this.context.errors.unscope(),this.context.errors.scope(d.RequestBody);let i=e.body!=null?this.getBodyRequestArg({body:e.body,value:t.requestBody}):void 0;return this.context.errors.unscope(),{otherArgs:n,requestArg:i}}getBodyRequestArg({body:e,value:t}){switch(e.type){case"bytes":return this.getBytesBodyRequestArg({value:t});case"typeReference":return this.context.dynamicTypeInstantiationMapper.convert({typeReference:e.value,value:t});default:m(e)}}getBytesBodyRequestArg({value:e}){return typeof e!="string"?(this.context.errors.add({severity:p.Critical,message:`Expected bytes value to be a string, got ${typeof e}`}),r.TypeInstantiation.nop()):r.TypeInstantiation.bytes(e)}getMethodArgsForInlinedRequest({request:e,snippet:t}){var h,g,y,f,u,k;let n=[],{inlinePathParameters:o,inlineFileProperties:i}={inlinePathParameters:(g=(h=this.context.customConfig)==null?void 0:h.inlinePathParameters)!=null?g:!0,inlineFileProperties:(f=(y=this.context.customConfig)==null?void 0:y.inlineFileProperties)!=null?f:!0};this.context.errors.scope(d.PathParameters);let s=[],a=[...(u=this.context.ir.pathParameters)!=null?u:[],...(k=e.pathParameters)!=null?k:[]];a.length>0&&s.push(...this.getPathParameters({namedParameters:a,snippet:t})),this.context.errors.unscope(),this.context.errors.scope(d.RequestBody);let c=this.getFilePropertyInfo({request:e,snippet:t});this.context.errors.unscope(),this.context.includePathParametersInWrappedRequest({request:e,inlinePathParameters:o})||n.push(...s.map(A=>A.value)),i||n.push(...c.fileFields.map(A=>A.value));let F=this.context.needsRequestParameter({request:e,inlinePathParameters:o,inlineFileProperties:i})?this.getInlinedRequestArg({request:e,snippet:t,pathParameterFields:this.context.includePathParametersInWrappedRequest({request:e,inlinePathParameters:o})?s:[],filePropertyInfo:c}):void 0;return{otherArgs:n,requestArg:F}}getFilePropertyInfo({request:e,snippet:t}){return e.body==null||!this.context.isFileUploadRequestBody(e.body)?{fileFields:[],bodyPropertyFields:[]}:this.context.filePropertyMapper.getFilePropertyInfo({body:e.body,value:t.requestBody})}getInlinedRequestArg({request:e,snippet:t,pathParameterFields:n,filePropertyInfo:o}){var h,g,y,f;this.context.errors.scope(d.QueryParameters);let s=this.context.associateQueryParametersByWireValue({parameters:(h=e.queryParameters)!=null?h:[],values:(g=t.queryParameters)!=null?g:{}}).map(u=>({name:u.name.name.pascalCase.unsafeName,value:this.context.dynamicTypeInstantiationMapper.convert(u)}));this.context.errors.unscope(),this.context.errors.scope(d.Headers);let c=this.context.associateByWireValue({parameters:(y=e.headers)!=null?y:[],values:(f=t.headers)!=null?f:{}}).map(u=>({name:u.name.name.pascalCase.unsafeName,value:this.context.dynamicTypeInstantiationMapper.convert(u)}));this.context.errors.unscope(),this.context.errors.scope(d.RequestBody);let F=e.body!=null?this.getInlinedRequestBodyStructFields({body:e.body,value:t.requestBody,filePropertyInfo:o}):[];return this.context.errors.unscope(),r.TypeInstantiation.structPointer({typeReference:r.typeReference({name:this.context.getMethodName(e.declaration.name),importPath:this.context.getImportPathForRequest(e.declaration.fernFilepath)}),fields:[...n,...s,...c,...F]})}getInlinedRequestBodyStructFields({body:e,value:t,filePropertyInfo:n}){switch(e.type){case"properties":return this.getInlinedRequestBodyPropertyStructFields({parameters:e.value,value:t});case"referenced":return[this.getReferencedRequestBodyPropertyStructField({body:e,value:t})];case"fileUpload":return this.getFileUploadRequestBodyStructFields({filePropertyInfo:n});default:m(e)}}getFileUploadRequestBodyStructFields({filePropertyInfo:e}){var t;return(t=this.context.customConfig)!=null&&t.inlineFileProperties?[...e.fileFields,...e.bodyPropertyFields]:e.bodyPropertyFields}getReferencedRequestBodyPropertyStructField({body:e,value:t}){return{name:this.context.getTypeName(e.bodyKey),value:this.getReferencedRequestBodyPropertyTypeInstantiation({body:e.bodyType,value:t})}}getReferencedRequestBodyPropertyTypeInstantiation({body:e,value:t}){switch(e.type){case"bytes":return this.getBytesBodyRequestArg({value:t});case"typeReference":return this.context.dynamicTypeInstantiationMapper.convert({typeReference:e.value,value:t});default:m(e)}}getInlinedRequestBodyPropertyStructFields({parameters:e,value:t}){var i;let n=[],o=this.context.associateByWireValue({parameters:e,values:(i=this.context.getRecord(t))!=null?i:{}});for(let s of o)n.push({name:this.context.getTypeName(s.name.name),value:this.context.dynamicTypeInstantiationMapper.convert(s)});return n}getPathParameters({namedParameters:e,snippet:t}){var i;let n=[],o=this.context.associateByWireValue({parameters:e,values:(i=t.pathParameters)!=null?i:{}});for(let s of o)n.push({name:this.context.getTypeName(s.name.name),value:this.context.dynamicTypeInstantiationMapper.convertToPointerIfPossible(s)});return n}getMethod({endpoint:e}){return e.declaration.fernFilepath.allParts.length>0?`${e.declaration.fernFilepath.allParts.map(t=>this.context.getMethodName(t)).join(".")}.${this.context.getMethodName(e.declaration.name)}`:this.context.getMethodName(e.declaration.name)}getRootClientFuncInvocation(e){return r.invokeFunc({func:r.typeReference({name:this.context.getClientConstructorName(),importPath:this.context.getClientImportPath()}),arguments_:e})}buildWiremockTestSetup({endpoint:e,errorCase:t}){let n="stub";return[]}callClientMethodAndAssert({endpoint:e,snippet:t}){return r.codeblock(n=>{this.writeMethodInvocation({writer:n,endpoint:e,snippet:t}),n.writeLine(),n.writeLine(),n.write("ok, countErr := "),n.writeNode(r.invokeMethod({on:r.codeblock(C),method:"Verify",arguments_:[r.invokeMethod({on:r.codeblock("stub"),method:"Request",arguments_:[],multiline:!1}),r.codeblock("1")],multiline:!1})),n.writeLine(),n.writeNode(r.invokeFunc({func:r.typeReference({name:"NoError",importPath:"github.com/stretchr/testify/require"}),arguments_:[r.codeblock("t"),r.codeblock("countErr"),r.TypeInstantiation.string("Failed to verify WireMock request was matched")],multiline:!1})),n.writeLine(),n.writeNode(r.invokeFunc({func:r.typeReference({name:"True",importPath:"github.com/stretchr/testify/require"}),arguments_:[r.codeblock("t"),r.codeblock("ok"),r.TypeInstantiation.string("WireMock request was not matched")],multiline:!1})),n.writeLine()})}};export{x as a};
|
|
2
|
+
//# sourceMappingURL=chunk-TXVHHFW3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/EndpointSnippetGenerator.ts"],"sourcesContent":["import { AbstractFormatter, Options, Scope, Severity } from \"@fern-api/browser-compatible-base-generator\";\nimport { assertNever } from \"@fern-api/core-utils\";\nimport { FernIr } from \"@fern-api/dynamic-ir-sdk\";\nimport { go } from \"@fern-api/go-ast\";\n\nimport { DynamicSnippetsGeneratorContext } from \"./context/DynamicSnippetsGeneratorContext\";\nimport { FilePropertyInfo } from \"./context/FilePropertyMapper\";\n\nconst SNIPPET_PACKAGE_NAME = \"example\";\nconst SNIPPET_IMPORT_PATH = \"fern\";\nconst SNIPPET_FUNC_NAME = \"do\";\nconst CLIENT_VAR_NAME = \"client\";\nconst TypeInst = go.TypeInstantiation;\nconst WIREMOCK_BASE_URL = \"WireMockBaseURL\";\nconst WIREMOCK_CLIENT_VAR_NAME = \"WireMockClient\";\n\nexport class EndpointSnippetGenerator {\n private context: DynamicSnippetsGeneratorContext;\n private formatter: AbstractFormatter | undefined;\n\n constructor({ context, formatter }: { context: DynamicSnippetsGeneratorContext; formatter?: AbstractFormatter }) {\n this.context = context;\n this.formatter = formatter;\n }\n\n public async generateSnippet({\n endpoint,\n request,\n options\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n request: FernIr.dynamic.EndpointSnippetRequest;\n options?: Options;\n }): Promise<string> {\n const outputWiremockTests =\n (options?.config as { outputWiremockTests?: boolean })?.outputWiremockTests ?? false;\n if (outputWiremockTests) {\n return this.generateWiremockTest({ endpoint, snippet: request });\n }\n const code = this.buildCodeBlock({ endpoint, snippet: request });\n return await code.toStringAsync({\n packageName: SNIPPET_PACKAGE_NAME,\n importPath: SNIPPET_IMPORT_PATH,\n rootImportPath: this.context.rootImportPath,\n customConfig: this.context.customConfig ?? {},\n formatter: this.formatter\n });\n }\n\n public generateSnippetSync({\n endpoint,\n request,\n options\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n request: FernIr.dynamic.EndpointSnippetRequest;\n options?: Options;\n }): string {\n const outputWiremockTests =\n (options?.config as { outputWiremockTests?: boolean })?.outputWiremockTests ?? false;\n if (outputWiremockTests) {\n return this.generateWiremockTest({ endpoint, snippet: request });\n }\n const code = this.buildCodeBlock({ endpoint, snippet: request });\n return code.toString({\n packageName: SNIPPET_PACKAGE_NAME,\n importPath: SNIPPET_IMPORT_PATH,\n rootImportPath: this.context.rootImportPath,\n customConfig: this.context.customConfig ?? {},\n formatter: this.formatter\n });\n }\n\n public async generateSnippetAst({\n endpoint,\n request,\n options\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n request: FernIr.dynamic.EndpointSnippetRequest;\n options?: Options;\n }): Promise<go.AstNode> {\n throw new Error(\"Unsupported\");\n }\n\n private generateWiremockTest({\n endpoint,\n snippet\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): string {\n const code = this.buildWiremockTestCodeBlock({ endpoint, snippet });\n return code.toString({\n packageName: \"wiremock\",\n importPath: SNIPPET_IMPORT_PATH,\n rootImportPath: this.context.rootImportPath,\n customConfig: this.context.customConfig ?? {},\n formatter: this.formatter\n });\n }\n\n private buildCodeBlock({\n endpoint,\n snippet\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): go.AstNode {\n return go.codeblock((writer) => {\n writer.writeNode(\n go.func({\n name: SNIPPET_FUNC_NAME,\n parameters: [],\n return_: [],\n body: go.codeblock((writer) => {\n writer.writeNode(this.constructClient({ endpoint, snippet }));\n writer.writeLine();\n writer.writeNode(this.callMethod({ endpoint, snippet }));\n })\n })\n );\n writer.writeNewLineIfLastLineNot();\n });\n }\n\n private buildWiremockTestCodeBlock({\n endpoint,\n snippet\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): go.AstNode {\n return go.codeblock((writer) => {\n writer.writeNode(\n go.func({\n name: \"Test\" + this.context.getTestMethodName(endpoint) + \"WithWireMock\",\n parameters: [\n go.parameter({\n name: \"t\",\n type: go.Type.pointer(go.Type.reference(this.context.getTestingTypeReference()))\n })\n ],\n return_: [],\n body: go.codeblock((writer) => {\n for (const node of this.buildWiremockTestSetup({ endpoint })) {\n writer.writeNode(node);\n writer.writeLine();\n }\n writer.writeLine();\n writer.writeNode(this.constructWiremockTestClient({ endpoint, snippet }));\n writer.writeLine();\n writer.writeNode(this.callClientMethodAndAssert({ endpoint, snippet }));\n })\n })\n );\n // Not including error case for now until I can figure out why its not matching the wiremock stub\n // writer.writeLine();\n // writer.writeNode(\n // go.func({\n // name: \"Test\" + this.context.getMethodName(endpoint.declaration.name) + \"Error\" + \"WithWireMock\",\n // parameters: [\n // go.parameter({\n // name: \"t\",\n // type: go.Type.pointer(go.Type.reference(this.context.getTestingTypeReference()))\n // })\n // ],\n // return_: [],\n // body: go.codeblock((writer) => {\n // for (const node of this.buildWiremockTestSetup({ endpoint, errorCase: true })) {\n // writer.writeNode(node);\n // writer.writeLine();\n // }\n // writer.writeLine();\n // writer.writeNode(this.constructWiremockTestClient({ endpoint, snippet }));\n // writer.writeLine();\n // writer.writeNode(this.callClientMethodAndAssert({ endpoint, snippet }));\n // })\n // })\n // );\n writer.writeNewLineIfLastLineNot();\n });\n }\n\n private constructClient({\n endpoint,\n snippet\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): go.CodeBlock {\n return go.codeblock((writer) => {\n writer.write(`${CLIENT_VAR_NAME} := `);\n writer.writeNode(this.getRootClientFuncInvocation(this.getConstructorArgs({ endpoint, snippet })));\n });\n }\n\n private constructWiremockTestClient({\n endpoint,\n snippet\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): go.CodeBlock {\n return go.codeblock((writer) => {\n writer.write(`${CLIENT_VAR_NAME} := `);\n writer.writeNode(this.getRootClientFuncInvocation(this.getWiremockTestConstructorArgs()));\n });\n }\n\n private writeMethodInvocation({\n writer,\n endpoint,\n snippet\n }: {\n writer: go.Writer;\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): void {\n const { otherArgs, requestArg } = this.getMethodArgs({ endpoint, snippet });\n\n if (requestArg != null) {\n if (requestArg instanceof go.TypeInstantiation && go.TypeInstantiation.isNop(requestArg)) {\n writer.writeNode(\n go.invokeMethod({\n on: go.codeblock(CLIENT_VAR_NAME),\n method: this.getMethod({ endpoint }),\n arguments_: [this.context.getContextTodoFunctionInvocation(), ...otherArgs, go.codeblock(\"nil\")]\n })\n );\n } else {\n writer.write(\"request := \");\n writer.writeNode(requestArg);\n writer.writeLine();\n\n const requestRef = go.codeblock(\"request\");\n writer.writeNode(\n go.invokeMethod({\n on: go.codeblock(CLIENT_VAR_NAME),\n method: this.getMethod({ endpoint }),\n arguments_: [this.context.getContextTodoFunctionInvocation(), ...otherArgs, requestRef]\n })\n );\n }\n } else {\n writer.writeNode(\n go.invokeMethod({\n on: go.codeblock(CLIENT_VAR_NAME),\n method: this.getMethod({ endpoint }),\n arguments_: [this.context.getContextTodoFunctionInvocation(), ...otherArgs]\n })\n );\n }\n }\n\n private callMethod({\n endpoint,\n snippet\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): go.CodeBlock {\n return go.codeblock((writer) => {\n this.writeMethodInvocation({ writer, endpoint, snippet });\n });\n }\n\n private getConstructorArgs({\n endpoint,\n snippet\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): go.AstNode[] {\n const args: go.AstNode[] = [];\n const baseUrlArg = this.getConstructorBaseUrlArg({\n baseUrl: snippet.baseURL,\n environment: snippet.environment\n });\n if (baseUrlArg != null) {\n args.push(baseUrlArg);\n }\n if (endpoint.auth != null) {\n if (snippet.auth != null) {\n args.push(this.getConstructorAuthArg({ auth: endpoint.auth, values: snippet.auth }));\n } else {\n this.context.errors.add({\n severity: Severity.Warning,\n message: `Auth with ${endpoint.auth.type} configuration is required for this endpoint`\n });\n }\n }\n this.context.errors.scope(Scope.Headers);\n if (this.context.ir.headers != null && snippet.headers != null) {\n args.push(...this.getConstructorHeaderArgs({ headers: this.context.ir.headers, values: snippet.headers }));\n }\n this.context.errors.unscope();\n return args;\n }\n\n private getWiremockTestConstructorArgs(): go.AstNode[] {\n return [\n go.codeblock((writer) => {\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: \"WithBaseURL\",\n importPath: this.context.getOptionImportPath()\n }),\n arguments_: [go.codeblock(WIREMOCK_BASE_URL)]\n })\n );\n })\n ];\n }\n\n private getConstructorAuthArg({\n auth,\n values\n }: {\n auth: FernIr.dynamic.Auth;\n values: FernIr.dynamic.AuthValues;\n }): go.AstNode {\n if (values.type !== auth.type) {\n this.addError(this.context.newAuthMismatchError({ auth, values }).message);\n return TypeInst.nop();\n }\n switch (auth.type) {\n case \"basic\":\n return values.type === \"basic\" ? this.getConstructorBasicAuthArg({ auth, values }) : TypeInst.nop();\n case \"bearer\":\n return values.type === \"bearer\" ? this.getConstructorBearerAuthArg({ auth, values }) : TypeInst.nop();\n case \"header\":\n return values.type === \"header\" ? this.getConstructorHeaderAuthArg({ auth, values }) : TypeInst.nop();\n case \"oauth\":\n this.addWarning(\"The Go SDK doesn't support OAuth client credentials yet\");\n return TypeInst.nop();\n case \"inferred\":\n this.addWarning(\"The Go SDK Generator does not support Inferred auth scheme yet\");\n return TypeInst.nop();\n default:\n assertNever(auth);\n }\n }\n\n private addError(message: string): void {\n this.context.errors.add({ severity: Severity.Critical, message });\n }\n\n private addWarning(message: string): void {\n this.context.errors.add({ severity: Severity.Warning, message });\n }\n\n private getConstructorBasicAuthArg({\n auth,\n values\n }: {\n auth: FernIr.dynamic.BasicAuth;\n values: FernIr.dynamic.BasicAuthValues;\n }): go.AstNode {\n return go.codeblock((writer) => {\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: \"WithBasicAuth\",\n importPath: this.context.getOptionImportPath()\n }),\n arguments_: [\n go.TypeInstantiation.string(values.username),\n go.TypeInstantiation.string(values.password)\n ]\n })\n );\n });\n }\n\n private getConstructorBaseUrlArg({\n baseUrl,\n environment\n }: {\n baseUrl: string | undefined;\n environment: FernIr.dynamic.EnvironmentValues | undefined;\n }): go.AstNode | undefined {\n const baseUrlArg = this.getBaseUrlArg({ baseUrl, environment });\n if (baseUrlArg == null) {\n return undefined;\n }\n return go.codeblock((writer) => {\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: \"WithBaseURL\",\n importPath: this.context.getOptionImportPath()\n }),\n arguments_: [baseUrlArg]\n })\n );\n });\n }\n\n private getBaseUrlArg({\n baseUrl,\n environment\n }: {\n baseUrl: string | undefined;\n environment: FernIr.dynamic.EnvironmentValues | undefined;\n }): go.AstNode | undefined {\n if (baseUrl != null && environment != null) {\n this.context.errors.add({\n severity: Severity.Critical,\n message: \"Cannot specify both baseUrl and environment options\"\n });\n return undefined;\n }\n if (baseUrl != null) {\n return go.TypeInstantiation.string(baseUrl);\n }\n if (environment != null) {\n if (this.context.isSingleEnvironmentID(environment)) {\n const typeReference = this.context.getEnvironmentTypeReferenceFromID(environment);\n if (typeReference == null) {\n this.context.errors.add({\n severity: Severity.Warning,\n message: `Environment ${JSON.stringify(environment)} was not found`\n });\n return undefined;\n }\n return go.TypeInstantiation.reference(typeReference);\n }\n if (this.context.isMultiEnvironmentValues(environment)) {\n this.context.errors.add({\n severity: Severity.Warning,\n message:\n \"The Go SDK doesn't support a multi-environment client option yet; use the baseUrl option instead\"\n });\n }\n }\n return undefined;\n }\n\n private getConstructorBearerAuthArg({\n auth,\n values\n }: {\n auth: FernIr.dynamic.BearerAuth;\n values: FernIr.dynamic.BearerAuthValues;\n }): go.AstNode {\n return go.codeblock((writer) => {\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: `With${auth.token.pascalCase.unsafeName}`,\n importPath: this.context.getOptionImportPath()\n }),\n arguments_: [go.TypeInstantiation.string(values.token)]\n })\n );\n });\n }\n\n private getConstructorHeaderAuthArg({\n auth,\n values\n }: {\n auth: FernIr.dynamic.HeaderAuth;\n values: FernIr.dynamic.HeaderAuthValues;\n }): go.AstNode {\n return go.codeblock((writer) => {\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: `With${auth.header.name.name.pascalCase.unsafeName}`,\n importPath: this.context.getOptionImportPath()\n }),\n arguments_: [\n this.context.dynamicTypeInstantiationMapper.convert({\n typeReference: auth.header.typeReference,\n value: values.value\n })\n ]\n })\n );\n });\n }\n\n private getConstructorHeaderArgs({\n headers,\n values\n }: {\n headers: FernIr.dynamic.NamedParameter[];\n values: FernIr.dynamic.Values;\n }): go.AstNode[] {\n const args: go.AstNode[] = [];\n for (const header of headers) {\n const arg = this.getConstructorHeaderArg({ header, value: values.value });\n if (arg != null) {\n args.push(arg);\n }\n }\n return args;\n }\n\n private getConstructorHeaderArg({\n header,\n value\n }: {\n header: FernIr.dynamic.NamedParameter;\n value: unknown;\n }): go.AstNode | undefined {\n const typeInstantiation = this.context.dynamicTypeInstantiationMapper.convert({\n typeReference: header.typeReference,\n value\n });\n if (go.TypeInstantiation.isNop(typeInstantiation)) {\n // Literal header values (e.g. \"X-API-Version\") should not be included in the\n // client constructor.\n return undefined;\n }\n return go.codeblock((writer) => {\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: `With${header.name.name.pascalCase.unsafeName}`,\n importPath: this.context.getOptionImportPath()\n }),\n arguments_: [typeInstantiation]\n })\n );\n });\n }\n\n private getMethodArgs({\n endpoint,\n snippet\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): { otherArgs: go.AstNode[]; requestArg: go.AstNode | undefined } {\n switch (endpoint.request.type) {\n case \"inlined\":\n return this.getMethodArgsForInlinedRequest({ request: endpoint.request, snippet });\n case \"body\":\n return this.getMethodArgsForBodyRequest({ request: endpoint.request, snippet });\n default:\n assertNever(endpoint.request);\n }\n }\n\n private getMethodArgsForBodyRequest({\n request,\n snippet\n }: {\n request: FernIr.dynamic.BodyRequest;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): { otherArgs: go.AstNode[]; requestArg: go.AstNode | undefined } {\n const otherArgs: go.AstNode[] = [];\n\n this.context.errors.scope(Scope.PathParameters);\n const pathParameters = [...(this.context.ir.pathParameters ?? []), ...(request.pathParameters ?? [])];\n if (pathParameters.length > 0) {\n otherArgs.push(\n ...this.getPathParameters({ namedParameters: pathParameters, snippet }).map((field) => field.value)\n );\n }\n this.context.errors.unscope();\n\n this.context.errors.scope(Scope.RequestBody);\n const requestArg: go.AstNode | undefined =\n request.body != null\n ? this.getBodyRequestArg({ body: request.body, value: snippet.requestBody })\n : undefined;\n this.context.errors.unscope();\n\n return { otherArgs, requestArg };\n }\n\n private getBodyRequestArg({\n body,\n value\n }: {\n body: FernIr.dynamic.ReferencedRequestBodyType;\n value: unknown;\n }): go.TypeInstantiation {\n switch (body.type) {\n case \"bytes\": {\n return this.getBytesBodyRequestArg({ value });\n }\n case \"typeReference\":\n return this.context.dynamicTypeInstantiationMapper.convert({ typeReference: body.value, value });\n default:\n assertNever(body);\n }\n }\n\n private getBytesBodyRequestArg({ value }: { value: unknown }): go.TypeInstantiation {\n if (typeof value !== \"string\") {\n this.context.errors.add({\n severity: Severity.Critical,\n message: `Expected bytes value to be a string, got ${typeof value}`\n });\n return go.TypeInstantiation.nop();\n }\n return go.TypeInstantiation.bytes(value as string);\n }\n\n private getMethodArgsForInlinedRequest({\n request,\n snippet\n }: {\n request: FernIr.dynamic.InlinedRequest;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): { otherArgs: go.AstNode[]; requestArg: go.AstNode | undefined } {\n const otherArgs: go.AstNode[] = [];\n\n const { inlinePathParameters, inlineFileProperties } = {\n inlinePathParameters: this.context.customConfig?.inlinePathParameters ?? true,\n inlineFileProperties: this.context.customConfig?.inlineFileProperties ?? true\n };\n\n this.context.errors.scope(Scope.PathParameters);\n const pathParameterFields: go.StructField[] = [];\n const pathParameters = [...(this.context.ir.pathParameters ?? []), ...(request.pathParameters ?? [])];\n if (pathParameters.length > 0) {\n pathParameterFields.push(\n ...this.getPathParameters({\n namedParameters: pathParameters,\n snippet\n })\n );\n }\n this.context.errors.unscope();\n\n this.context.errors.scope(Scope.RequestBody);\n const filePropertyInfo = this.getFilePropertyInfo({ request, snippet });\n this.context.errors.unscope();\n\n if (!this.context.includePathParametersInWrappedRequest({ request, inlinePathParameters })) {\n otherArgs.push(...pathParameterFields.map((field) => field.value));\n }\n\n if (!inlineFileProperties) {\n otherArgs.push(...filePropertyInfo.fileFields.map((field) => field.value));\n }\n\n const requestArg: go.AstNode | undefined = this.context.needsRequestParameter({\n request,\n inlinePathParameters,\n inlineFileProperties\n })\n ? this.getInlinedRequestArg({\n request,\n snippet,\n pathParameterFields: this.context.includePathParametersInWrappedRequest({\n request,\n inlinePathParameters\n })\n ? pathParameterFields\n : [],\n filePropertyInfo\n })\n : undefined;\n return { otherArgs, requestArg };\n }\n\n private getFilePropertyInfo({\n request,\n snippet\n }: {\n request: FernIr.dynamic.InlinedRequest;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): FilePropertyInfo {\n if (request.body == null || !this.context.isFileUploadRequestBody(request.body)) {\n return {\n fileFields: [],\n bodyPropertyFields: []\n };\n }\n return this.context.filePropertyMapper.getFilePropertyInfo({\n body: request.body,\n value: snippet.requestBody\n });\n }\n\n private getInlinedRequestArg({\n request,\n snippet,\n pathParameterFields,\n filePropertyInfo\n }: {\n request: FernIr.dynamic.InlinedRequest;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n pathParameterFields: go.StructField[];\n filePropertyInfo: FilePropertyInfo;\n }): go.TypeInstantiation {\n this.context.errors.scope(Scope.QueryParameters);\n const queryParameters = this.context.associateQueryParametersByWireValue({\n parameters: request.queryParameters ?? [],\n values: snippet.queryParameters ?? {}\n });\n const queryParameterFields = queryParameters.map((queryParameter) => ({\n name: queryParameter.name.name.pascalCase.unsafeName,\n value: this.context.dynamicTypeInstantiationMapper.convert(queryParameter)\n }));\n this.context.errors.unscope();\n\n this.context.errors.scope(Scope.Headers);\n const headers = this.context.associateByWireValue({\n parameters: request.headers ?? [],\n values: snippet.headers ?? {}\n });\n const headerFields = headers.map((header) => ({\n name: header.name.name.pascalCase.unsafeName,\n value: this.context.dynamicTypeInstantiationMapper.convert(header)\n }));\n this.context.errors.unscope();\n\n this.context.errors.scope(Scope.RequestBody);\n const requestBodyFields =\n request.body != null\n ? this.getInlinedRequestBodyStructFields({\n body: request.body,\n value: snippet.requestBody,\n filePropertyInfo\n })\n : [];\n this.context.errors.unscope();\n\n return go.TypeInstantiation.structPointer({\n typeReference: go.typeReference({\n name: this.context.getMethodName(request.declaration.name),\n importPath: this.context.getImportPathForRequest(request.declaration.fernFilepath)\n }),\n fields: [...pathParameterFields, ...queryParameterFields, ...headerFields, ...requestBodyFields]\n });\n }\n\n private getInlinedRequestBodyStructFields({\n body,\n value,\n filePropertyInfo\n }: {\n body: FernIr.dynamic.InlinedRequestBody;\n value: unknown;\n filePropertyInfo: FilePropertyInfo;\n }): go.StructField[] {\n switch (body.type) {\n case \"properties\":\n return this.getInlinedRequestBodyPropertyStructFields({ parameters: body.value, value });\n case \"referenced\":\n return [this.getReferencedRequestBodyPropertyStructField({ body, value })];\n case \"fileUpload\":\n return this.getFileUploadRequestBodyStructFields({ filePropertyInfo });\n default:\n assertNever(body);\n }\n }\n\n private getFileUploadRequestBodyStructFields({\n filePropertyInfo\n }: {\n filePropertyInfo: FilePropertyInfo;\n }): go.StructField[] {\n if (this.context.customConfig?.inlineFileProperties) {\n return [...filePropertyInfo.fileFields, ...filePropertyInfo.bodyPropertyFields];\n }\n return filePropertyInfo.bodyPropertyFields;\n }\n\n private getReferencedRequestBodyPropertyStructField({\n body,\n value\n }: {\n body: FernIr.dynamic.ReferencedRequestBody;\n value: unknown;\n }): go.StructField {\n return {\n name: this.context.getTypeName(body.bodyKey),\n value: this.getReferencedRequestBodyPropertyTypeInstantiation({ body: body.bodyType, value })\n };\n }\n\n private getReferencedRequestBodyPropertyTypeInstantiation({\n body,\n value\n }: {\n body: FernIr.dynamic.ReferencedRequestBodyType;\n value: unknown;\n }): go.TypeInstantiation {\n switch (body.type) {\n case \"bytes\":\n return this.getBytesBodyRequestArg({ value });\n case \"typeReference\":\n return this.context.dynamicTypeInstantiationMapper.convert({ typeReference: body.value, value });\n default:\n assertNever(body);\n }\n }\n\n private getInlinedRequestBodyPropertyStructFields({\n parameters,\n value\n }: {\n parameters: FernIr.dynamic.NamedParameter[];\n value: unknown;\n }): go.StructField[] {\n const fields: go.StructField[] = [];\n\n const bodyProperties = this.context.associateByWireValue({\n parameters,\n values: this.context.getRecord(value) ?? {}\n });\n for (const parameter of bodyProperties) {\n fields.push({\n name: this.context.getTypeName(parameter.name.name),\n value: this.context.dynamicTypeInstantiationMapper.convert(parameter)\n });\n }\n\n return fields;\n }\n\n private getPathParameters({\n namedParameters,\n snippet\n }: {\n namedParameters: FernIr.dynamic.NamedParameter[];\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): go.StructField[] {\n const args: go.StructField[] = [];\n\n const pathParameters = this.context.associateByWireValue({\n parameters: namedParameters,\n values: snippet.pathParameters ?? {}\n });\n for (const parameter of pathParameters) {\n args.push({\n name: this.context.getTypeName(parameter.name.name),\n value: this.context.dynamicTypeInstantiationMapper.convertToPointerIfPossible(parameter)\n });\n }\n\n return args;\n }\n\n private getMethod({ endpoint }: { endpoint: FernIr.dynamic.Endpoint }): string {\n if (endpoint.declaration.fernFilepath.allParts.length > 0) {\n return `${endpoint.declaration.fernFilepath.allParts\n .map((val) => this.context.getMethodName(val))\n .join(\".\")}.${this.context.getMethodName(endpoint.declaration.name)}`;\n }\n return this.context.getMethodName(endpoint.declaration.name);\n }\n\n private getRootClientFuncInvocation(arguments_: go.AstNode[]): go.FuncInvocation {\n return go.invokeFunc({\n func: go.typeReference({\n name: this.context.getClientConstructorName(),\n importPath: this.context.getClientImportPath()\n }),\n arguments_\n });\n }\n\n private buildWiremockTestSetup({\n endpoint,\n errorCase\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n errorCase?: boolean;\n }): go.AstNode[] {\n const ENDPOINT_STUB_NAME = \"stub\";\n const usedSharedMainTest = true;\n return [\n ...(!usedSharedMainTest\n ? [\n // Initialize context\n go.codeblock((writer) => {\n writer.write(\"ctx := \");\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: \"Background\",\n importPath: \"context\"\n }),\n arguments_: [],\n multiline: false\n })\n );\n }),\n\n // Start WireMock container\n go.codeblock((writer) => {\n writer.write(`container, containerErr := `);\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: \"RunContainerAndStopOnCleanup\",\n importPath: \"github.com/wiremock/wiremock-testcontainers-go\"\n }),\n arguments_: [\n go.codeblock(\"ctx\"),\n go.codeblock(\"t\"),\n go.invokeFunc({\n func: go.typeReference({\n name: \"WithImage\",\n importPath: \"github.com/wiremock/wiremock-testcontainers-go\"\n }),\n arguments_: [\n go.TypeInstantiation.string(\"docker.io/wiremock/wiremock:3.9.1\")\n ],\n multiline: false\n })\n ],\n multiline: true\n })\n );\n }),\n\n // Check for container error\n go.codeblock((writer) => {\n writer.write(\"if containerErr != nil {\");\n writer.writeLine();\n writer.write(\" t.Fatal(containerErr)\");\n writer.writeLine();\n writer.write(\"}\");\n }),\n\n // Get WireMock URL from container\n go.codeblock((writer) => {\n writer.write(`${WIREMOCK_BASE_URL}, endpointErr := `);\n writer.writeNode(\n go.invokeMethod({\n on: go.codeblock(\"container\"),\n method: \"Endpoint\",\n arguments_: [go.codeblock(\"ctx\"), go.TypeInstantiation.string(\"\")],\n multiline: false\n })\n );\n }),\n\n go.invokeFunc({\n func: go.typeReference({\n name: \"NoError\",\n importPath: \"github.com/stretchr/testify/require\"\n }),\n arguments_: [\n go.codeblock(\"t\"),\n go.codeblock(\"endpointErr\"),\n go.TypeInstantiation.string(\"Failed to get WireMock container endpoint\")\n ],\n multiline: false\n }),\n\n go.codeblock((writer) => {\n writer.write(`${WIREMOCK_BASE_URL} = \"http://\" + ${WIREMOCK_BASE_URL}`);\n }),\n\n // Get WireMock client from container\n go.codeblock((writer) => {\n writer.write(`${WIREMOCK_CLIENT_VAR_NAME} := `);\n writer.writeNode(\n go.selector({\n on: go.codeblock(\"container\"),\n selector: go.codeblock(\"Client\")\n })\n );\n })\n ]\n : [])\n ];\n }\n\n private callClientMethodAndAssert({\n endpoint,\n snippet\n }: {\n endpoint: FernIr.dynamic.Endpoint;\n snippet: FernIr.dynamic.EndpointSnippetRequest;\n }): go.CodeBlock {\n return go.codeblock((writer) => {\n // IMPORTANT: currently not capturing the response/error values since its not trivial to determine\n // the number of return values for the method using the dynamic ir\n\n // Call the method and capture response and error\n // writer.write(\"_, invocationErr := \");\n this.writeMethodInvocation({ writer, endpoint, snippet });\n writer.writeLine();\n writer.writeLine();\n\n // Verify WireMock request was matched\n writer.write(\"ok, countErr := \");\n writer.writeNode(\n go.invokeMethod({\n on: go.codeblock(WIREMOCK_CLIENT_VAR_NAME),\n method: \"Verify\",\n arguments_: [\n go.invokeMethod({\n on: go.codeblock(\"stub\"),\n method: \"Request\",\n arguments_: [],\n multiline: false\n }),\n go.codeblock(\"1\")\n ],\n multiline: false\n })\n );\n writer.writeLine();\n\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: \"NoError\",\n importPath: \"github.com/stretchr/testify/require\"\n }),\n arguments_: [\n go.codeblock(\"t\"),\n go.codeblock(\"countErr\"),\n go.TypeInstantiation.string(\"Failed to verify WireMock request was matched\")\n ],\n multiline: false\n })\n );\n writer.writeLine();\n\n writer.writeNode(\n go.invokeFunc({\n func: go.typeReference({\n name: \"True\",\n importPath: \"github.com/stretchr/testify/require\"\n }),\n arguments_: [\n go.codeblock(\"t\"),\n go.codeblock(\"ok\"),\n go.TypeInstantiation.string(\"WireMock request was not matched\")\n ],\n multiline: false\n })\n );\n writer.writeLine();\n\n // IMPORTANT: currently not asserting that the call succeeded since its not trivial to determine\n // the number of return values for the method using the dynamic ir\n\n // Verify the call succeeded (may not assert this at all and only assert the WireMock request was matched)\n // Since we don't necessarily have valid response bodies in our WireMock stubs (so type casting will fail)\n // writer.writeNode(\n // go.invokeFunc({\n // func: go.typeReference({\n // name: \"NoError\",\n // importPath: \"github.com/stretchr/testify/require\"\n // }),\n // arguments_: [\n // go.codeblock(\"t\"),\n // go.codeblock(\"invocationErr\"),\n // go.TypeInstantiation.string(`${this.getMethod({ endpoint })} call should succeed with WireMock`)\n // ],\n // multiline: false\n // })\n // );\n // writer.writeLine();\n });\n }\n}\n"],"mappings":"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","names":["init_process","init_buffer","SNIPPET_PACKAGE_NAME","SNIPPET_IMPORT_PATH","SNIPPET_FUNC_NAME","CLIENT_VAR_NAME","TypeInst","go_exports","WIREMOCK_BASE_URL","WIREMOCK_CLIENT_VAR_NAME","EndpointSnippetGenerator","context","formatter","__publicField","endpoint","request","options","_a","_b","_c","snippet","writer","node","otherArgs","requestArg","requestRef","args","baseUrlArg","Severity","Scope","auth","values","assertNever","message","baseUrl","environment","typeReference","headers","header","arg","value","typeInstantiation","pathParameters","field","body","_d","_e","_f","inlinePathParameters","inlineFileProperties","pathParameterFields","filePropertyInfo","queryParameterFields","queryParameter","headerFields","requestBodyFields","parameters","fields","bodyProperties","parameter","namedParameters","val","arguments_","errorCase","ENDPOINT_STUB_NAME"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-B2A7QNZM.js";import"../chunk-DVDVP26D.js";import"../chunk-3Z2URLHB.js";import"../chunk-ZNTXZ3YV.js";import"../chunk-SVPRIX53.js";import"../chunk-JHIUGKJ4.js";export{a as DynamicSnippetsGeneratorContext};
|
|
2
2
|
//# sourceMappingURL=DynamicSnippetsGeneratorContext.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-DVDVP26D.js";import"../chunk-3Z2URLHB.js";import"../chunk-JHIUGKJ4.js";export{a as DynamicTypeInstantiationMapper};
|
|
2
2
|
//# sourceMappingURL=DynamicTypeInstantiationMapper.js.map
|
package/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as n}from"./chunk-
|
|
1
|
+
import{a as n}from"./chunk-MYN2HZVH.js";import"./chunk-TXVHHFW3.js";import"./chunk-B2A7QNZM.js";import"./chunk-DVDVP26D.js";import"./chunk-3Z2URLHB.js";import"./chunk-ZNTXZ3YV.js";import"./chunk-SVPRIX53.js";import{f as e,g as r}from"./chunk-JHIUGKJ4.js";e();r();export{n as DynamicSnippetsGenerator};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
package/esm/chunk-ADZ6FCNI.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as p,d}from"./chunk-FTDA4363.js";import{e as A,f as R,g as N,h as m,j as n}from"./chunk-JHIUGKJ4.js";R();N();var b="example",k="fern",T="do",I="client",l=n.TypeInstantiation,C="WireMockBaseURL",w="WireMockClient",x=class{constructor({context:e,formatter:t}){A(this,"context");A(this,"formatter");this.context=e,this.formatter=t}async generateSnippet({endpoint:e,request:t,options:r}){var s,a,c;return((a=(s=r==null?void 0:r.config)==null?void 0:s.outputWiremockTests)!=null?a:!1)?this.generateWiremockTest({endpoint:e,snippet:t}):await this.buildCodeBlock({endpoint:e,snippet:t}).toStringAsync({packageName:b,importPath:k,rootImportPath:this.context.rootImportPath,customConfig:(c=this.context.customConfig)!=null?c:{},formatter:this.formatter})}generateSnippetSync({endpoint:e,request:t,options:r}){var s,a,c;return((a=(s=r==null?void 0:r.config)==null?void 0:s.outputWiremockTests)!=null?a:!1)?this.generateWiremockTest({endpoint:e,snippet:t}):this.buildCodeBlock({endpoint:e,snippet:t}).toString({packageName:b,importPath:k,rootImportPath:this.context.rootImportPath,customConfig:(c=this.context.customConfig)!=null?c:{},formatter:this.formatter})}generateWiremockTest({endpoint:e,snippet:t}){var o;return this.buildWiremockTestCodeBlock({endpoint:e,snippet:t}).toString({packageName:"wiremock",importPath:k,rootImportPath:this.context.rootImportPath,customConfig:(o=this.context.customConfig)!=null?o:{},formatter:this.formatter})}buildCodeBlock({endpoint:e,snippet:t}){return n.codeblock(r=>{r.writeNode(n.func({name:T,parameters:[],return_:[],body:n.codeblock(o=>{o.writeNode(this.constructClient({endpoint:e,snippet:t})),o.writeLine(),o.writeNode(this.callMethod({endpoint:e,snippet:t}))})})),r.writeNewLineIfLastLineNot()})}buildWiremockTestCodeBlock({endpoint:e,snippet:t}){return n.codeblock(r=>{r.writeNode(n.func({name:"Test"+this.context.getTestMethodName(e)+"WithWireMock",parameters:[n.parameter({name:"t",type:n.Type.pointer(n.Type.reference(this.context.getTestingTypeReference()))})],return_:[],body:n.codeblock(o=>{for(let i of this.buildWiremockTestSetup({endpoint:e}))o.writeNode(i),o.writeLine();o.writeLine(),o.writeNode(this.constructWiremockTestClient({endpoint:e,snippet:t})),o.writeLine(),o.writeNode(this.callClientMethodAndAssert({endpoint:e,snippet:t}))})})),r.writeNewLineIfLastLineNot()})}constructClient({endpoint:e,snippet:t}){return n.codeblock(r=>{r.write(`${I} := `),r.writeNode(this.getRootClientFuncInvocation(this.getConstructorArgs({endpoint:e,snippet:t})))})}constructWiremockTestClient({endpoint:e,snippet:t}){return n.codeblock(r=>{r.write(`${I} := `),r.writeNode(this.getRootClientFuncInvocation(this.getWiremockTestConstructorArgs()))})}writeMethodInvocation({writer:e,endpoint:t,snippet:r}){let{otherArgs:o,requestArg:i}=this.getMethodArgs({endpoint:t,snippet:r});if(i!=null)if(i instanceof n.TypeInstantiation&&n.TypeInstantiation.isNop(i))e.writeNode(n.invokeMethod({on:n.codeblock(I),method:this.getMethod({endpoint:t}),arguments_:[this.context.getContextTodoFunctionInvocation(),...o,n.codeblock("nil")]}));else{e.write("request := "),e.writeNode(i),e.writeLine();let s=n.codeblock("request");e.writeNode(n.invokeMethod({on:n.codeblock(I),method:this.getMethod({endpoint:t}),arguments_:[this.context.getContextTodoFunctionInvocation(),...o,s]}))}else e.writeNode(n.invokeMethod({on:n.codeblock(I),method:this.getMethod({endpoint:t}),arguments_:[this.context.getContextTodoFunctionInvocation(),...o]}))}callMethod({endpoint:e,snippet:t}){return n.codeblock(r=>{this.writeMethodInvocation({writer:r,endpoint:e,snippet:t})})}getConstructorArgs({endpoint:e,snippet:t}){let r=[],o=this.getConstructorBaseUrlArg({baseUrl:t.baseURL,environment:t.environment});return o!=null&&r.push(o),e.auth!=null&&(t.auth!=null?r.push(this.getConstructorAuthArg({auth:e.auth,values:t.auth})):this.context.errors.add({severity:p.Warning,message:`Auth with ${e.auth.type} configuration is required for this endpoint`})),this.context.errors.scope(d.Headers),this.context.ir.headers!=null&&t.headers!=null&&r.push(...this.getConstructorHeaderArgs({headers:this.context.ir.headers,values:t.headers})),this.context.errors.unscope(),r}getWiremockTestConstructorArgs(){return[n.codeblock(e=>{e.writeNode(n.invokeFunc({func:n.typeReference({name:"WithBaseURL",importPath:this.context.getOptionImportPath()}),arguments_:[n.codeblock(C)]}))})]}getConstructorAuthArg({auth:e,values:t}){if(t.type!==e.type)return this.addError(this.context.newAuthMismatchError({auth:e,values:t}).message),l.nop();switch(e.type){case"basic":return t.type==="basic"?this.getConstructorBasicAuthArg({auth:e,values:t}):l.nop();case"bearer":return t.type==="bearer"?this.getConstructorBearerAuthArg({auth:e,values:t}):l.nop();case"header":return t.type==="header"?this.getConstructorHeaderAuthArg({auth:e,values:t}):l.nop();case"oauth":return this.addWarning("The Go SDK doesn't support OAuth client credentials yet"),l.nop();case"inferred":return this.addWarning("The Go SDK Generator does not support Inferred auth scheme yet"),l.nop();default:m(e)}}addError(e){this.context.errors.add({severity:p.Critical,message:e})}addWarning(e){this.context.errors.add({severity:p.Warning,message:e})}getConstructorBasicAuthArg({auth:e,values:t}){return n.codeblock(r=>{r.writeNode(n.invokeFunc({func:n.typeReference({name:"WithBasicAuth",importPath:this.context.getOptionImportPath()}),arguments_:[n.TypeInstantiation.string(t.username),n.TypeInstantiation.string(t.password)]}))})}getConstructorBaseUrlArg({baseUrl:e,environment:t}){let r=this.getBaseUrlArg({baseUrl:e,environment:t});if(r!=null)return n.codeblock(o=>{o.writeNode(n.invokeFunc({func:n.typeReference({name:"WithBaseURL",importPath:this.context.getOptionImportPath()}),arguments_:[r]}))})}getBaseUrlArg({baseUrl:e,environment:t}){if(e!=null&&t!=null){this.context.errors.add({severity:p.Critical,message:"Cannot specify both baseUrl and environment options"});return}if(e!=null)return n.TypeInstantiation.string(e);if(t!=null){if(this.context.isSingleEnvironmentID(t)){let r=this.context.getEnvironmentTypeReferenceFromID(t);if(r==null){this.context.errors.add({severity:p.Warning,message:`Environment ${JSON.stringify(t)} was not found`});return}return n.TypeInstantiation.reference(r)}this.context.isMultiEnvironmentValues(t)&&this.context.errors.add({severity:p.Warning,message:"The Go SDK doesn't support a multi-environment client option yet; use the baseUrl option instead"})}}getConstructorBearerAuthArg({auth:e,values:t}){return n.codeblock(r=>{r.writeNode(n.invokeFunc({func:n.typeReference({name:`With${e.token.pascalCase.unsafeName}`,importPath:this.context.getOptionImportPath()}),arguments_:[n.TypeInstantiation.string(t.token)]}))})}getConstructorHeaderAuthArg({auth:e,values:t}){return n.codeblock(r=>{r.writeNode(n.invokeFunc({func:n.typeReference({name:`With${e.header.name.name.pascalCase.unsafeName}`,importPath:this.context.getOptionImportPath()}),arguments_:[this.context.dynamicTypeInstantiationMapper.convert({typeReference:e.header.typeReference,value:t.value})]}))})}getConstructorHeaderArgs({headers:e,values:t}){let r=[];for(let o of e){let i=this.getConstructorHeaderArg({header:o,value:t.value});i!=null&&r.push(i)}return r}getConstructorHeaderArg({header:e,value:t}){let r=this.context.dynamicTypeInstantiationMapper.convert({typeReference:e.typeReference,value:t});if(!n.TypeInstantiation.isNop(r))return n.codeblock(o=>{o.writeNode(n.invokeFunc({func:n.typeReference({name:`With${e.name.name.pascalCase.unsafeName}`,importPath:this.context.getOptionImportPath()}),arguments_:[r]}))})}getMethodArgs({endpoint:e,snippet:t}){switch(e.request.type){case"inlined":return this.getMethodArgsForInlinedRequest({request:e.request,snippet:t});case"body":return this.getMethodArgsForBodyRequest({request:e.request,snippet:t});default:m(e.request)}}getMethodArgsForBodyRequest({request:e,snippet:t}){var s,a;let r=[];this.context.errors.scope(d.PathParameters);let o=[...(s=this.context.ir.pathParameters)!=null?s:[],...(a=e.pathParameters)!=null?a:[]];o.length>0&&r.push(...this.getPathParameters({namedParameters:o,snippet:t}).map(c=>c.value)),this.context.errors.unscope(),this.context.errors.scope(d.RequestBody);let i=e.body!=null?this.getBodyRequestArg({body:e.body,value:t.requestBody}):void 0;return this.context.errors.unscope(),{otherArgs:r,requestArg:i}}getBodyRequestArg({body:e,value:t}){switch(e.type){case"bytes":return this.getBytesBodyRequestArg({value:t});case"typeReference":return this.context.dynamicTypeInstantiationMapper.convert({typeReference:e.value,value:t});default:m(e)}}getBytesBodyRequestArg({value:e}){return typeof e!="string"?(this.context.errors.add({severity:p.Critical,message:`Expected bytes value to be a string, got ${typeof e}`}),n.TypeInstantiation.nop()):n.TypeInstantiation.bytes(e)}getMethodArgsForInlinedRequest({request:e,snippet:t}){var h,g,y,f,u,P;let r=[],{inlinePathParameters:o,inlineFileProperties:i}={inlinePathParameters:(g=(h=this.context.customConfig)==null?void 0:h.inlinePathParameters)!=null?g:!0,inlineFileProperties:(f=(y=this.context.customConfig)==null?void 0:y.inlineFileProperties)!=null?f:!0};this.context.errors.scope(d.PathParameters);let s=[],a=[...(u=this.context.ir.pathParameters)!=null?u:[],...(P=e.pathParameters)!=null?P:[]];a.length>0&&s.push(...this.getPathParameters({namedParameters:a,snippet:t})),this.context.errors.unscope(),this.context.errors.scope(d.RequestBody);let c=this.getFilePropertyInfo({request:e,snippet:t});this.context.errors.unscope(),this.context.includePathParametersInWrappedRequest({request:e,inlinePathParameters:o})||r.push(...s.map(v=>v.value)),i||r.push(...c.fileFields.map(v=>v.value));let F=this.context.needsRequestParameter({request:e,inlinePathParameters:o,inlineFileProperties:i})?this.getInlinedRequestArg({request:e,snippet:t,pathParameterFields:this.context.includePathParametersInWrappedRequest({request:e,inlinePathParameters:o})?s:[],filePropertyInfo:c}):void 0;return{otherArgs:r,requestArg:F}}getFilePropertyInfo({request:e,snippet:t}){return e.body==null||!this.context.isFileUploadRequestBody(e.body)?{fileFields:[],bodyPropertyFields:[]}:this.context.filePropertyMapper.getFilePropertyInfo({body:e.body,value:t.requestBody})}getInlinedRequestArg({request:e,snippet:t,pathParameterFields:r,filePropertyInfo:o}){var h,g,y,f;this.context.errors.scope(d.QueryParameters);let s=this.context.associateQueryParametersByWireValue({parameters:(h=e.queryParameters)!=null?h:[],values:(g=t.queryParameters)!=null?g:{}}).map(u=>({name:u.name.name.pascalCase.unsafeName,value:this.context.dynamicTypeInstantiationMapper.convert(u)}));this.context.errors.unscope(),this.context.errors.scope(d.Headers);let c=this.context.associateByWireValue({parameters:(y=e.headers)!=null?y:[],values:(f=t.headers)!=null?f:{}}).map(u=>({name:u.name.name.pascalCase.unsafeName,value:this.context.dynamicTypeInstantiationMapper.convert(u)}));this.context.errors.unscope(),this.context.errors.scope(d.RequestBody);let F=e.body!=null?this.getInlinedRequestBodyStructFields({body:e.body,value:t.requestBody,filePropertyInfo:o}):[];return this.context.errors.unscope(),n.TypeInstantiation.structPointer({typeReference:n.typeReference({name:this.context.getMethodName(e.declaration.name),importPath:this.context.getImportPathForRequest(e.declaration.fernFilepath)}),fields:[...r,...s,...c,...F]})}getInlinedRequestBodyStructFields({body:e,value:t,filePropertyInfo:r}){switch(e.type){case"properties":return this.getInlinedRequestBodyPropertyStructFields({parameters:e.value,value:t});case"referenced":return[this.getReferencedRequestBodyPropertyStructField({body:e,value:t})];case"fileUpload":return this.getFileUploadRequestBodyStructFields({filePropertyInfo:r});default:m(e)}}getFileUploadRequestBodyStructFields({filePropertyInfo:e}){var t;return(t=this.context.customConfig)!=null&&t.inlineFileProperties?[...e.fileFields,...e.bodyPropertyFields]:e.bodyPropertyFields}getReferencedRequestBodyPropertyStructField({body:e,value:t}){return{name:this.context.getTypeName(e.bodyKey),value:this.getReferencedRequestBodyPropertyTypeInstantiation({body:e.bodyType,value:t})}}getReferencedRequestBodyPropertyTypeInstantiation({body:e,value:t}){switch(e.type){case"bytes":return this.getBytesBodyRequestArg({value:t});case"typeReference":return this.context.dynamicTypeInstantiationMapper.convert({typeReference:e.value,value:t});default:m(e)}}getInlinedRequestBodyPropertyStructFields({parameters:e,value:t}){var i;let r=[],o=this.context.associateByWireValue({parameters:e,values:(i=this.context.getRecord(t))!=null?i:{}});for(let s of o)r.push({name:this.context.getTypeName(s.name.name),value:this.context.dynamicTypeInstantiationMapper.convert(s)});return r}getPathParameters({namedParameters:e,snippet:t}){var i;let r=[],o=this.context.associateByWireValue({parameters:e,values:(i=t.pathParameters)!=null?i:{}});for(let s of o)r.push({name:this.context.getTypeName(s.name.name),value:this.context.dynamicTypeInstantiationMapper.convertToPointerIfPossible(s)});return r}getMethod({endpoint:e}){return e.declaration.fernFilepath.allParts.length>0?`${e.declaration.fernFilepath.allParts.map(t=>this.context.getMethodName(t)).join(".")}.${this.context.getMethodName(e.declaration.name)}`:this.context.getMethodName(e.declaration.name)}getRootClientFuncInvocation(e){return n.invokeFunc({func:n.typeReference({name:this.context.getClientConstructorName(),importPath:this.context.getClientImportPath()}),arguments_:e})}buildWiremockTestSetup({endpoint:e,errorCase:t}){let r="stub";return[]}callClientMethodAndAssert({endpoint:e,snippet:t}){return n.codeblock(r=>{this.writeMethodInvocation({writer:r,endpoint:e,snippet:t}),r.writeLine(),r.writeLine(),r.write("ok, countErr := "),r.writeNode(n.invokeMethod({on:n.codeblock(w),method:"Verify",arguments_:[n.invokeMethod({on:n.codeblock("stub"),method:"Request",arguments_:[],multiline:!1}),n.codeblock("1")],multiline:!1})),r.writeLine(),r.writeNode(n.invokeFunc({func:n.typeReference({name:"NoError",importPath:"github.com/stretchr/testify/require"}),arguments_:[n.codeblock("t"),n.codeblock("countErr"),n.TypeInstantiation.string("Failed to verify WireMock request was matched")],multiline:!1})),r.writeLine(),r.writeNode(n.invokeFunc({func:n.typeReference({name:"True",importPath:"github.com/stretchr/testify/require"}),arguments_:[n.codeblock("t"),n.codeblock("ok"),n.TypeInstantiation.string("WireMock request was not matched")],multiline:!1})),r.writeLine()})}};export{x as a};
|
|
2
|
-
//# sourceMappingURL=chunk-ADZ6FCNI.js.map
|