qidian-shared 1.0.39 → 1.0.41
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/useService/loadMore.mjs.map +1 -1
- package/dist/hooks/useService/types.d.ts +1 -0
- package/dist/index.mjs +2 -1
- package/dist/utils/promise.d.ts +4 -0
- package/dist/utils/promise.mjs +8 -0
- package/dist/utils/promise.mjs.map +1 -1
- package/dist/utils/str.mjs.map +1 -1
- package/dist/utils/validator.d.ts +1 -1
- package/dist/utils/validator.mjs +1 -1
- package/dist/utils/validator.mjs.map +1 -1
- package/dist/vite/qidian-vite-plugin.cjs.js +1 -4
- package/dist/vite/qidian-vite-plugin.cjs.js.map +1 -1
- package/dist/vite/qidian-vite-plugin.es.js +1 -4
- package/dist/vite/qidian-vite-plugin.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 :
|
|
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;"}
|
package/dist/index.mjs
CHANGED
|
@@ -15,13 +15,14 @@ import { easyDownload } from "./utils/download.mjs";
|
|
|
15
15
|
import { b2mb, cutFileSuffix, cutFilename, isTypeByName } from "./utils/file.mjs";
|
|
16
16
|
import { decrypt, encrypt } from "./utils/jsencrypt.mjs";
|
|
17
17
|
import { parseRelaxedJSON } from "./utils/json.mjs";
|
|
18
|
-
import { suspectedWrapperPromise, to, waitTime } from "./utils/promise.mjs";
|
|
18
|
+
import { abortWrapper, suspectedWrapperPromise, to, waitTime } from "./utils/promise.mjs";
|
|
19
19
|
import { camelize, initialConversion, kebabCase } from "./utils/str.mjs";
|
|
20
20
|
import { identifyType, isFunction, isObject, isPromise, objToStr, toTypeStr } from "./utils/type.mjs";
|
|
21
21
|
import { deleteUrlParams, getUrlParam, getUrlParams, setUrlParam } from "./utils/url.mjs";
|
|
22
22
|
import { validator, validatorRegs } from "./utils/validator.mjs";
|
|
23
23
|
export {
|
|
24
24
|
MD5,
|
|
25
|
+
abortWrapper,
|
|
25
26
|
b2mb,
|
|
26
27
|
buildTree,
|
|
27
28
|
camelize,
|
package/dist/utils/promise.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
export declare function to<T, U = Error>(promise: Promise<T>, errorExt?: object): Promise<[U, undefined] | [null, T]>;
|
|
2
2
|
export declare function suspectedWrapperPromise<T, U = Error>(p: T | Promise<T>): Promise<[U, undefined] | [null, T]>;
|
|
3
|
+
export interface AbortWrapperPromise<T = any> extends Promise<T> {
|
|
4
|
+
abort?: (reasonToAbort: any) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function abortWrapper<T>(p1: Promise<T>): AbortWrapperPromise<T>;
|
|
3
7
|
export declare function waitTime(time: number): Promise<void>;
|
package/dist/utils/promise.mjs
CHANGED
|
@@ -17,12 +17,20 @@ async function suspectedWrapperPromise(p) {
|
|
|
17
17
|
return [null, p];
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
function abortWrapper(p1) {
|
|
21
|
+
let abort;
|
|
22
|
+
const p2 = new Promise((resolve, reject) => abort = reject);
|
|
23
|
+
const p = Promise.race([p1, p2]);
|
|
24
|
+
p.abort = abort;
|
|
25
|
+
return p;
|
|
26
|
+
}
|
|
20
27
|
function waitTime(time) {
|
|
21
28
|
return new Promise((resolve) => {
|
|
22
29
|
setTimeout(resolve, time);
|
|
23
30
|
});
|
|
24
31
|
}
|
|
25
32
|
export {
|
|
33
|
+
abortWrapper,
|
|
26
34
|
suspectedWrapperPromise,
|
|
27
35
|
to,
|
|
28
36
|
waitTime
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.mjs","sources":["../../src/utils/promise.ts"],"sourcesContent":["import { isPromise } from './type'\n\n/**\n * https://blog.grossman.io/how-to-write-async-await-without-try-catch-blocks-in-javascript/\n * @param promise\n * @param errorExt 你可以传递给 err 对象的附加信息\n * @returns [err, res]\n */\nexport function to<T, U = Error>(\n promise: Promise<T>,\n errorExt?: object\n): Promise<[U, undefined] | [null, T]> {\n return promise\n .then<[null, T]>((data: T) => [null, data])\n .catch<[U, undefined]>((err: U) => {\n if (errorExt) {\n const parsedError = { ...err, ...errorExt }\n return [parsedError, undefined]\n }\n\n return [err ?? (true as U), undefined]\n })\n}\n\n/**\n * 疑似Promise包装器\n * @param promise\n */\nexport async function suspectedWrapperPromise<T, U = Error>(\n p: T | Promise<T>\n): Promise<[U, undefined] | [null, T]> {\n if (isPromise(p)) {\n const [err, res] = await to<T, U>(p as Promise<T>)\n if (err) return [err, undefined]\n\n return [null, res as T]\n } else {\n return [null, p]\n }\n}\n\n/**\n * 等待\n * @param time 毫秒\n */\nexport function waitTime(time: number) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, time)\n })\n}\n"],"names":[],"mappings":";AAQO,SAAS,GACd,SACA,UACqC;AACrC,SAAO,QACJ,KAAgB,CAAC,SAAY,CAAC,MAAM,IAAI,CAAC,EACzC,MAAsB,CAAC,QAAW;AACjC,QAAI,UAAU;AACZ,YAAM,cAAc,EAAE,GAAG,KAAK,GAAG,SAAA;AACjC,aAAO,CAAC,aAAa,MAAS;AAAA,IAChC;AAEA,WAAO,CAAC,OAAQ,MAAY,MAAS;AAAA,EACvC,CAAC;AACL;AAMA,eAAsB,wBACpB,GACqC;AACrC,MAAI,UAAU,CAAC,GAAG;AAChB,UAAM,CAAC,KAAK,GAAG,IAAI,MAAM,GAAS,CAAe;AACjD,QAAI,IAAK,QAAO,CAAC,KAAK,MAAS;AAE/B,WAAO,CAAC,MAAM,GAAQ;AAAA,EACxB,OAAO;AACL,WAAO,CAAC,MAAM,CAAC;AAAA,EACjB;AACF;AAMO,SAAS,SAAS,MAAc;AACrC,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,eAAW,SAAS,IAAI;AAAA,EAC1B,CAAC;AACH;"}
|
|
1
|
+
{"version":3,"file":"promise.mjs","sources":["../../src/utils/promise.ts"],"sourcesContent":["import { isPromise } from './type'\n\n/**\n * https://blog.grossman.io/how-to-write-async-await-without-try-catch-blocks-in-javascript/\n * @param promise\n * @param errorExt 你可以传递给 err 对象的附加信息\n * @returns [err, res]\n */\nexport function to<T, U = Error>(\n promise: Promise<T>,\n errorExt?: object\n): Promise<[U, undefined] | [null, T]> {\n return promise\n .then<[null, T]>((data: T) => [null, data])\n .catch<[U, undefined]>((err: U) => {\n if (errorExt) {\n const parsedError = { ...err, ...errorExt }\n return [parsedError, undefined]\n }\n\n return [err ?? (true as U), undefined]\n })\n}\n\n/**\n * 疑似Promise包装器\n * @param promise\n */\nexport async function suspectedWrapperPromise<T, U = Error>(\n p: T | Promise<T>\n): Promise<[U, undefined] | [null, T]> {\n if (isPromise(p)) {\n const [err, res] = await to<T, U>(p as Promise<T>)\n if (err) return [err, undefined]\n\n return [null, res as T]\n } else {\n return [null, p]\n }\n}\n\n/**\n * 中止包装器\n * @param {promise} p1\n * @return {promise}\n */\nexport interface AbortWrapperPromise<T = any> extends Promise<T> {\n abort?: (reasonToAbort: any) => void\n}\nexport function abortWrapper<T>(p1: Promise<T>) {\n let abort\n const p2 = new Promise((resolve, reject) => (abort = reject))\n const p = Promise.race([p1, p2]) as AbortWrapperPromise<T>\n p.abort = abort\n return p\n}\n\n/**\n * 等待\n * @param time 毫秒\n */\nexport function waitTime(time: number) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, time)\n })\n}\n"],"names":[],"mappings":";AAQO,SAAS,GACd,SACA,UACqC;AACrC,SAAO,QACJ,KAAgB,CAAC,SAAY,CAAC,MAAM,IAAI,CAAC,EACzC,MAAsB,CAAC,QAAW;AACjC,QAAI,UAAU;AACZ,YAAM,cAAc,EAAE,GAAG,KAAK,GAAG,SAAA;AACjC,aAAO,CAAC,aAAa,MAAS;AAAA,IAChC;AAEA,WAAO,CAAC,OAAQ,MAAY,MAAS;AAAA,EACvC,CAAC;AACL;AAMA,eAAsB,wBACpB,GACqC;AACrC,MAAI,UAAU,CAAC,GAAG;AAChB,UAAM,CAAC,KAAK,GAAG,IAAI,MAAM,GAAS,CAAe;AACjD,QAAI,IAAK,QAAO,CAAC,KAAK,MAAS;AAE/B,WAAO,CAAC,MAAM,GAAQ;AAAA,EACxB,OAAO;AACL,WAAO,CAAC,MAAM,CAAC;AAAA,EACjB;AACF;AAUO,SAAS,aAAgB,IAAgB;AAC9C,MAAI;AACJ,QAAM,KAAK,IAAI,QAAQ,CAAC,SAAS,WAAY,QAAQ,MAAO;AAC5D,QAAM,IAAI,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/B,IAAE,QAAQ;AACV,SAAO;AACT;AAMO,SAAS,SAAS,MAAc;AACrC,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,eAAW,SAAS,IAAI;AAAA,EAC1B,CAAC;AACH;"}
|
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}"],"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;AACnD;"}
|
|
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;AACnD;"}
|
|
@@ -3,4 +3,4 @@ export declare const validatorRegs: {
|
|
|
3
3
|
telephone: RegExp;
|
|
4
4
|
url: RegExp;
|
|
5
5
|
};
|
|
6
|
-
export declare function validator(value: string, type: keyof typeof validatorRegs | 'empty', required?: boolean): boolean | null;
|
|
6
|
+
export declare function validator(value: string | number | undefined | null, type: keyof typeof validatorRegs | 'empty', required?: boolean): boolean | null;
|
package/dist/utils/validator.mjs
CHANGED
|
@@ -9,7 +9,7 @@ function validator(value, type, required = false) {
|
|
|
9
9
|
const reg = validatorRegs[type];
|
|
10
10
|
if (!reg) throw new Error(`[validator] 没有 ${type} 类型`);
|
|
11
11
|
if (required && isEmpty(value)) return null;
|
|
12
|
-
return reg.test(value);
|
|
12
|
+
return isEmpty(value) ? false : reg.test(value + "");
|
|
13
13
|
}
|
|
14
14
|
export {
|
|
15
15
|
validator,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.mjs","sources":["../../src/utils/validator.ts"],"sourcesContent":["import { isEmpty } from './common'\n\nexport const validatorRegs = {\n cellPhone: /^1[3-9]\\d{9}$/,\n telephone: /^\\d{7,8}$/,\n url: /^((blob:)*(https|http|ftp|rtsp|mms|wss)?:\\/\\/)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/\n}\n\n/**\n * 验证器函数 - 检查输入值是否符合指定规则\n * @param value 要验证的字符串值\n * @param type 验证类型\n * @param required 是否必填,必填时空值返回 null\n * @returns 验证结果:通过返回 true,失败返回 false,必填为空返回 null\n * @throws Error 当传入不支持的验证类型时抛出异常\n */\nexport function validator(\n value: string,\n type: keyof typeof validatorRegs | 'empty',\n required = false\n) {\n if (type === 'empty') return isEmpty(value)\n\n const reg = validatorRegs[type]\n if (!reg) throw new Error(`[validator] 没有 ${type} 类型`)\n if (required && isEmpty(value)) return null\n\n return reg.test(value)\n}\n"],"names":[],"mappings":";AAEO,MAAM,gBAAgB;AAAA,EAC3B,WAAW;AAAA,EACX,WAAW;AAAA,EACX,KAAK;AACP;AAUO,SAAS,UACd,OACA,MACA,WAAW,OACX;AACA,MAAI,SAAS,QAAS,QAAO,QAAQ,KAAK;AAE1C,QAAM,MAAM,cAAc,IAAI;AAC9B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,kBAAkB,IAAI,KAAK;AACrD,MAAI,YAAY,QAAQ,KAAK,EAAG,QAAO;AAEvC,SAAO,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"validator.mjs","sources":["../../src/utils/validator.ts"],"sourcesContent":["import { isEmpty } from './common'\n\nexport const validatorRegs = {\n cellPhone: /^1[3-9]\\d{9}$/,\n telephone: /^\\d{7,8}$/,\n url: /^((blob:)*(https|http|ftp|rtsp|mms|wss)?:\\/\\/)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/\n}\n\n/**\n * 验证器函数 - 检查输入值是否符合指定规则\n * @param value 要验证的字符串值\n * @param type 验证类型\n * @param required 是否必填,必填时空值返回 null\n * @returns 验证结果:通过返回 true,失败返回 false,必填为空返回 null\n * @throws Error 当传入不支持的验证类型时抛出异常\n */\nexport function validator(\n value: string | number | undefined | null,\n type: keyof typeof validatorRegs | 'empty',\n required = false\n) {\n if (type === 'empty') return isEmpty(value)\n\n const reg = validatorRegs[type]\n if (!reg) throw new Error(`[validator] 没有 ${type} 类型`)\n if (required && isEmpty(value)) return null\n\n return isEmpty(value) ? false : reg.test(value + '')\n}\n"],"names":[],"mappings":";AAEO,MAAM,gBAAgB;AAAA,EAC3B,WAAW;AAAA,EACX,WAAW;AAAA,EACX,KAAK;AACP;AAUO,SAAS,UACd,OACA,MACA,WAAW,OACX;AACA,MAAI,SAAS,QAAS,QAAO,QAAQ,KAAK;AAE1C,QAAM,MAAM,cAAc,IAAI;AAC9B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,kBAAkB,IAAI,KAAK;AACrD,MAAI,YAAY,QAAQ,KAAK,EAAG,QAAO;AAEvC,SAAO,QAAQ,KAAK,IAAI,QAAQ,IAAI,KAAK,QAAQ,EAAE;AACrD;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qidian-vite-plugin.cjs.js","sources":["../../src/utils/vitePlugin.ts"],"sourcesContent":["import { writeFileSync, mkdirSync } from 'node:fs'\nimport { dirname } from 'node:path'\n\n/**\n * 开发代理配置生成器\n * @param env 环境变量\n * @param prefix 环境变量前缀,默认为VITE\n * @returns 代理配置对象\n */\nexport function devProxy(env: Record<string, string>, prefix = 'VITE') {\n const proxy: Record<string, string | object> = {}\n if (env.MODE === 'production' || env[`${prefix}_PROXY`] !== 'true') return proxy\n\n const baseUrlKey = `${prefix}_BASE_URL`\n for (const key in env) {\n const urlIndex = key.indexOf('_BASE_URL')\n if (urlIndex === -1) continue\n\n const isBase = key === baseUrlKey\n if (isBase) continue\n\n const isProxy = key.indexOf('_PROXY') !== -1\n if (isProxy) continue\n\n const url = env[key].endsWith('/') ? env[key] : `${env[key]}/`\n if (url === env[baseUrlKey]) continue\n\n const proxyUrl = env[`${prefix}_PROXY${key.slice(prefix.length)}`]\n if (!proxyUrl) continue\n\n proxy[url] = {\n target: proxyUrl,\n changeOrigin: true,\n ws: true,\n autoRewrite: false,\n pathRewrite: {\n // 兼容 vue-cli\n [url]: ''\n },\n rewrite: (path: string) => {\n const newPath = `/${path.replace(new RegExp(url), '')}`\n return newPath\n }\n }\n\n const otherProxy = `${env[`${prefix}_OTHER_PROXY${key.slice(prefix.length)}`]}`\n if (otherProxy !== 'undefined') {\n const reg = `^/(${otherProxy})(/.*|$)`\n proxy[reg] = {\n target: proxyUrl,\n changeOrigin: true,\n ws: true,\n autoRewrite: false,\n rewrite: (path: string) => {\n return path\n }\n }\n }\n }\n\n return proxy\n}\n\n/**\n * Vite 版本信息插件\n * 在构建完成后生成包含版本号和构建时间的 version.json 文件\n * @param options 配置选项\n * @param options.version 版本号字符串\n * @param options.outputPath 输出文件路径,相对于调用方的目录\n * @returns Vite 插件对象\n */\nexport function versionPlugin({
|
|
1
|
+
{"version":3,"file":"qidian-vite-plugin.cjs.js","sources":["../../src/utils/vitePlugin.ts"],"sourcesContent":["import { writeFileSync, mkdirSync } from 'node:fs'\nimport { dirname } from 'node:path'\n\n/**\n * 开发代理配置生成器\n * @param env 环境变量\n * @param prefix 环境变量前缀,默认为VITE\n * @returns 代理配置对象\n */\nexport function devProxy(env: Record<string, string>, prefix = 'VITE') {\n const proxy: Record<string, string | object> = {}\n if (env.MODE === 'production' || env[`${prefix}_PROXY`] !== 'true') return proxy\n\n const baseUrlKey = `${prefix}_BASE_URL`\n for (const key in env) {\n const urlIndex = key.indexOf('_BASE_URL')\n if (urlIndex === -1) continue\n\n const isBase = key === baseUrlKey\n if (isBase) continue\n\n const isProxy = key.indexOf('_PROXY') !== -1\n if (isProxy) continue\n\n const url = env[key].endsWith('/') ? env[key] : `${env[key]}/`\n if (url === env[baseUrlKey]) continue\n\n const proxyUrl = env[`${prefix}_PROXY${key.slice(prefix.length)}`]\n if (!proxyUrl) continue\n\n proxy[url] = {\n target: proxyUrl,\n changeOrigin: true,\n ws: true,\n autoRewrite: false,\n pathRewrite: {\n // 兼容 vue-cli\n [url]: ''\n },\n rewrite: (path: string) => {\n const newPath = `/${path.replace(new RegExp(url), '')}`\n return newPath\n }\n }\n\n const otherProxy = `${env[`${prefix}_OTHER_PROXY${key.slice(prefix.length)}`]}`\n if (otherProxy !== 'undefined') {\n const reg = `^/(${otherProxy})(/.*|$)`\n proxy[reg] = {\n target: proxyUrl,\n changeOrigin: true,\n ws: true,\n autoRewrite: false,\n rewrite: (path: string) => {\n return path\n }\n }\n }\n }\n\n return proxy\n}\n\n/**\n * Vite 版本信息插件\n * 在构建完成后生成包含版本号和构建时间的 version.json 文件\n * @param options 配置选项\n * @param options.version 版本号字符串\n * @param options.outputPath 输出文件路径,相对于调用方的目录\n * @returns Vite 插件对象\n */\nexport function versionPlugin({ version, outputPath }: { version: string; outputPath?: string }) {\n return {\n name: 'version-plugin',\n closeBundle() {\n const versionInfo = {\n code: 200,\n version: version || 'unknown',\n buildTime: new Date().toISOString()\n }\n const outputPathResolved = outputPath || 'dist/version.json'\n\n const dir = dirname(outputPathResolved)\n mkdirSync(dir, { recursive: true })\n\n writeFileSync(outputPathResolved, JSON.stringify(versionInfo, null, 2))\n }\n }\n}\n"],"names":["dirname","mkdirSync","writeFileSync"],"mappings":";;;;AASO,SAAS,SAAS,KAA6B,SAAS,QAAQ;AACrE,QAAM,QAAyC,CAAA;AAC/C,MAAI,IAAI,SAAS,gBAAgB,IAAI,GAAG,MAAM,QAAQ,MAAM,OAAQ,QAAO;AAE3E,QAAM,aAAa,GAAG,MAAM;AAC5B,aAAW,OAAO,KAAK;AACrB,UAAM,WAAW,IAAI,QAAQ,WAAW;AACxC,QAAI,aAAa,GAAI;AAErB,UAAM,SAAS,QAAQ;AACvB,QAAI,OAAQ;AAEZ,UAAM,UAAU,IAAI,QAAQ,QAAQ,MAAM;AAC1C,QAAI,QAAS;AAEb,UAAM,MAAM,IAAI,GAAG,EAAE,SAAS,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;AAC3D,QAAI,QAAQ,IAAI,UAAU,EAAG;AAE7B,UAAM,WAAW,IAAI,GAAG,MAAM,SAAS,IAAI,MAAM,OAAO,MAAM,CAAC,EAAE;AACjE,QAAI,CAAC,SAAU;AAEf,UAAM,GAAG,IAAI;AAAA,MACX,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,IAAI;AAAA,MACJ,aAAa;AAAA,MACb,aAAa;AAAA;AAAA,QAEX,CAAC,GAAG,GAAG;AAAA,MAAA;AAAA,MAET,SAAS,CAAC,SAAiB;AACzB,cAAM,UAAU,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;AACrD,eAAO;AAAA,MACT;AAAA,IAAA;AAGF,UAAM,aAAa,GAAG,IAAI,GAAG,MAAM,eAAe,IAAI,MAAM,OAAO,MAAM,CAAC,EAAE,CAAC;AAC7E,QAAI,eAAe,aAAa;AAC9B,YAAM,MAAM,MAAM,UAAU;AAC5B,YAAM,GAAG,IAAI;AAAA,QACX,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,SAAS,CAAC,SAAiB;AACzB,iBAAO;AAAA,QACT;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AACT;AAUO,SAAS,cAAc,EAAE,SAAS,cAAwD;AAC/F,SAAO;AAAA,IACL,MAAM;AAAA,IACN,cAAc;AACZ,YAAM,cAAc;AAAA,QAClB,MAAM;AAAA,QACN,SAAS,WAAW;AAAA,QACpB,YAAW,oBAAI,KAAA,GAAO,YAAA;AAAA,MAAY;AAEpC,YAAM,qBAAqB,cAAc;AAEzC,YAAM,MAAMA,UAAAA,QAAQ,kBAAkB;AACtCC,cAAAA,UAAU,KAAK,EAAE,WAAW,KAAA,CAAM;AAElCC,cAAAA,cAAc,oBAAoB,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAAA,IACxE;AAAA,EAAA;AAEJ;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qidian-vite-plugin.es.js","sources":["../../src/utils/vitePlugin.ts"],"sourcesContent":["import { writeFileSync, mkdirSync } from 'node:fs'\nimport { dirname } from 'node:path'\n\n/**\n * 开发代理配置生成器\n * @param env 环境变量\n * @param prefix 环境变量前缀,默认为VITE\n * @returns 代理配置对象\n */\nexport function devProxy(env: Record<string, string>, prefix = 'VITE') {\n const proxy: Record<string, string | object> = {}\n if (env.MODE === 'production' || env[`${prefix}_PROXY`] !== 'true') return proxy\n\n const baseUrlKey = `${prefix}_BASE_URL`\n for (const key in env) {\n const urlIndex = key.indexOf('_BASE_URL')\n if (urlIndex === -1) continue\n\n const isBase = key === baseUrlKey\n if (isBase) continue\n\n const isProxy = key.indexOf('_PROXY') !== -1\n if (isProxy) continue\n\n const url = env[key].endsWith('/') ? env[key] : `${env[key]}/`\n if (url === env[baseUrlKey]) continue\n\n const proxyUrl = env[`${prefix}_PROXY${key.slice(prefix.length)}`]\n if (!proxyUrl) continue\n\n proxy[url] = {\n target: proxyUrl,\n changeOrigin: true,\n ws: true,\n autoRewrite: false,\n pathRewrite: {\n // 兼容 vue-cli\n [url]: ''\n },\n rewrite: (path: string) => {\n const newPath = `/${path.replace(new RegExp(url), '')}`\n return newPath\n }\n }\n\n const otherProxy = `${env[`${prefix}_OTHER_PROXY${key.slice(prefix.length)}`]}`\n if (otherProxy !== 'undefined') {\n const reg = `^/(${otherProxy})(/.*|$)`\n proxy[reg] = {\n target: proxyUrl,\n changeOrigin: true,\n ws: true,\n autoRewrite: false,\n rewrite: (path: string) => {\n return path\n }\n }\n }\n }\n\n return proxy\n}\n\n/**\n * Vite 版本信息插件\n * 在构建完成后生成包含版本号和构建时间的 version.json 文件\n * @param options 配置选项\n * @param options.version 版本号字符串\n * @param options.outputPath 输出文件路径,相对于调用方的目录\n * @returns Vite 插件对象\n */\nexport function versionPlugin({
|
|
1
|
+
{"version":3,"file":"qidian-vite-plugin.es.js","sources":["../../src/utils/vitePlugin.ts"],"sourcesContent":["import { writeFileSync, mkdirSync } from 'node:fs'\nimport { dirname } from 'node:path'\n\n/**\n * 开发代理配置生成器\n * @param env 环境变量\n * @param prefix 环境变量前缀,默认为VITE\n * @returns 代理配置对象\n */\nexport function devProxy(env: Record<string, string>, prefix = 'VITE') {\n const proxy: Record<string, string | object> = {}\n if (env.MODE === 'production' || env[`${prefix}_PROXY`] !== 'true') return proxy\n\n const baseUrlKey = `${prefix}_BASE_URL`\n for (const key in env) {\n const urlIndex = key.indexOf('_BASE_URL')\n if (urlIndex === -1) continue\n\n const isBase = key === baseUrlKey\n if (isBase) continue\n\n const isProxy = key.indexOf('_PROXY') !== -1\n if (isProxy) continue\n\n const url = env[key].endsWith('/') ? env[key] : `${env[key]}/`\n if (url === env[baseUrlKey]) continue\n\n const proxyUrl = env[`${prefix}_PROXY${key.slice(prefix.length)}`]\n if (!proxyUrl) continue\n\n proxy[url] = {\n target: proxyUrl,\n changeOrigin: true,\n ws: true,\n autoRewrite: false,\n pathRewrite: {\n // 兼容 vue-cli\n [url]: ''\n },\n rewrite: (path: string) => {\n const newPath = `/${path.replace(new RegExp(url), '')}`\n return newPath\n }\n }\n\n const otherProxy = `${env[`${prefix}_OTHER_PROXY${key.slice(prefix.length)}`]}`\n if (otherProxy !== 'undefined') {\n const reg = `^/(${otherProxy})(/.*|$)`\n proxy[reg] = {\n target: proxyUrl,\n changeOrigin: true,\n ws: true,\n autoRewrite: false,\n rewrite: (path: string) => {\n return path\n }\n }\n }\n }\n\n return proxy\n}\n\n/**\n * Vite 版本信息插件\n * 在构建完成后生成包含版本号和构建时间的 version.json 文件\n * @param options 配置选项\n * @param options.version 版本号字符串\n * @param options.outputPath 输出文件路径,相对于调用方的目录\n * @returns Vite 插件对象\n */\nexport function versionPlugin({ version, outputPath }: { version: string; outputPath?: string }) {\n return {\n name: 'version-plugin',\n closeBundle() {\n const versionInfo = {\n code: 200,\n version: version || 'unknown',\n buildTime: new Date().toISOString()\n }\n const outputPathResolved = outputPath || 'dist/version.json'\n\n const dir = dirname(outputPathResolved)\n mkdirSync(dir, { recursive: true })\n\n writeFileSync(outputPathResolved, JSON.stringify(versionInfo, null, 2))\n }\n }\n}\n"],"names":[],"mappings":";;AASO,SAAS,SAAS,KAA6B,SAAS,QAAQ;AACrE,QAAM,QAAyC,CAAA;AAC/C,MAAI,IAAI,SAAS,gBAAgB,IAAI,GAAG,MAAM,QAAQ,MAAM,OAAQ,QAAO;AAE3E,QAAM,aAAa,GAAG,MAAM;AAC5B,aAAW,OAAO,KAAK;AACrB,UAAM,WAAW,IAAI,QAAQ,WAAW;AACxC,QAAI,aAAa,GAAI;AAErB,UAAM,SAAS,QAAQ;AACvB,QAAI,OAAQ;AAEZ,UAAM,UAAU,IAAI,QAAQ,QAAQ,MAAM;AAC1C,QAAI,QAAS;AAEb,UAAM,MAAM,IAAI,GAAG,EAAE,SAAS,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;AAC3D,QAAI,QAAQ,IAAI,UAAU,EAAG;AAE7B,UAAM,WAAW,IAAI,GAAG,MAAM,SAAS,IAAI,MAAM,OAAO,MAAM,CAAC,EAAE;AACjE,QAAI,CAAC,SAAU;AAEf,UAAM,GAAG,IAAI;AAAA,MACX,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,IAAI;AAAA,MACJ,aAAa;AAAA,MACb,aAAa;AAAA;AAAA,QAEX,CAAC,GAAG,GAAG;AAAA,MAAA;AAAA,MAET,SAAS,CAAC,SAAiB;AACzB,cAAM,UAAU,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;AACrD,eAAO;AAAA,MACT;AAAA,IAAA;AAGF,UAAM,aAAa,GAAG,IAAI,GAAG,MAAM,eAAe,IAAI,MAAM,OAAO,MAAM,CAAC,EAAE,CAAC;AAC7E,QAAI,eAAe,aAAa;AAC9B,YAAM,MAAM,MAAM,UAAU;AAC5B,YAAM,GAAG,IAAI;AAAA,QACX,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,SAAS,CAAC,SAAiB;AACzB,iBAAO;AAAA,QACT;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AACT;AAUO,SAAS,cAAc,EAAE,SAAS,cAAwD;AAC/F,SAAO;AAAA,IACL,MAAM;AAAA,IACN,cAAc;AACZ,YAAM,cAAc;AAAA,QAClB,MAAM;AAAA,QACN,SAAS,WAAW;AAAA,QACpB,YAAW,oBAAI,KAAA,GAAO,YAAA;AAAA,MAAY;AAEpC,YAAM,qBAAqB,cAAc;AAEzC,YAAM,MAAM,QAAQ,kBAAkB;AACtC,gBAAU,KAAK,EAAE,WAAW,KAAA,CAAM;AAElC,oBAAc,oBAAoB,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAAA,IACxE;AAAA,EAAA;AAEJ;"}
|