refactor: import/export new architecture

This commit is contained in:
Andrew Bastin
2021-12-22 17:36:49 +05:30
parent b6e05d42f3
commit 681a957611
4 changed files with 88 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
import { HoppRESTRequest } from "@hoppscotch/data"
import { pipe } from "fp-ts/function"
import * as TE from "fp-ts/TaskEither"
import { HoppExporter } from "."
import { Collection } from "~/newstore/collections"
const exporter: HoppExporter<Collection<HoppRESTRequest>> = (content) =>
pipe(content, JSON.stringify, TE.right)
export default exporter

View File

@@ -0,0 +1,19 @@
import * as TE from "fp-ts/TaskEither"
import { HoppRESTRequest } from "@hoppscotch/data"
import { Collection } from "~/newstore/collections"
export type HoppExporter<T> = (content: T) => TE.TaskEither<string, string>
export type HoppExporterDefintion<T> = {
name: string
exporter: () => Promise<HoppExporter<T>>
}
export const RESTCollectionExporters: HoppExporterDefintion<
Collection<HoppRESTRequest>
>[] = [
{
name: "Hoppscotch REST Collection JSON",
exporter: () => import("./hopp").then((m) => m.default),
},
]

View File

@@ -0,0 +1,20 @@
import { HoppRESTRequest } from "@hoppscotch/data"
import { pipe } from "fp-ts/function"
import * as TE from "fp-ts/TaskEither"
import * as E from "fp-ts/Either"
import { HoppImporter, IMPORTER_INVALID_FILE_FORMAT } from "."
import {
Collection,
translateToNewRESTCollection,
} from "~/newstore/collections"
const importer: HoppImporter<Collection<HoppRESTRequest>> = (content) =>
pipe(
E.tryCatch(
() => translateToNewRESTCollection(content),
() => IMPORTER_INVALID_FILE_FORMAT
),
TE.fromEither
)
export default importer

View File

@@ -0,0 +1,39 @@
import * as TE from "fp-ts/TaskEither"
import { HoppRESTRequest } from "@hoppscotch/data"
import { Collection } from "~/newstore/collections"
/**
* The error state to be used when the file formats do not match
*/
export const IMPORTER_INVALID_FILE_FORMAT =
"importer_invalid_file_format" as const
export type HoppImporterError = typeof IMPORTER_INVALID_FILE_FORMAT
export type HoppImporter<T> = (
content: string
) => TE.TaskEither<HoppImporterError, T>
/**
* Definition for importers
*/
export type HoppImporterDefintion<T> = {
/**
* Name of the importer, shown on the Select Importer dropdown
*/
name: string
/**
* The importer function, It is a Promise because its supposed to be loaded in lazily (dynamic imports ?)
*/
importer: () => Promise<HoppImporter<T>>
}
export const RESTCollectionImporters: HoppImporterDefintion<
Collection<HoppRESTRequest>
>[] = [
{
name: "Hoppscotch REST Collection",
importer: () => import("./hopp").then((m) => m.default),
},
]