diff --git a/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV2.ts b/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV2.ts index 63f36b052..553519d38 100644 --- a/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV2.ts +++ b/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV2.ts @@ -8,16 +8,16 @@ type PrimitiveSchemaType = "string" | "integer" | "number" | "boolean" type SchemaType = "array" | "object" | PrimitiveSchemaType -type PrimitiveRequestBodyExampleType = number | string | boolean +type PrimitiveRequestBodyExample = number | string | boolean -type RequestBodyExampleType = - | { [name: string]: RequestBodyExampleType } - | Array - | PrimitiveRequestBodyExampleType +type RequestBodyExample = + | { [name: string]: RequestBodyExample } + | Array + | PrimitiveRequestBodyExample const getPrimitiveTypePlaceholder = ( schemaType: PrimitiveSchemaType -): PrimitiveRequestBodyExampleType => { +): PrimitiveRequestBodyExample => { switch (schemaType) { case "string": return "string" @@ -54,11 +54,11 @@ const isSchemaTypeObject = (schemaType: string): schemaType is "object" => const getSampleEnumValueOrPlaceholder = ( schema: OpenAPIV2.SchemaObject -): RequestBodyExampleType => +): RequestBodyExample => pipe( schema.enum, O.fromNullable, - O.map((enums) => enums[0] as RequestBodyExampleType), + O.map((enums) => enums[0] as RequestBodyExample), O.altW(() => pipe( schema, @@ -72,7 +72,7 @@ const getSampleEnumValueOrPlaceholder = ( const generateExampleArrayFromOpenAPIV2ItemsObject = ( items: OpenAPIV2.ItemsObject -): RequestBodyExampleType => +): RequestBodyExample => // ItemsObject can not hold type "object" // https://swagger.io/specification/v2/#itemsObject @@ -85,25 +85,26 @@ const generateExampleArrayFromOpenAPIV2ItemsObject = ( flow((items) => items.type as SchemaType, isSchemaTypePrimitive) ), O.map( - flow(getSampleEnumValueOrPlaceholder, (arrayItem) => - Array.of(arrayItem, arrayItem) - ) + flow(getSampleEnumValueOrPlaceholder, (arrayItem) => [ + arrayItem, + arrayItem, + ]) ), O.getOrElse(() => // If the type is not primitive, it is "array" // items property is required if type is array - Array.of( + [ generateExampleArrayFromOpenAPIV2ItemsObject( items.items as OpenAPIV2.ItemsObject - ) - ) + ), + ] ) ) const generateRequestBodyExampleFromOpenAPIV2BodySchema = ( schema: OpenAPIV2.SchemaObject -): RequestBodyExampleType => { - if (schema.example) return schema.example as RequestBodyExampleType +): RequestBodyExample => { + if (schema.example) return schema.example as RequestBodyExample const primitiveTypeExample = pipe( schema, @@ -155,7 +156,7 @@ const generateRequestBodyExampleFromOpenAPIV2BodySchema = ( ), O.getOrElseW(() => [] as [string, OpenAPIV2.SchemaObject][]), A.reduce( - {} as { [name: string]: RequestBodyExampleType }, + {} as { [name: string]: RequestBodyExample }, (aggregatedExample, property) => { const example = generateRequestBodyExampleFromOpenAPIV2BodySchema( property[1] @@ -179,10 +180,6 @@ export const generateRequestBodyExampleFromOpenAPIV2Body = ( generateRequestBodyExampleFromOpenAPIV2BodySchema ) ), - O.getOrElse(() => "" as RequestBodyExampleType), - (requestBodyExample) => - pipe( - prettyPrintJSON(requestBodyExample), - O.getOrElse(() => "") - ) + O.chain(prettyPrintJSON), + O.getOrElse(() => "") ) diff --git a/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV3.ts b/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV3.ts index 59571dfbc..f750377e8 100644 --- a/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV3.ts +++ b/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV3.ts @@ -1,7 +1,7 @@ import { OpenAPIV3 } from "openapi-types" import { pipe } from "fp-ts/function" -import * as A from "fp-ts/Array" import * as O from "fp-ts/Option" +import { tupleToRecord } from "~/helpers/functional/record" type SchemaType = | OpenAPIV3.ArraySchemaObjectType @@ -9,12 +9,12 @@ type SchemaType = type PrimitiveSchemaType = Exclude -type PrimitiveRequestBodyExampleType = string | number | boolean | null +type PrimitiveRequestBodyExample = string | number | boolean | null -type RequestBodyExampleType = - | PrimitiveRequestBodyExampleType - | Array - | { [name: string]: RequestBodyExampleType } +type RequestBodyExample = + | PrimitiveRequestBodyExample + | Array + | { [name: string]: RequestBodyExample } const isSchemaTypePrimitive = ( schemaType: SchemaType @@ -23,7 +23,7 @@ const isSchemaTypePrimitive = ( const getPrimitiveTypePlaceholder = ( primitiveType: PrimitiveSchemaType -): PrimitiveRequestBodyExampleType => { +): PrimitiveRequestBodyExample => { switch (primitiveType) { case "number": return 0.0 @@ -40,46 +40,34 @@ const getPrimitiveTypePlaceholder = ( // TODO(agarwal): Use Enum values, if any const generatePrimitiveRequestBodyExample = ( schemaObject: OpenAPIV3.NonArraySchemaObject -): RequestBodyExampleType => +): RequestBodyExample => getPrimitiveTypePlaceholder(schemaObject.type as PrimitiveSchemaType) // Use carefully, call only when type is object const generateObjectRequestBodyExample = ( schemaObject: OpenAPIV3.NonArraySchemaObject -): RequestBodyExampleType => +): RequestBodyExample => pipe( schemaObject.properties, O.fromNullable, - O.map( - (properties) => - Object.entries(properties) as [string, OpenAPIV3.SchemaObject][] - ), + O.map(Object.entries), O.getOrElseW(() => [] as [string, OpenAPIV3.SchemaObject][]), - A.reduce( - {} as { [name: string]: RequestBodyExampleType }, - (aggregatedExample, property) => { - aggregatedExample[property[0]] = - generateRequestBodyExampleFromSchemaObject(property[1]) - return aggregatedExample - } - ) + tupleToRecord ) const generateArrayRequestBodyExample = ( schemaObject: OpenAPIV3.ArraySchemaObject -): RequestBodyExampleType => - Array.of( - generateRequestBodyExampleFromSchemaObject( - schemaObject.items as OpenAPIV3.SchemaObject - ) - ) +): RequestBodyExample => [ + generateRequestBodyExampleFromSchemaObject( + schemaObject.items as OpenAPIV3.SchemaObject + ), +] const generateRequestBodyExampleFromSchemaObject = ( schemaObject: OpenAPIV3.SchemaObject -): RequestBodyExampleType => { +): RequestBodyExample => { // TODO: Handle schema objects with allof - if (schemaObject.example) - return schemaObject.example as RequestBodyExampleType + if (schemaObject.example) return schemaObject.example as RequestBodyExample // If request body can be oneof or allof several schema, choose the first schema to generate an example if (schemaObject.oneOf) @@ -110,10 +98,9 @@ const generateRequestBodyExampleFromSchemaObject = ( export const generateRequestBodyExampleFromMediaObject = ( mediaObject: OpenAPIV3.MediaTypeObject -): RequestBodyExampleType => { - if (mediaObject.example) return mediaObject.example as RequestBodyExampleType - if (mediaObject.examples) - return mediaObject.examples[0] as RequestBodyExampleType +): RequestBodyExample => { + if (mediaObject.example) return mediaObject.example as RequestBodyExample + if (mediaObject.examples) return mediaObject.examples[0] as RequestBodyExample return mediaObject.schema ? generateRequestBodyExampleFromSchemaObject( mediaObject.schema as OpenAPIV3.SchemaObject diff --git a/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV31.ts b/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV31.ts index 0a71f1d57..31f2d2f11 100644 --- a/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV31.ts +++ b/packages/hoppscotch-app/helpers/import-export/import/openapi/exampleV31.ts @@ -18,12 +18,12 @@ type PrimitiveSchemaType = Exclude< "object" > -type PrimitiveRequestBodyExampleType = string | number | boolean | null +type PrimitiveRequestBodyExample = string | number | boolean | null -type RequestBodyExampleType = - | PrimitiveRequestBodyExampleType - | Array - | { [name: string]: RequestBodyExampleType } +type RequestBodyExample = + | PrimitiveRequestBodyExample + | Array + | { [name: string]: RequestBodyExample } const isSchemaTypePrimitive = ( schemaType: SchemaType @@ -32,7 +32,7 @@ const isSchemaTypePrimitive = ( const getPrimitiveTypePlaceholder = ( primitiveType: PrimitiveSchemaType -): PrimitiveRequestBodyExampleType => { +): PrimitiveRequestBodyExample => { switch (primitiveType) { case "number": return 0.0 @@ -50,13 +50,13 @@ const getPrimitiveTypePlaceholder = ( // TODO(agarwal): Use Enum values, if any const generatePrimitiveRequestBodyExample = ( schemaObject: OpenAPIV31.NonArraySchemaObject -): RequestBodyExampleType => +): RequestBodyExample => getPrimitiveTypePlaceholder(schemaObject.type as PrimitiveSchemaType) // Use carefully, the schema type should necessarily be object const generateObjectRequestBodyExample = ( schemaObject: OpenAPIV31.NonArraySchemaObject -): RequestBodyExampleType => +): RequestBodyExample => pipe( schemaObject.properties, O.fromNullable, @@ -66,7 +66,7 @@ const generateObjectRequestBodyExample = ( ), O.getOrElseW(() => [] as [string, OpenAPIV31.SchemaObject][]), A.reduce( - {} as { [name: string]: RequestBodyExampleType }, + {} as { [name: string]: RequestBodyExample }, (aggregatedExample, property) => { aggregatedExample[property[0]] = generateRequestBodyExampleFromSchemaObject(property[1]) @@ -78,39 +78,34 @@ const generateObjectRequestBodyExample = ( // Use carefully, the schema type should necessarily be mixed array const generateMixedArrayRequestBodyEcample = ( schemaObject: OpenAPIV31.SchemaObject -): RequestBodyExampleType => +): RequestBodyExample => pipe( schemaObject, (schemaObject) => schemaObject.type as MixedArraySchemaType, - A.reduce( - [] as Array, - (aggregatedExample, itemType) => { - // TODO: Figure out how to include non-primitive types as well - if (isSchemaTypePrimitive(itemType)) { - aggregatedExample.push(getPrimitiveTypePlaceholder(itemType)) - } - return aggregatedExample + A.reduce([] as Array, (aggregatedExample, itemType) => { + // TODO: Figure out how to include non-primitive types as well + if (isSchemaTypePrimitive(itemType)) { + aggregatedExample.push(getPrimitiveTypePlaceholder(itemType)) } - ) + return aggregatedExample + }) ) const generateArrayRequestBodyExample = ( schemaObject: OpenAPIV31.ArraySchemaObject -): RequestBodyExampleType => - Array.of( - generateRequestBodyExampleFromSchemaObject( - schemaObject.items as OpenAPIV31.SchemaObject - ) - ) +): RequestBodyExample => [ + generateRequestBodyExampleFromSchemaObject( + schemaObject.items as OpenAPIV31.SchemaObject + ), +] const generateRequestBodyExampleFromSchemaObject = ( schemaObject: OpenAPIV31.SchemaObject -): RequestBodyExampleType => { +): RequestBodyExample => { // TODO: Handle schema objects with oneof or anyof - if (schemaObject.example) - return schemaObject.example as RequestBodyExampleType + if (schemaObject.example) return schemaObject.example as RequestBodyExample if (schemaObject.examples) - return schemaObject.examples[0] as RequestBodyExampleType + return schemaObject.examples[0] as RequestBodyExample if (!schemaObject.type) return "" if (isSchemaTypePrimitive(schemaObject.type)) return generatePrimitiveRequestBodyExample( @@ -125,10 +120,9 @@ const generateRequestBodyExampleFromSchemaObject = ( export const generateRequestBodyExampleFromMediaObject = ( mediaObject: OpenAPIV31.MediaTypeObject -): RequestBodyExampleType => { - if (mediaObject.example) return mediaObject.example as RequestBodyExampleType - if (mediaObject.examples) - return mediaObject.examples[0] as RequestBodyExampleType +): RequestBodyExample => { + if (mediaObject.example) return mediaObject.example as RequestBodyExample + if (mediaObject.examples) return mediaObject.examples[0] as RequestBodyExample return mediaObject.schema ? generateRequestBodyExampleFromSchemaObject(mediaObject.schema) : ""