1.1.0 • Published 10 months ago

@runafe/platform-share v1.1.0

Weekly downloads
-
License
ISC
Repository
-
Last release
10 months ago

common utils lib

http

usage

// main.ts
import axios from "axios";
import {
  defineEasyAxios,
  type defineAPI,
} from "@runafe/platform-share";

export type CodeHandlerTypes = 'tokenOutdate';
const handlers: ICodeHandler<CodeHandlerTypes>[] = [
  {
    on: /^5/gi,
    handler: ({ error, back }) => {
      notice(friendlyGetMes(error));
      return back;
    },
  },
  {
    id: "tokenOutdate",
    on: [401],
    handler: async (params) => {},
    async: true,
  },
];

// define axios config
const { http, genHandleFunc } = defineEasyAxios<CodeHandlerTypes>({
  instance: axios.create({
    baseURL: "/v1",
  }),
  codeHandler,
});

// register default strategies for all request
http.createDefaultStrategies((ins) => DefaultStrategies);

// dynamicly inject token
http.registerDynamicRequestConfig('token', config => {
  const tokenData = oauth.token;
  config.headers![oauth.tokenKey] = oauth.tokenValue;
  return config;
});

interface DefaultStrategies<D = any> {
  isSuccess: (res: AxiosResponse<D>) => boolean;
  getBackData: (type: HandleEnum, res: AxiosResponse<D>) => D;
  getMessage: (type: HandleEnum, res: AxiosResponse<D>) => string;
  showErrorMessageTip: MessageTip;
  showSuccessMessageTip: MessageTip;
}

declare type defineAPI<Id, Data = any, ServerDefinedResponse = any> = {
  id: Id;
  data: Data;
  response: ServerDefinedResponse;
};

// create restful api
// 1. no param and data
//  get -> prefix/name/login -> result.login(config?: AxiosConfig): number
const result = http.create<[defineAPI<"login", void, number>]>("prefix/name", ["get()::/login"]);
const { backData } = await result.login()(); // backData's type is number | undefined
// 2. param
// delete -> prefix/name/del -> result.del(param: string ,config?: AxiosConfig): number
const result = http.create<[defineAPI<"del", string, number>]>("prefix/name", ["delete::/del?"]);
// 3. data
// post -> prefix/name/posturl -> result.posturl(data: {age: number}): number
const result = http.create<[defineAPI<"posturl", {age: number}, number>]>("prefix/name", ["post::/posturl"]);
// 4. param and data
// post -> prefix/name/posturl -> result.postNameAlias(param: {name: string}, {data: {age: number}})
const result = http.create<[defineAPI<"postNameAlias", [{name: string}, {age: number}], number>]>("prefix/name", ["post::/posturl?->postNameAlias"]); 
// 5. with simple config
http.create("prefix", "post::/posturl::timeout->1000,contentType->form,responseType->blob")

// declare your own Response and message in env.d.ts or other global ts declaration file
declare module '@runafe/platform-share' {
  export interface ServerDefinedResponse<T = any, S = boolean> {
    code: number;
    data?: T;
    message?: string;
    success: S;
    total?: number;
  }
  // ElMessageOptions from element-plus
  export interface MessageOptions extends ElMessageOptions {}
}
1.1.0

10 months ago

1.1.0-beta.1

10 months ago

1.1.0-beta.0

10 months ago

1.0.19

11 months ago

1.0.18

12 months ago

1.0.17

12 months ago

1.0.16

12 months ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago