@mee4dy/crud
Version:
Create a backend and frontend in 5 minutes! With our powerful full stack crud system, customize it to suit you.
1 lines • 5.78 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../client/index.ts"],"sourcesContent":["import * as _ from 'lodash';\nimport qs from 'qs';\nimport axios, { AxiosInstance } from 'axios';\nimport { ORM } from '../orm';\n\ninterface CrudOptions {\n endpoints: Endpoints;\n pk?: string;\n orm?: boolean;\n http?: HttpOptions;\n}\n\ninterface HttpOptions {\n baseURL?: string;\n headers?: object;\n timeout?: number;\n abort?: boolean;\n}\n\ninterface Endpoints {\n [EndpointType.meta]?: string;\n [EndpointType.fetch]?: string;\n [EndpointType.create]?: string;\n [EndpointType.update]?: string;\n [EndpointType.delete]?: string;\n}\n\nenum EndpointType {\n meta = 'meta',\n fetch = 'fetch',\n create = 'create',\n update = 'update',\n delete = 'delete',\n}\n\ninterface State {\n loading: boolean;\n}\n\nexport class CrudClient {\n constructor(options: CrudOptions) {\n this.pk = options.pk || 'id';\n this.endpoints = options.endpoints;\n this.orm = options.orm || true;\n\n this.http = {\n baseURL: undefined,\n headers: {},\n timeout: undefined,\n abort: true,\n ...(options.http || {}),\n };\n\n this.axios = axios.create({\n baseURL: this.http.baseURL,\n headers: this.http.headers,\n timeout: this.http.timeout,\n });\n }\n\n private pk: string;\n private orm: boolean;\n private endpoints: Endpoints;\n private http: HttpOptions;\n private axios: AxiosInstance;\n private abortController: AbortController;\n\n public state: State = {\n loading: false,\n };\n\n public async fetch(params?: object) {\n const endpoint = this.getEndpoint(EndpointType.fetch);\n\n this.setLoading(true);\n\n if (this.http.abort) {\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n }\n\n try {\n const response = await this.axios.get(endpoint, {\n signal: this.abortController.signal,\n params: params,\n paramsSerializer: (params) => qs.stringify(params, { arrayFormat: 'brackets' }),\n });\n\n return this.prepareItems(response?.data?.data?.items || []);\n } catch (e) {\n throw e;\n } finally {\n this.setLoading(false);\n }\n }\n\n public async create(data: object) {\n const endpoint = this.getEndpoint(EndpointType.create);\n\n const response = await this.axios.post(endpoint, {\n data,\n });\n\n return response?.data;\n }\n\n public async update(pk: string | number, data: object) {\n const endpoint = this.getEndpoint(EndpointType.update, pk);\n\n const response = await this.axios.post(endpoint, {\n pk,\n data,\n });\n\n return response?.data;\n }\n\n public async delete(pk: string | number) {\n const endpoint = this.getEndpoint(EndpointType.delete, pk);\n\n const response = await this.axios.post(endpoint, {\n pk: pk,\n });\n\n return response;\n }\n\n private getEndpoint(endpointType: EndpointType, pk?: string | number): string | undefined {\n let endpoint = this.endpoints[endpointType];\n\n if (!endpoint) {\n throw new Error(`Endpoint ${EndpointType.fetch} is not found!`);\n }\n\n if (pk) {\n endpoint = endpoint.split(':pk').join(pk.toString());\n }\n\n return endpoint;\n }\n\n private setLoading(state: boolean) {\n this.state.loading = state;\n }\n\n private prepareItems(items: object[]) {\n if (this.orm) {\n const itemsClone = _.cloneDeep(items);\n const itemsORM = new ORM(itemsClone, this.pk, {\n update: ({ pk, data, level }) => {\n return this.update(pk, data);\n },\n delete: ({ pk, level }) => {\n return this.delete(pk);\n },\n }).getItems();\n\n return itemsORM;\n }\n\n return items;\n }\n}\n"],"names":["CrudClient","options","axios","params","endpoint","response","qs","_b","_a","e","data","pk","endpointType","state","items","itemsClone","_","ORM","level"],"mappings":"+dAuCO,MAAMA,CAAW,CACtB,YAAYC,EAAsB,CA2BlC,KAAO,MAAe,CACpB,QAAS,EACX,EA5BO,KAAA,GAAKA,EAAQ,IAAM,KACxB,KAAK,UAAYA,EAAQ,UACpB,KAAA,IAAMA,EAAQ,KAAO,GAE1B,KAAK,KAAO,CACV,QAAS,OACT,QAAS,CAAC,EACV,QAAS,OACT,MAAO,GACP,GAAIA,EAAQ,MAAQ,CAAA,CACtB,EAEK,KAAA,MAAQC,EAAM,OAAO,CACxB,QAAS,KAAK,KAAK,QACnB,QAAS,KAAK,KAAK,QACnB,QAAS,KAAK,KAAK,OAAA,CACpB,CAAA,CAcH,MAAa,MAAMC,EAAiB,SAC5B,MAAAC,EAAW,KAAK,YAAY,OAAkB,EAEpD,KAAK,WAAW,EAAI,EAEhB,KAAK,KAAK,QACR,KAAK,iBACP,KAAK,gBAAgB,MAAM,EAGxB,KAAA,gBAAkB,IAAI,iBAGzB,GAAA,CACF,MAAMC,EAAW,MAAM,KAAK,MAAM,IAAID,EAAU,CAC9C,OAAQ,KAAK,gBAAgB,OAC7B,OAAAD,EACA,iBAAmBA,GAAWG,EAAG,UAAUH,EAAQ,CAAE,YAAa,UAAY,CAAA,CAAA,CAC/E,EAED,OAAO,KAAK,eAAaI,GAAAC,EAAAH,GAAA,YAAAA,EAAU,OAAV,YAAAG,EAAgB,OAAhB,YAAAD,EAAsB,QAAS,EAAE,QACnDE,EAAG,CACJ,MAAAA,CAAA,QACN,CACA,KAAK,WAAW,EAAK,CAAA,CACvB,CAGF,MAAa,OAAOC,EAAc,CAC1B,MAAAN,EAAW,KAAK,YAAY,QAAmB,EAE/CC,EAAW,MAAM,KAAK,MAAM,KAAKD,EAAU,CAC/C,KAAAM,CAAA,CACD,EAED,OAAOL,GAAA,YAAAA,EAAU,IAAA,CAGnB,MAAa,OAAOM,EAAqBD,EAAc,CACrD,MAAMN,EAAW,KAAK,YAAY,SAAqBO,CAAE,EAEnDN,EAAW,MAAM,KAAK,MAAM,KAAKD,EAAU,CAC/C,GAAAO,EACA,KAAAD,CAAA,CACD,EAED,OAAOL,GAAA,YAAAA,EAAU,IAAA,CAGnB,MAAa,OAAOM,EAAqB,CACvC,MAAMP,EAAW,KAAK,YAAY,SAAqBO,CAAE,EAMlD,OAJU,MAAM,KAAK,MAAM,KAAKP,EAAU,CAC/C,GAAAO,CAAA,CACD,CAEM,CAGD,YAAYC,EAA4BD,EAA0C,CACpF,IAAAP,EAAW,KAAK,UAAUQ,CAAY,EAE1C,GAAI,CAACR,EACH,MAAM,IAAI,MAAM,8BAA8C,EAGhE,OAAIO,IACFP,EAAWA,EAAS,MAAM,KAAK,EAAE,KAAKO,EAAG,UAAU,GAG9CP,CAAA,CAGD,WAAWS,EAAgB,CACjC,KAAK,MAAM,QAAUA,CAAA,CAGf,aAAaC,EAAiB,CACpC,GAAI,KAAK,IAAK,CACN,MAAAC,EAAaC,EAAE,UAAUF,CAAK,EAU7B,OATU,IAAIG,EAAAA,IAAIF,EAAY,KAAK,GAAI,CAC5C,OAAQ,CAAC,CAAE,GAAAJ,EAAI,KAAAD,EAAM,MAAAQ,KACZ,KAAK,OAAOP,EAAID,CAAI,EAE7B,OAAQ,CAAC,CAAE,GAAAC,EAAI,MAAAO,KACN,KAAK,OAAOP,CAAE,CAExB,CAAA,EAAE,SAAS,CAEL,CAGF,OAAAG,CAAA,CAEX"}