55 * LICENSE file in the root directory of this source tree.
66 * ========================================================================== */
77
8- import React , { useState , useEffect } from "react" ;
8+ import React , { useEffect , useState } from "react" ;
99
1010import useDocusaurusContext from "@docusaurus/useDocusaurusContext" ;
11+ import { postman2har } from "@har-sdk/postman" ;
1112import ApiCodeBlock from "@theme/ApiExplorer/ApiCodeBlock" ;
1213import buildPostmanRequest from "@theme/ApiExplorer/buildPostmanRequest" ;
1314import CodeTabs from "@theme/ApiExplorer/CodeTabs" ;
1415import { useTypedSelector } from "@theme/ApiItem/hooks" ;
16+ import HTTPSnippet from "httpsnippet-lite" ;
1517import cloneDeep from "lodash/cloneDeep" ;
16- import codegen from "postman-code-generators" ;
1718import * as sdk from "postman-collection" ;
1819
1920import { CodeSample , Language } from "./code-snippets-types" ;
@@ -150,43 +151,29 @@ function CodeSnippets({
150151 setCodeSampleCodeText ( getCodeSampleSourceFromLanguage ( language ) ) ;
151152 }
152153
153- if ( language && ! ! language . options ) {
154- codegen . convert (
155- language . language ,
156- language . variant ,
157- cleanedPostmanRequest ,
158- language . options ,
159- ( error : any , snippet : string ) => {
160- if ( error ) {
161- return ;
162- }
163- setCodeText ( snippet ) ;
164- }
165- ) ;
166- } else if ( language && ! language . options ) {
154+ async function generateSnippet ( ) {
155+ if ( ! language ) {
156+ setCodeText ( "" ) ;
157+ return ;
158+ }
167159 const langSource = mergedLangs . filter (
168160 ( lang ) => lang . language === language . language
169161 ) ;
170-
171- // Merges user-defined language with default languageSet
172- // This allows users to define only the minimal properties necessary in languageTabs
173- // User-defined properties should override languageSet properties
174- const mergedLanguage = { ...langSource [ 0 ] , ...language } ;
175- codegen . convert (
162+ const mergedLanguage = language . options
163+ ? language
164+ : { ...langSource [ 0 ] , ...language } ;
165+ const collection = new sdk . Collection ( {
166+ item : [ { name : "request" , request : cleanedPostmanRequest } ] ,
167+ } ) ;
168+ const [ harRequest ] = await postman2har ( collection . toJSON ( ) ) ;
169+ const snippet = new HTTPSnippet ( harRequest ) . convert (
176170 mergedLanguage . language ,
177171 mergedLanguage . variant ,
178- cleanedPostmanRequest ,
179- mergedLanguage . options ,
180- ( error : any , snippet : string ) => {
181- if ( error ) {
182- return ;
183- }
184- setCodeText ( snippet ) ;
185- }
172+ mergedLanguage . options
186173 ) ;
187- } else {
188- setCodeText ( "" ) ;
174+ setCodeText ( typeof snippet === "string" ? snippet : "" ) ;
189175 }
176+ generateSnippet ( ) ;
190177 } , [
191178 accept ,
192179 body ,
@@ -203,19 +190,25 @@ function CodeSnippets({
203190 ] ) ;
204191 // no dependencies was intentionally set for this particular hook. it's safe as long as if conditions are set
205192 useEffect ( function onSelectedVariantUpdate ( ) {
206- if ( selectedVariant && selectedVariant !== language ?. variant ) {
207- codegen . convert (
208- language . language ,
209- selectedVariant ,
210- cleanedPostmanRequest ,
211- language . options ,
212- ( error : any , snippet : string ) => {
213- if ( error ) {
214- return ;
215- }
216- setCodeText ( snippet ) ;
217- }
218- ) ;
193+ if ( selectedVariant && selectedVariant !== language ?. variant && language ) {
194+ ( async ( ) => {
195+ const langSource = mergedLangs . filter (
196+ ( lang ) => lang . language === language . language
197+ ) ;
198+ const mergedLanguage = language . options
199+ ? language
200+ : { ...langSource [ 0 ] , ...language } ;
201+ const collection = new sdk . Collection ( {
202+ item : [ { name : "request" , request : cleanedPostmanRequest } ] ,
203+ } ) ;
204+ const [ harRequest ] = await postman2har ( collection . toJSON ( ) ) ;
205+ const snippet = new HTTPSnippet ( harRequest ) . convert (
206+ mergedLanguage . language ,
207+ selectedVariant ,
208+ mergedLanguage . options
209+ ) ;
210+ setCodeText ( typeof snippet === "string" ? snippet : "" ) ;
211+ } ) ( ) ;
219212 }
220213 } ) ;
221214
0 commit comments