# @runafe/platform-share

> runafe share

Latest version **1.1.0** (published 2023-07-20) · ISC license · 0 weekly downloads

## Install

```sh
npm install @runafe/platform-share
pnpm add @runafe/platform-share
yarn add @runafe/platform-share
bun add @runafe/platform-share
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.0 |
| Published | 2023-07-20 |
| First published | 2023-03-10 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 185 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | wangxdmm |
| Maintainers | wangquery |

## Links

- npm: https://www.npmjs.com/package/@runafe/platform-share
- npm.io page: https://npm.io/package/@runafe/platform-share

## Recent versions

- 1.1.0 (latest) — 2023-07-20
- 1.1.0-beta.1 — 2023-07-19
- 1.1.0-beta.0 — 2023-07-19
- 1.0.19 — 2023-06-13
- 1.0.18 — 2023-05-30
- 1.0.17 — 2023-05-30
- 1.0.16 — 2023-05-29
- 1.0.15 — 2023-05-06
- 1.0.14 — 2023-04-26
- 1.0.13 — 2023-04-26
- 1.0.12 — 2023-04-24
- 1.0.11 — 2023-04-21
- 1.0.10 — 2023-04-17
- 1.0.9 — 2023-03-29
- 1.0.8 — 2023-03-23
- … 8 more at https://npm.io/package/@runafe/platform-share/versions

## README

# common utils lib

## http

### usage

```typescript
// 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 {}
}

```

---
_Source: https://npm.io/package/@runafe/platform-share · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
