qidian-shared 1.0.43 → 1.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/useCsl.mjs +0 -1
- package/dist/hooks/useCsl.mjs.map +1 -1
- package/dist/hooks/useService/loadMore.mjs +0 -1
- package/dist/hooks/useService/loadMore.mjs.map +1 -1
- package/dist/hooks/useService/pagination.mjs +0 -1
- package/dist/hooks/useService/pagination.mjs.map +1 -1
- package/dist/hooks/useTplRefsList.mjs +0 -1
- package/dist/hooks/useTplRefsList.mjs.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -1
- package/dist/utils/glob.d.ts +1 -0
- package/dist/utils/glob.mjs +16 -0
- package/dist/utils/glob.mjs.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/str.mjs +1 -1
- package/dist/utils/str.mjs.map +1 -1
- package/package.json +1 -1
package/dist/hooks/useCsl.mjs
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { noop, isEmpty } from "../utils/common.mjs";
|
|
2
|
-
import "../_virtual/index.mjs";
|
|
3
2
|
const __vite_import_meta_env__ = { "BASE_URL": "/", "DEV": false, "MODE": "production", "PROD": true, "SSR": false };
|
|
4
3
|
const cslType = ["log", "warn", "error"];
|
|
5
4
|
const isDev = import.meta.env?.NODE_ENV !== "production" || __vite_import_meta_env__ && false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCsl.mjs","sources":["../../src/hooks/useCsl.ts"],"sourcesContent":["import { noop, isEmpty } from '../utils'\n\ntype CslType = 'log' | 'warn' | 'error'\ntype Csl = {\n [key in CslType]: {\n (childModule: ChildModule, ...rest: unknown[]): void\n dev(childModule: ChildModule, ...rest: unknown[]): void\n }\n} & { useNext(childModule: ChildModule): Csl }\ntype ChildModule = string | number | Array<string | number>\n\nconst cslType: Array<CslType> = ['log', 'warn', 'error']\nexport const isDev =\n process?.env?.NODE_ENV !== 'production' ||\n (import.meta.env && import.meta.env.MODE !== 'production')\n\nexport function useCsl(module: string | Array<string>) {\n const toStr = (data: ChildModule) => {\n if (typeof data === 'object') return data.join('.')\n if (typeof data === 'number') return data.toString()\n return data\n }\n\n module = toStr(module)\n\n const getModule = (childModule?: ChildModule) => {\n if (isEmpty(childModule)) return `[${module}]`\n\n childModule = toStr(childModule!)\n if (childModule) childModule = '.' + childModule\n\n return `[${module}${childModule}]`\n }\n\n const core = (type: CslType = 'log', childModule: ChildModule, ...rest: unknown[]) => {\n if (isEmpty(rest)) {\n console[type](getModule(), childModule)\n return\n }\n\n console[type](getModule(childModule), ...rest)\n }\n\n const csl: Csl = {\n useNext(childModule: ChildModule) {\n return useCsl(getModule(childModule).replace(/\\[|\\]/g, ''))\n }\n } as Csl\n\n cslType.forEach((item) => {\n const temp: Csl[CslType] = (childModule: ChildModule, ...rest: unknown[]) => {\n core(item, childModule, ...rest)\n }\n\n temp.dev = isDev ? temp : noop\n csl[item] = temp\n })\n\n return csl\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCsl.mjs","sources":["../../src/hooks/useCsl.ts"],"sourcesContent":["import { noop, isEmpty } from '../utils'\n\ntype CslType = 'log' | 'warn' | 'error'\ntype Csl = {\n [key in CslType]: {\n (childModule: ChildModule, ...rest: unknown[]): void\n dev(childModule: ChildModule, ...rest: unknown[]): void\n }\n} & { useNext(childModule: ChildModule): Csl }\ntype ChildModule = string | number | Array<string | number>\n\nconst cslType: Array<CslType> = ['log', 'warn', 'error']\nexport const isDev =\n process?.env?.NODE_ENV !== 'production' ||\n (import.meta.env && import.meta.env.MODE !== 'production')\n\nexport function useCsl(module: string | Array<string>) {\n const toStr = (data: ChildModule) => {\n if (typeof data === 'object') return data.join('.')\n if (typeof data === 'number') return data.toString()\n return data\n }\n\n module = toStr(module)\n\n const getModule = (childModule?: ChildModule) => {\n if (isEmpty(childModule)) return `[${module}]`\n\n childModule = toStr(childModule!)\n if (childModule) childModule = '.' + childModule\n\n return `[${module}${childModule}]`\n }\n\n const core = (type: CslType = 'log', childModule: ChildModule, ...rest: unknown[]) => {\n if (isEmpty(rest)) {\n console[type](getModule(), childModule)\n return\n }\n\n console[type](getModule(childModule), ...rest)\n }\n\n const csl: Csl = {\n useNext(childModule: ChildModule) {\n return useCsl(getModule(childModule).replace(/\\[|\\]/g, ''))\n }\n } as Csl\n\n cslType.forEach((item) => {\n const temp: Csl[CslType] = (childModule: ChildModule, ...rest: unknown[]) => {\n core(item, childModule, ...rest)\n }\n\n temp.dev = isDev ? temp : noop\n csl[item] = temp\n })\n\n return csl\n}\n"],"names":[],"mappings":";;AAWA,MAAM,UAA0B,CAAC,OAAO,QAAQ,OAAO;AAChD,MAAM,QACX,YAAA,KAAc,aAAa,gBAC1B,4BAAmB;AAEf,SAAS,OAAO,QAAgC;AACrD,QAAM,QAAQ,CAAC,SAAsB;AACnC,QAAI,OAAO,SAAS,SAAU,QAAO,KAAK,KAAK,GAAG;AAClD,QAAI,OAAO,SAAS,SAAU,QAAO,KAAK,SAAA;AAC1C,WAAO;AAAA,EACT;AAEA,WAAS,MAAM,MAAM;AAErB,QAAM,YAAY,CAAC,gBAA8B;AAC/C,QAAI,QAAQ,WAAW,EAAG,QAAO,IAAI,MAAM;AAE3C,kBAAc,MAAM,WAAY;AAChC,QAAI,2BAA2B,MAAM;AAErC,WAAO,IAAI,MAAM,GAAG,WAAW;AAAA,EACjC;AAEA,QAAM,OAAO,CAAC,OAAgB,OAAO,gBAA6B,SAAoB;AACpF,QAAI,QAAQ,IAAI,GAAG;AACjB,cAAQ,IAAI,EAAE,UAAA,GAAa,WAAW;AACtC;AAAA,IACF;AAEA,YAAQ,IAAI,EAAE,UAAU,WAAW,GAAG,GAAG,IAAI;AAAA,EAC/C;AAEA,QAAM,MAAW;AAAA,IACf,QAAQ,aAA0B;AAChC,aAAO,OAAO,UAAU,WAAW,EAAE,QAAQ,UAAU,EAAE,CAAC;AAAA,IAC5D;AAAA,EAAA;AAGF,UAAQ,QAAQ,CAAC,SAAS;AACxB,UAAM,OAAqB,CAAC,gBAA6B,SAAoB;AAC3E,WAAK,MAAM,aAAa,GAAG,IAAI;AAAA,IACjC;AAEA,SAAK,MAAM,QAAQ,OAAO;AAC1B,QAAI,IAAI,IAAI;AAAA,EACd,CAAC;AAED,SAAO;AACT;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ref, unref } from "vue";
|
|
2
2
|
import { useLoadMore } from "../../node_modules/.pnpm/vue-request@2.0.4_vue@3.5.26_typescript@5.9.3_/node_modules/vue-request/dist/index.es.mjs";
|
|
3
3
|
import { isEmpty, easyCopy } from "../../utils/common.mjs";
|
|
4
|
-
import "../../_virtual/index.mjs";
|
|
5
4
|
import { suspectedWrapperPromise, to } from "../../utils/promise.mjs";
|
|
6
5
|
function useServiceLoadMore({
|
|
7
6
|
service,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadMore.mjs","sources":["../../../src/hooks/useService/loadMore.ts"],"sourcesContent":["import type {\n ServiceMaybePageParams,\n ServicePageDataType,\n ServicePageLoadMoreOptions,\n ServicePageParams,\n ServicePageRes,\n ServicePagination,\n UseServicePageLoadMoreResult\n} from './types'\nimport { ref, unref } from 'vue'\nimport { useLoadMore } from 'vue-request'\nimport { easyCopy, isEmpty, suspectedWrapperPromise, to } from '../../utils'\n\nexport function useServiceLoadMore<\n D = unknown,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination\n>({\n service,\n manual,\n transformParams,\n transformRes,\n pagination,\n onBefore,\n onAfter,\n onSuccess,\n onError\n}: ServicePageLoadMoreOptions<D, R, P, TP, Pag>) {\n const firstLoad = ref(false)\n const manualTriggerLoad = ref(false)\n const dataList = ref<D[]>([])\n\n const {\n data,\n loading,\n loadingMore,\n noMore,\n error,\n refresh,\n refreshAsync,\n cancel,\n loadMore,\n loadMoreAsync,\n mutate\n } = useLoadMore<ServicePageDataType<D>>(\n async (params) => {\n const res: ServicePageDataType<D> = { list: [], page: 1, total: 0 }\n const paginationV = unref(pagination)\n\n const currentParams =\n paginationV !== false\n ? {\n pageNum: isEmpty(params?.page) ? 1 : params!.page + 1,\n pageSize: params?.size ?? paginationV?.pageSize ?? 30\n }\n : undefined\n\n if (currentParams?.pageNum === 1 || isEmpty(currentParams?.pageNum)) firstLoad.value = true\n\n let tParams: TP | undefined\n if (transformParams) {\n const [tpErr, tpRes] = await suspectedWrapperPromise(\n transformParams(\n (currentParams ? easyCopy(currentParams) : currentParams) as ServiceMaybePageParams<Pag>\n )\n )\n if (tpErr) throw tpErr\n\n tParams = tpRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as TP)))\n if (serviceErr) throw serviceErr\n\n let temp: ServicePageRes<D> | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n temp = trRes\n } else {\n temp = serviceRes as ServicePageRes<D>\n }\n\n if (!temp.records) temp.records = []\n if (isEmpty(temp.total)) temp.total = temp.records.length\n\n if (!paginationV || currentParams?.pageNum === 1) {\n res.list = temp.records\n } else {\n res.list = res.list.concat(temp.records)\n }\n\n if (currentParams) {\n res.page = currentParams?.pageNum\n res.size = currentParams?.pageSize\n }\n res.total = temp.total\n\n return res\n },\n {\n manual,\n isNoMore: (data) => {\n if (!data) return true\n return isEmpty(data.total) || data.list.length >= data.total!\n },\n\n onBefore,\n onAfter: () => {\n firstLoad.value = false\n manualTriggerLoad.value = false\n onAfter?.()\n },\n onSuccess: (res) => {\n dataList.value = res.list\n onSuccess?.(res)\n },\n onError\n }\n )\n\n function reRefresh() {\n manualTriggerLoad.value = true\n refresh()\n }\n\n function reRefreshAsync() {\n manualTriggerLoad.value = true\n return refreshAsync()\n }\n\n function reLoadMore() {\n manualTriggerLoad.value = true\n loadMore()\n }\n\n function reLoadMoreAsync() {\n manualTriggerLoad.value = true\n return loadMoreAsync()\n }\n\n return {\n data,\n dataList,\n firstLoad,\n manualTriggerLoad,\n loading,\n loadingMore,\n noMore,\n error,\n refresh: reRefresh,\n refreshAsync: reRefreshAsync,\n cancel,\n loadMore: reLoadMore,\n loadMoreAsync: reLoadMoreAsync,\n mutate\n } as UseServicePageLoadMoreResult\n}\n"],"names":["data"],"mappings":"
|
|
1
|
+
{"version":3,"file":"loadMore.mjs","sources":["../../../src/hooks/useService/loadMore.ts"],"sourcesContent":["import type {\n ServiceMaybePageParams,\n ServicePageDataType,\n ServicePageLoadMoreOptions,\n ServicePageParams,\n ServicePageRes,\n ServicePagination,\n UseServicePageLoadMoreResult\n} from './types'\nimport { ref, unref } from 'vue'\nimport { useLoadMore } from 'vue-request'\nimport { easyCopy, isEmpty, suspectedWrapperPromise, to } from '../../utils'\n\nexport function useServiceLoadMore<\n D = unknown,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination\n>({\n service,\n manual,\n transformParams,\n transformRes,\n pagination,\n onBefore,\n onAfter,\n onSuccess,\n onError\n}: ServicePageLoadMoreOptions<D, R, P, TP, Pag>) {\n const firstLoad = ref(false)\n const manualTriggerLoad = ref(false)\n const dataList = ref<D[]>([])\n\n const {\n data,\n loading,\n loadingMore,\n noMore,\n error,\n refresh,\n refreshAsync,\n cancel,\n loadMore,\n loadMoreAsync,\n mutate\n } = useLoadMore<ServicePageDataType<D>>(\n async (params) => {\n const res: ServicePageDataType<D> = { list: [], page: 1, total: 0 }\n const paginationV = unref(pagination)\n\n const currentParams =\n paginationV !== false\n ? {\n pageNum: isEmpty(params?.page) ? 1 : params!.page + 1,\n pageSize: params?.size ?? paginationV?.pageSize ?? 30\n }\n : undefined\n\n if (currentParams?.pageNum === 1 || isEmpty(currentParams?.pageNum)) firstLoad.value = true\n\n let tParams: TP | undefined\n if (transformParams) {\n const [tpErr, tpRes] = await suspectedWrapperPromise(\n transformParams(\n (currentParams ? easyCopy(currentParams) : currentParams) as ServiceMaybePageParams<Pag>\n )\n )\n if (tpErr) throw tpErr\n\n tParams = tpRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as TP)))\n if (serviceErr) throw serviceErr\n\n let temp: ServicePageRes<D> | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n temp = trRes\n } else {\n temp = serviceRes as ServicePageRes<D>\n }\n\n if (!temp.records) temp.records = []\n if (isEmpty(temp.total)) temp.total = temp.records.length\n\n if (!paginationV || currentParams?.pageNum === 1) {\n res.list = temp.records\n } else {\n res.list = res.list.concat(temp.records)\n }\n\n if (currentParams) {\n res.page = currentParams?.pageNum\n res.size = currentParams?.pageSize\n }\n res.total = temp.total\n\n return res\n },\n {\n manual,\n isNoMore: (data) => {\n if (!data) return true\n return isEmpty(data.total) || data.list.length >= data.total!\n },\n\n onBefore,\n onAfter: () => {\n firstLoad.value = false\n manualTriggerLoad.value = false\n onAfter?.()\n },\n onSuccess: (res) => {\n dataList.value = res.list\n onSuccess?.(res)\n },\n onError\n }\n )\n\n function reRefresh() {\n manualTriggerLoad.value = true\n refresh()\n }\n\n function reRefreshAsync() {\n manualTriggerLoad.value = true\n return refreshAsync()\n }\n\n function reLoadMore() {\n manualTriggerLoad.value = true\n loadMore()\n }\n\n function reLoadMoreAsync() {\n manualTriggerLoad.value = true\n return loadMoreAsync()\n }\n\n return {\n data,\n dataList,\n firstLoad,\n manualTriggerLoad,\n loading,\n loadingMore,\n noMore,\n error,\n refresh: reRefresh,\n refreshAsync: reRefreshAsync,\n cancel,\n loadMore: reLoadMore,\n loadMoreAsync: reLoadMoreAsync,\n mutate\n } as UseServicePageLoadMoreResult\n}\n"],"names":["data"],"mappings":";;;;AAaO,SAAS,mBAMd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiD;AAC/C,QAAM,YAAY,IAAI,KAAK;AAC3B,QAAM,oBAAoB,IAAI,KAAK;AACnC,QAAM,WAAW,IAAS,EAAE;AAE5B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAAA,IACF,OAAO,WAAW;AAChB,YAAM,MAA8B,EAAE,MAAM,CAAA,GAAI,MAAM,GAAG,OAAO,EAAA;AAChE,YAAM,cAAc,MAAM,UAAU;AAEpC,YAAM,gBACJ,gBAAgB,QACZ;AAAA,QACE,SAAS,QAAQ,QAAQ,IAAI,IAAI,IAAI,OAAQ,OAAO;AAAA,QACpD,UAAU,QAAQ,QAAQ,aAAa,YAAY;AAAA,MAAA,IAErD;AAEN,UAAI,eAAe,YAAY,KAAK,QAAQ,eAAe,OAAO,aAAa,QAAQ;AAEvF,UAAI;AACJ,UAAI,iBAAiB;AACnB,cAAM,CAAC,OAAO,KAAK,IAAI,MAAM;AAAA,UAC3B;AAAA,YACG,gBAAgB,SAAS,aAAa,IAAI;AAAA,UAAA;AAAA,QAC7C;AAEF,YAAI,MAAO,OAAM;AAEjB,kBAAU;AAAA,MACZ;AAEA,YAAM,CAAC,YAAY,UAAU,IAAI,MAAM,GAAG,QAAQ,WAAY,aAAoB,CAAC;AACnF,UAAI,WAAY,OAAM;AAEtB,UAAI;AACJ,UAAI,cAAc;AAChB,cAAM,CAAC,OAAO,KAAK,IAAI,MAAM,wBAAwB,aAAa,UAAU,CAAC;AAC7E,YAAI,MAAO,OAAM;AAEjB,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAEA,UAAI,CAAC,KAAK,QAAS,MAAK,UAAU,CAAA;AAClC,UAAI,QAAQ,KAAK,KAAK,EAAG,MAAK,QAAQ,KAAK,QAAQ;AAEnD,UAAI,CAAC,eAAe,eAAe,YAAY,GAAG;AAChD,YAAI,OAAO,KAAK;AAAA,MAClB,OAAO;AACL,YAAI,OAAO,IAAI,KAAK,OAAO,KAAK,OAAO;AAAA,MACzC;AAEA,UAAI,eAAe;AACjB,YAAI,OAAO,eAAe;AAC1B,YAAI,OAAO,eAAe;AAAA,MAC5B;AACA,UAAI,QAAQ,KAAK;AAEjB,aAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE;AAAA,MACA,UAAU,CAACA,UAAS;AAClB,YAAI,CAACA,MAAM,QAAO;AAClB,eAAO,QAAQA,MAAK,KAAK,KAAKA,MAAK,KAAK,UAAUA,MAAK;AAAA,MACzD;AAAA,MAEA;AAAA,MACA,SAAS,MAAM;AACb,kBAAU,QAAQ;AAClB,0BAAkB,QAAQ;AAC1B,kBAAA;AAAA,MACF;AAAA,MACA,WAAW,CAAC,QAAQ;AAClB,iBAAS,QAAQ,IAAI;AACrB,oBAAY,GAAG;AAAA,MACjB;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAGF,WAAS,YAAY;AACnB,sBAAkB,QAAQ;AAC1B,YAAA;AAAA,EACF;AAEA,WAAS,iBAAiB;AACxB,sBAAkB,QAAQ;AAC1B,WAAO,aAAA;AAAA,EACT;AAEA,WAAS,aAAa;AACpB,sBAAkB,QAAQ;AAC1B,aAAA;AAAA,EACF;AAEA,WAAS,kBAAkB;AACzB,sBAAkB,QAAQ;AAC1B,WAAO,cAAA;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,cAAc;AAAA,IACd;AAAA,IACA,UAAU;AAAA,IACV,eAAe;AAAA,IACf;AAAA,EAAA;AAEJ;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ref, onActivated, unref, onDeactivated, onBeforeUnmount } from "vue";
|
|
2
2
|
import { usePagination } from "../../node_modules/.pnpm/vue-request@2.0.4_vue@3.5.26_typescript@5.9.3_/node_modules/vue-request/dist/index.es.mjs";
|
|
3
3
|
import { isEmpty, easyCopy } from "../../utils/common.mjs";
|
|
4
|
-
import "../../_virtual/index.mjs";
|
|
5
4
|
import { suspectedWrapperPromise, to } from "../../utils/promise.mjs";
|
|
6
5
|
function useServicePagination({
|
|
7
6
|
service,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.mjs","sources":["../../../src/hooks/useService/pagination.ts"],"sourcesContent":["import type {\n ServicePaginationOptions,\n ServicePageParams,\n ServicePagination,\n ServicePageDataType,\n ServicePageRes,\n UseServicePaginationResult,\n ServiceMaybePageParams\n} from './types'\nimport { onActivated, onBeforeUnmount, onDeactivated, ref, unref } from 'vue'\nimport { usePagination } from 'vue-request'\nimport { easyCopy, isEmpty, suspectedWrapperPromise, to } from '../../utils'\n\nexport function useServicePagination<\n D = unknown,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination\n>({\n service,\n manual,\n cacheKey,\n cacheTime,\n pollingInterval,\n transformParams,\n transformRes,\n pagination,\n onBefore,\n onAfter,\n onSuccess,\n onError\n}: ServicePaginationOptions<D, R, P, TP, Pag> & {}) {\n const firstLoad = ref(false)\n const manualTriggerLoad = ref(false)\n const dataList = ref<D[]>([])\n\n const {\n data,\n loading,\n error,\n params,\n current,\n pageSize,\n total,\n totalPage,\n changeCurrent,\n changePageSize,\n changePagination,\n runAsync,\n run,\n cancel,\n refresh,\n refreshAsync,\n mutate\n } = usePagination<ServicePageDataType<D>>(\n async (params?: { page?: number; size?: number }) => {\n const res: ServicePageDataType<D> = { list: [], page: 1, total: 0 }\n const paginationV = unref(pagination)\n\n const currentParams =\n paginationV !== false\n ? {\n pageNum: params?.page ?? 1,\n pageSize: params?.size ?? paginationV?.pageSize ?? 10\n }\n : undefined\n\n if (currentParams?.pageNum === 1 || isEmpty(currentParams?.pageNum)) firstLoad.value = true\n\n let tParams: TP | undefined\n if (transformParams) {\n const [tpErr, tpRes] = await suspectedWrapperPromise(\n transformParams(\n (currentParams ? easyCopy(currentParams) : currentParams) as ServiceMaybePageParams<Pag>\n )\n )\n if (tpErr) throw tpErr\n\n tParams = tpRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as TP)))\n if (serviceErr) throw serviceErr\n\n let temp: ServicePageRes<D> | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n temp = trRes\n } else {\n temp = serviceRes as ServicePageRes<D>\n }\n\n if (!temp.records) temp.records = []\n if (isEmpty(temp.total)) temp.total = temp.records.length\n\n if (!paginationV || currentParams?.pageNum === 1) {\n res.list = temp.records\n } else {\n res.list = res.list.concat(temp.records)\n }\n\n if (currentParams) {\n res.page = currentParams?.pageNum\n res.size = currentParams?.pageSize\n }\n res.total = temp.total\n\n return res\n },\n {\n manual,\n cacheKey,\n cacheTime,\n pollingInterval,\n pagination: {\n currentKey: 'page',\n pageSizeKey: 'size',\n totalKey: 'total'\n },\n onBefore,\n onAfter: () => {\n firstLoad.value = false\n manualTriggerLoad.value = false\n onAfter?.()\n },\n onSuccess: (res) => {\n dataList.value = res.list\n onSuccess?.(res)\n },\n onError\n }\n )\n\n function reChangeCurrent(current: number) {\n manualTriggerLoad.value = true\n changeCurrent(current)\n }\n\n function reChangePageSize(pageSize: number) {\n manualTriggerLoad.value = true\n changePageSize(pageSize)\n }\n\n function reChangePagination(current: number, pageSize: number) {\n manualTriggerLoad.value = true\n changePagination(current, pageSize)\n }\n\n function reRefresh() {\n manualTriggerLoad.value = true\n refresh()\n }\n\n function reRefreshAsync() {\n manualTriggerLoad.value = true\n refreshAsync()\n }\n\n onActivated(() => {\n if (!manual && !isEmpty(unref(pollingInterval))) reRefresh()\n })\n\n onDeactivated(() => {\n if (!isEmpty(unref(pollingInterval))) cancel()\n })\n\n onBeforeUnmount(() => {\n if (!isEmpty(unref(pollingInterval))) cancel()\n })\n\n return {\n data,\n dataList,\n firstLoad,\n manualTriggerLoad,\n loading,\n error,\n params,\n current,\n pageSize,\n total,\n totalPage,\n changeCurrent: reChangeCurrent,\n changePageSize: reChangePageSize,\n changePagination: reChangePagination,\n runAsync,\n run,\n cancel,\n refresh: reRefresh,\n refreshAsync: reRefreshAsync,\n mutate\n } as UseServicePaginationResult\n}\n"],"names":["params","current","pageSize"],"mappings":"
|
|
1
|
+
{"version":3,"file":"pagination.mjs","sources":["../../../src/hooks/useService/pagination.ts"],"sourcesContent":["import type {\n ServicePaginationOptions,\n ServicePageParams,\n ServicePagination,\n ServicePageDataType,\n ServicePageRes,\n UseServicePaginationResult,\n ServiceMaybePageParams\n} from './types'\nimport { onActivated, onBeforeUnmount, onDeactivated, ref, unref } from 'vue'\nimport { usePagination } from 'vue-request'\nimport { easyCopy, isEmpty, suspectedWrapperPromise, to } from '../../utils'\n\nexport function useServicePagination<\n D = unknown,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination\n>({\n service,\n manual,\n cacheKey,\n cacheTime,\n pollingInterval,\n transformParams,\n transformRes,\n pagination,\n onBefore,\n onAfter,\n onSuccess,\n onError\n}: ServicePaginationOptions<D, R, P, TP, Pag> & {}) {\n const firstLoad = ref(false)\n const manualTriggerLoad = ref(false)\n const dataList = ref<D[]>([])\n\n const {\n data,\n loading,\n error,\n params,\n current,\n pageSize,\n total,\n totalPage,\n changeCurrent,\n changePageSize,\n changePagination,\n runAsync,\n run,\n cancel,\n refresh,\n refreshAsync,\n mutate\n } = usePagination<ServicePageDataType<D>>(\n async (params?: { page?: number; size?: number }) => {\n const res: ServicePageDataType<D> = { list: [], page: 1, total: 0 }\n const paginationV = unref(pagination)\n\n const currentParams =\n paginationV !== false\n ? {\n pageNum: params?.page ?? 1,\n pageSize: params?.size ?? paginationV?.pageSize ?? 10\n }\n : undefined\n\n if (currentParams?.pageNum === 1 || isEmpty(currentParams?.pageNum)) firstLoad.value = true\n\n let tParams: TP | undefined\n if (transformParams) {\n const [tpErr, tpRes] = await suspectedWrapperPromise(\n transformParams(\n (currentParams ? easyCopy(currentParams) : currentParams) as ServiceMaybePageParams<Pag>\n )\n )\n if (tpErr) throw tpErr\n\n tParams = tpRes\n }\n\n const [serviceErr, serviceRes] = await to(service(tParams || (currentParams as TP)))\n if (serviceErr) throw serviceErr\n\n let temp: ServicePageRes<D> | undefined\n if (transformRes) {\n const [trErr, trRes] = await suspectedWrapperPromise(transformRes(serviceRes))\n if (trErr) throw trErr\n\n temp = trRes\n } else {\n temp = serviceRes as ServicePageRes<D>\n }\n\n if (!temp.records) temp.records = []\n if (isEmpty(temp.total)) temp.total = temp.records.length\n\n if (!paginationV || currentParams?.pageNum === 1) {\n res.list = temp.records\n } else {\n res.list = res.list.concat(temp.records)\n }\n\n if (currentParams) {\n res.page = currentParams?.pageNum\n res.size = currentParams?.pageSize\n }\n res.total = temp.total\n\n return res\n },\n {\n manual,\n cacheKey,\n cacheTime,\n pollingInterval,\n pagination: {\n currentKey: 'page',\n pageSizeKey: 'size',\n totalKey: 'total'\n },\n onBefore,\n onAfter: () => {\n firstLoad.value = false\n manualTriggerLoad.value = false\n onAfter?.()\n },\n onSuccess: (res) => {\n dataList.value = res.list\n onSuccess?.(res)\n },\n onError\n }\n )\n\n function reChangeCurrent(current: number) {\n manualTriggerLoad.value = true\n changeCurrent(current)\n }\n\n function reChangePageSize(pageSize: number) {\n manualTriggerLoad.value = true\n changePageSize(pageSize)\n }\n\n function reChangePagination(current: number, pageSize: number) {\n manualTriggerLoad.value = true\n changePagination(current, pageSize)\n }\n\n function reRefresh() {\n manualTriggerLoad.value = true\n refresh()\n }\n\n function reRefreshAsync() {\n manualTriggerLoad.value = true\n refreshAsync()\n }\n\n onActivated(() => {\n if (!manual && !isEmpty(unref(pollingInterval))) reRefresh()\n })\n\n onDeactivated(() => {\n if (!isEmpty(unref(pollingInterval))) cancel()\n })\n\n onBeforeUnmount(() => {\n if (!isEmpty(unref(pollingInterval))) cancel()\n })\n\n return {\n data,\n dataList,\n firstLoad,\n manualTriggerLoad,\n loading,\n error,\n params,\n current,\n pageSize,\n total,\n totalPage,\n changeCurrent: reChangeCurrent,\n changePageSize: reChangePageSize,\n changePagination: reChangePagination,\n runAsync,\n run,\n cancel,\n refresh: reRefresh,\n refreshAsync: reRefreshAsync,\n mutate\n } as UseServicePaginationResult\n}\n"],"names":["params","current","pageSize"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTplRefsList.mjs","sources":["../../src/hooks/useTplRefsList.ts"],"sourcesContent":["import type { Ref } from 'vue'\nimport { ref as deepRef, onBeforeUpdate } from 'vue'\nimport { isEmpty } from '../utils'\n\nexport type TemplateRefsList<T> = T[] & {\n set: (el: object | null, index?: number) => void\n}\n\n/**\n * 获取 refs\n * @param onBeforeUpdateClear false 时 set 记得传入 index\n * @returns\n */\nexport function useTplRefsList<T = Element>(\n onBeforeUpdateClear = true\n): Readonly<Ref<Readonly<TemplateRefsList<T>>>> {\n const refs = deepRef<unknown>([]) as Ref<TemplateRefsList<T>>\n refs.value.set = (el: object | null, index?: number) => {\n if (!el) return\n\n if (isEmpty(index)) refs.value.push(el as T)\n else refs.value[index] = el as T\n }\n\n onBeforeUpdate(() => {\n if (onBeforeUpdateClear) refs.value.length = 0\n })\n return refs\n}\n"],"names":["deepRef"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTplRefsList.mjs","sources":["../../src/hooks/useTplRefsList.ts"],"sourcesContent":["import type { Ref } from 'vue'\nimport { ref as deepRef, onBeforeUpdate } from 'vue'\nimport { isEmpty } from '../utils'\n\nexport type TemplateRefsList<T> = T[] & {\n set: (el: object | null, index?: number) => void\n}\n\n/**\n * 获取 refs\n * @param onBeforeUpdateClear false 时 set 记得传入 index\n * @returns\n */\nexport function useTplRefsList<T = Element>(\n onBeforeUpdateClear = true\n): Readonly<Ref<Readonly<TemplateRefsList<T>>>> {\n const refs = deepRef<unknown>([]) as Ref<TemplateRefsList<T>>\n refs.value.set = (el: object | null, index?: number) => {\n if (!el) return\n\n if (isEmpty(index)) refs.value.push(el as T)\n else refs.value[index] = el as T\n }\n\n onBeforeUpdate(() => {\n if (onBeforeUpdateClear) refs.value.length = 0\n })\n return refs\n}\n"],"names":["deepRef"],"mappings":";;AAaO,SAAS,eACd,sBAAsB,MACwB;AAC9C,QAAM,OAAOA,IAAiB,EAAE;AAChC,OAAK,MAAM,MAAM,CAAC,IAAmB,UAAmB;AACtD,QAAI,CAAC,GAAI;AAET,QAAI,QAAQ,KAAK,EAAG,MAAK,MAAM,KAAK,EAAO;AAAA,QACtC,MAAK,MAAM,KAAK,IAAI;AAAA,EAC3B;AAEA,iBAAe,MAAM;AACnB,QAAI,oBAAqB,MAAK,MAAM,SAAS;AAAA,EAC/C,CAAC;AACD,SAAO;AACT;"}
|
package/dist/index.mjs
CHANGED
|
@@ -13,6 +13,7 @@ import { buildTree, toArr } from "./utils/conversion.mjs";
|
|
|
13
13
|
import { MD5, decryptBase64, encryptBase64, encryptWithAes, generateAesKey, generateRandomString } from "./utils/crypto.mjs";
|
|
14
14
|
import { easyDownload } from "./utils/download.mjs";
|
|
15
15
|
import { b2mb, cutFileSuffix, cutFilename, isTypeByName } from "./utils/file.mjs";
|
|
16
|
+
import { formatGlob } from "./utils/glob.mjs";
|
|
16
17
|
import { decrypt, encrypt } from "./utils/jsencrypt.mjs";
|
|
17
18
|
import { parseRelaxedJSON } from "./utils/json.mjs";
|
|
18
19
|
import { abortWrapper, suspectedWrapperPromise, to, waitTime } from "./utils/promise.mjs";
|
|
@@ -41,6 +42,7 @@ export {
|
|
|
41
42
|
extractSlotsWithPrefix,
|
|
42
43
|
extractSlotsWithoutPrefix,
|
|
43
44
|
filterSlots,
|
|
45
|
+
formatGlob,
|
|
44
46
|
generateAesKey,
|
|
45
47
|
generateRandomString,
|
|
46
48
|
getUrlParam,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function formatGlob<T = any>(data: Record<string, T>, removeSuffix?: boolean): Record<string, T>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function formatGlob(data, removeSuffix) {
|
|
2
|
+
const map = {};
|
|
3
|
+
for (const key in data) {
|
|
4
|
+
const keySplit = key.split("/");
|
|
5
|
+
let name = keySplit[keySplit.length - 1];
|
|
6
|
+
if (removeSuffix) {
|
|
7
|
+
name = name.slice(0, name.lastIndexOf("."));
|
|
8
|
+
}
|
|
9
|
+
map[name] = data[key];
|
|
10
|
+
}
|
|
11
|
+
return map;
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
formatGlob
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=glob.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.mjs","sources":["../../src/utils/glob.ts"],"sourcesContent":["/**\n * 处理 glob\n * @param data 数据\n * @param removeSuffix 是否去除后缀\n * @returns 处理后的数据\n */\nexport function formatGlob<T = any>(data: Record<string, T>, removeSuffix?: boolean) {\n const map: Record<string, T> = {}\n for (const key in data) {\n const keySplit = key.split('/')\n let name = keySplit[keySplit.length - 1]\n if (removeSuffix) {\n name = name.slice(0, name.lastIndexOf('.'))\n }\n map[name] = data[key]\n }\n\n return map\n}\n"],"names":[],"mappings":"AAMO,SAAS,WAAoB,MAAyB,cAAwB;AACnF,QAAM,MAAyB,CAAA;AAC/B,aAAW,OAAO,MAAM;AACtB,UAAM,WAAW,IAAI,MAAM,GAAG;AAC9B,QAAI,OAAO,SAAS,SAAS,SAAS,CAAC;AACvC,QAAI,cAAc;AAChB,aAAO,KAAK,MAAM,GAAG,KAAK,YAAY,GAAG,CAAC;AAAA,IAC5C;AACA,QAAI,IAAI,IAAI,KAAK,GAAG;AAAA,EACtB;AAEA,SAAO;AACT;"}
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/str.mjs
CHANGED
|
@@ -11,7 +11,7 @@ function camelize(str) {
|
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
13
|
function kebabCase(str, separator = "-") {
|
|
14
|
-
return str.replace(/([A-Z])/g, `${separator}$1`).toLowerCase();
|
|
14
|
+
return str.replace(/([A-Z])/g, `${separator}$1`).toLowerCase().replace(new RegExp(`^\\${separator}`), "");
|
|
15
15
|
}
|
|
16
16
|
export {
|
|
17
17
|
camelize,
|
package/dist/utils/str.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"str.mjs","sources":["../../src/utils/str.ts"],"sourcesContent":["/**\n * 首字母转换\n * @param str 要转换的string\n * @param isLowerCase 首字母是否小写(默认大写)\n * @returns 结果\n */\nexport function initialConversion(str: string, isLowerCase?: boolean) {\n if (!isLowerCase) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n } else {\n return str.charAt(0).toLowerCase() + str.slice(1)\n }\n}\n\n/**\n * 驼峰化\n * @param str\n * @returns 结果\n */\nexport function camelize(str: string) {\n return str.replace(/-|_(\\w)/g, (_, c) => {\n return c ? c.toUpperCase() : ''\n })\n}\n\n/**\n * 驼峰转短横线\n * @param str\n * @param separator 分隔符(默认-)\n * @returns 结果\n */\nexport function kebabCase(str: string, separator = '-') {\n return str.replace(/([A-Z])/g, `${separator}$1`).toLowerCase()\n}\n"],"names":[],"mappings":"AAMO,SAAS,kBAAkB,KAAa,aAAuB;AACpE,MAAI,CAAC,aAAa;AAChB,WAAO,IAAI,OAAO,CAAC,EAAE,gBAAgB,IAAI,MAAM,CAAC;AAAA,EAClD,OAAO;AACL,WAAO,IAAI,OAAO,CAAC,EAAE,gBAAgB,IAAI,MAAM,CAAC;AAAA,EAClD;AACF;AAOO,SAAS,SAAS,KAAa;AACpC,SAAO,IAAI,QAAQ,YAAY,CAAC,GAAG,MAAM;AACvC,WAAO,IAAI,EAAE,YAAA,IAAgB;AAAA,EAC/B,CAAC;AACH;AAQO,SAAS,UAAU,KAAa,YAAY,KAAK;AACtD,SAAO,IAAI,QAAQ,YAAY,GAAG,SAAS,IAAI,EAAE,YAAA;
|
|
1
|
+
{"version":3,"file":"str.mjs","sources":["../../src/utils/str.ts"],"sourcesContent":["/**\n * 首字母转换\n * @param str 要转换的string\n * @param isLowerCase 首字母是否小写(默认大写)\n * @returns 结果\n */\nexport function initialConversion(str: string, isLowerCase?: boolean) {\n if (!isLowerCase) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n } else {\n return str.charAt(0).toLowerCase() + str.slice(1)\n }\n}\n\n/**\n * 驼峰化\n * @param str\n * @returns 结果\n */\nexport function camelize(str: string) {\n return str.replace(/-|_(\\w)/g, (_, c) => {\n return c ? c.toUpperCase() : ''\n })\n}\n\n/**\n * 驼峰转短横线\n * @param str\n * @param separator 分隔符(默认-)\n * @returns 结果\n */\nexport function kebabCase(str: string, separator = '-') {\n return str.replace(/([A-Z])/g, `${separator}$1`).toLowerCase().replace(new RegExp(`^\\\\${separator}`), '')\n}\n"],"names":[],"mappings":"AAMO,SAAS,kBAAkB,KAAa,aAAuB;AACpE,MAAI,CAAC,aAAa;AAChB,WAAO,IAAI,OAAO,CAAC,EAAE,gBAAgB,IAAI,MAAM,CAAC;AAAA,EAClD,OAAO;AACL,WAAO,IAAI,OAAO,CAAC,EAAE,gBAAgB,IAAI,MAAM,CAAC;AAAA,EAClD;AACF;AAOO,SAAS,SAAS,KAAa;AACpC,SAAO,IAAI,QAAQ,YAAY,CAAC,GAAG,MAAM;AACvC,WAAO,IAAI,EAAE,YAAA,IAAgB;AAAA,EAC/B,CAAC;AACH;AAQO,SAAS,UAAU,KAAa,YAAY,KAAK;AACtD,SAAO,IAAI,QAAQ,YAAY,GAAG,SAAS,IAAI,EAAE,YAAA,EAAc,QAAQ,IAAI,OAAO,MAAM,SAAS,EAAE,GAAG,EAAE;AAC1G;"}
|