@cmtlyt/lingshu-toolkit 0.4.0 → 0.6.0
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/README.md +10 -0
- package/dist/665.js +1 -0
- package/dist/893.js +1 -0
- package/dist/react/index.js +1 -205
- package/dist/react/use-boolean/index.d.ts +2 -1
- package/dist/react/use-boolean/index.js +1 -16
- package/dist/react/use-controllable-value/index.d.ts +3 -3
- package/dist/react/use-controllable-value/index.js +1 -32
- package/dist/react/use-counter/index.d.ts +2 -2
- package/dist/react/use-counter/index.js +1 -49
- package/dist/react/use-force-update/index.d.ts +2 -1
- package/dist/react/use-force-update/index.js +1 -6
- package/dist/react/use-mount/index.d.ts +2 -1
- package/dist/react/use-mount/index.js +1 -16
- package/dist/react/use-ref-state/index.d.ts +3 -2
- package/dist/react/use-ref-state/index.js +1 -33
- package/dist/react/use-storage/index.d.ts +2 -1
- package/dist/react/use-storage/index.js +1 -15
- package/dist/react/use-title/index.d.ts +2 -2
- package/dist/react/use-title/index.js +1 -24
- package/dist/react/use-toggle/index.d.ts +4 -4
- package/dist/react/use-toggle/index.js +1 -26
- package/dist/react/use-valid-data/index.d.ts +5 -4
- package/dist/react/use-valid-data/index.js +1 -14
- package/dist/shared/allx/index.d.ts +2 -1
- package/dist/shared/allx/index.js +1 -44
- package/dist/shared/allx/types.d.ts +6 -0
- package/dist/shared/allx/utils.d.ts +9 -7
- package/dist/shared/allx/utils.js +1 -94
- package/dist/shared/animation/index.d.ts +3 -2
- package/dist/shared/animation/index.js +1 -77
- package/dist/shared/animation/types.d.ts +8 -0
- package/dist/shared/animation/utils.d.ts +3 -10
- package/dist/shared/animation/utils.js +1 -134
- package/dist/shared/api-controller/create-api.d.ts +26 -0
- package/dist/shared/api-controller/create-api.js +1 -0
- package/dist/shared/api-controller/index.d.ts +3 -0
- package/dist/shared/api-controller/index.js +1 -0
- package/dist/shared/api-controller/request.d.ts +7 -0
- package/dist/shared/api-controller/request.js +1 -0
- package/dist/shared/api-controller/types.d.ts +140 -0
- package/dist/shared/api-controller/types.js +0 -0
- package/dist/shared/api-controller/utils.d.ts +13 -0
- package/dist/shared/api-controller/utils.js +1 -0
- package/dist/shared/condition-merge/index.d.ts +6 -6
- package/dist/shared/condition-merge/index.js +1 -30
- package/dist/shared/create-storage-handler/index.d.ts +4 -3
- package/dist/shared/create-storage-handler/index.js +1 -68
- package/dist/shared/data-handler/index.d.ts +4 -3
- package/dist/shared/data-handler/index.js +1 -77
- package/dist/shared/data-handler/tools.d.ts +6 -23
- package/dist/shared/data-handler/tools.js +1 -48
- package/dist/shared/data-handler/types.d.ts +20 -2
- package/dist/shared/data-mixed-manager/constants.js +1 -9
- package/dist/shared/data-mixed-manager/index.js +1 -226
- package/dist/shared/data-mixed-manager/types.d.ts +1 -2
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.js +1 -2
- package/dist/shared/logger/index.d.ts +5 -0
- package/dist/shared/logger/index.js +1 -9
- package/dist/shared/priority-queue/index.d.ts +45 -0
- package/dist/shared/priority-queue/index.js +1 -0
- package/dist/shared/priority-queue/types.d.ts +10 -0
- package/dist/shared/priority-queue/types.js +0 -0
- package/dist/shared/priority-queue/utils.d.ts +7 -0
- package/dist/shared/priority-queue/utils.js +1 -0
- package/dist/shared/throw-error/index.d.ts +4 -3
- package/dist/shared/throw-error/index.js +1 -10
- package/dist/shared/try-call/index.d.ts +22 -0
- package/dist/shared/try-call/index.js +1 -0
- package/dist/shared/types/base.d.ts +2 -0
- package/dist/shared/types/index.js +1 -2
- package/dist/shared/types/pack.d.ts +3 -3
- package/dist/shared/types/pack.js +1 -1
- package/dist/shared/utils/base.d.ts +1 -1
- package/dist/shared/utils/base.js +1 -6
- package/dist/shared/utils/index.js +1 -2
- package/dist/shared/utils/verify.d.ts +1 -1
- package/dist/shared/utils/verify.js +1 -67
- package/dist/shared/with-resolvers/index.d.ts +5 -3
- package/dist/shared/with-resolvers/index.js +1 -15
- package/dist/vue/index.js +1 -29
- package/dist/vue/use-title/index.d.ts +2 -2
- package/dist/vue/use-title/index.js +1 -29
- package/package.json +29 -26
- package/dist/607.js +0 -737
- package/dist/707.js +0 -141
- package/dist/react/use-boolean/index.test.d.ts +0 -1
- package/dist/react/use-controllable-value/index.test.d.ts +0 -1
- package/dist/react/use-counter/index.test.d.ts +0 -1
- package/dist/react/use-force-update/index.test.d.ts +0 -1
- package/dist/react/use-mount/index.test.d.ts +0 -1
- package/dist/react/use-ref-state/index.test.d.ts +0 -1
- package/dist/react/use-storage/index.test.d.ts +0 -1
- package/dist/react/use-title/index.test.d.ts +0 -1
- package/dist/react/use-toggle/index.test.d.ts +0 -1
- package/dist/react/use-valid-data/index.test.d.ts +0 -1
- package/dist/shared/allx/__test__/allsettled.test.d.ts +0 -1
- package/dist/shared/allx/__test__/basic.test.d.ts +0 -1
- package/dist/shared/allx/__test__/circular-dependency.test.d.ts +0 -1
- package/dist/shared/allx/__test__/dependency.test.d.ts +0 -1
- package/dist/shared/allx/__test__/edge-cases.test.d.ts +0 -1
- package/dist/shared/allx/__test__/error-handling.test.d.ts +0 -1
- package/dist/shared/allx/__test__/execution-order.test.d.ts +0 -1
- package/dist/shared/allx/__test__/falsy-values.test.d.ts +0 -1
- package/dist/shared/allx/__test__/performance.test.d.ts +0 -1
- package/dist/shared/allx/__test__/type-checking.test.d.ts +0 -1
- package/dist/shared/allx/__test__/use-cases.test.d.ts +0 -1
- package/dist/shared/animation/__test__/animation-pause-resume.test.d.ts +0 -1
- package/dist/shared/animation/__test__/animation.test.d.ts +0 -1
- package/dist/shared/animation/__test__/step-animation.test.d.ts +0 -1
- package/dist/shared/animation/__test__/utils.test.d.ts +0 -1
- package/dist/shared/condition-merge/index.test-d.js +0 -108
- package/dist/shared/condition-merge/index.test.d.ts +0 -1
- package/dist/shared/create-storage-handler/index.browser.test.d.ts +0 -1
- package/dist/shared/create-storage-handler/index.test.d.ts +0 -1
- package/dist/shared/data-handler/index.test.d.ts +0 -1
- package/dist/shared/data-mixed-manager/__test__/basic.test.d.ts +0 -1
- package/dist/shared/data-mixed-manager/__test__/build-options.test.d.ts +0 -1
- package/dist/shared/data-mixed-manager/__test__/constructor-options.test.d.ts +0 -1
- package/dist/shared/data-mixed-manager/__test__/data-management.test.d.ts +0 -1
- package/dist/shared/data-mixed-manager/__test__/edge-cases.test.d.ts +0 -1
- package/dist/shared/data-mixed-manager/__test__/events.browser.test.d.ts +0 -1
- package/dist/shared/data-mixed-manager/__test__/events.test.d.ts +0 -1
- package/dist/shared/data-mixed-manager/__test__/fixed-slots.test.d.ts +0 -1
- package/dist/shared/data-mixed-manager/__test__/insert-mode.test.d.ts +0 -1
- package/dist/shared/throw-error/index.test.d.ts +0 -1
- package/dist/shared/utils/__test__/base.test.d.ts +0 -1
- package/dist/shared/utils/__test__/verify.test.d.ts +0 -1
- package/dist/shared/with-resolvers/index.test.d.ts +0 -1
- package/dist/test/utils.d.ts +0 -13
- package/dist/vue/use-title/index.test.d.ts +0 -1
package/dist/shared/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export * from './allx';
|
|
2
2
|
export * from './animation';
|
|
3
|
+
export * from './api-controller';
|
|
3
4
|
export * from './condition-merge';
|
|
4
5
|
export * from './create-storage-handler';
|
|
5
6
|
export * from './data-handler';
|
|
6
7
|
export * from './data-mixed-manager';
|
|
8
|
+
export * from './priority-queue';
|
|
7
9
|
export * from './throw-error';
|
|
10
|
+
export * from './try-call';
|
|
8
11
|
export * from './types';
|
|
9
12
|
export * from './utils';
|
|
10
13
|
export * from './with-resolvers';
|
package/dist/shared/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export { $dt, $t, createError, dataHandler, defineTransform, getType, identity, noop, throwError, throwType } from "../707.js";
|
|
2
|
-
export { allx, animation, conditionMerge, createStorageHandler, dataMixedManager, isArray, isBoolean, isEmptyArray, isEmptyString, isFalse, isFalsy, isFunction, isNaN, isNull, isNullOrUndef, isNumber, isObject, isPlainNumber, isPlainObject, isPlainSymbol, isPromiseLike, isPropertyKey, isString, isSymbol, isTrue, isTruthy, isUndef, stepAnimation, withResolvers } from "../607.js";
|
|
1
|
+
import{isEmptyArray as e,createError as t,isTrue as r,throwType as i,noop as n,isPromiseLike as a,isPlainNumber as l,$dt as s,dataHandler as o,$t as u,isNullOrUndef as h,logger as p,throwError as c,isFunction as d,getType as f,identity as m,isString as y}from"../665.js";function g(){let e;return"function"==typeof Promise.withResolvers?Promise.withResolvers():((e={promise:null,resolve:null,reject:null}).promise=new Promise((t,r)=>{e.resolve=t,e.reject=r}),e)}function x(e,t){e.forEach((r,i)=>{r.delete(t),0===r.size&&e.delete(i)})}let S=s({allSettled:u.boolean(!1)});async function b(e,r){let i,n,l,s=o(r||{},S,{unwrap:!0}),{allSettled:u}=s,p={},c=(i=new Map,n=new Set(Reflect.ownKeys(e)),l=new Map,{taskNameSet:n,createContextFor:e=>new Proxy({},{get(r,a){let o;if(!n.has(a))return Promise.reject(t("allx",`Unknown task "${String(a)}"`));let u=function(e,t,r){if(Reflect.getOwnPropertyDescriptor(e,t)){let i=e[t];return r?"rejected"===i.status?Promise.reject(i.reason):Promise.resolve(i.value):Promise.resolve(i)}}(p,a,s.allSettled);return h(u)?function(e,t,r){let i=new Set,n=[t],a=0;for(;a<n.length;){let t=n[a++];if(t===e)return!0;if(i.has(t))continue;i.add(t);let l=r.get(t);if(l){let e=l.values();for(let t=e.next();!t.done;t=e.next())n.push(t.value)}}return!1}(e,a,l)?Promise.reject(t("allx",`Circular dependency detected: "${String(e)}" -> "${String(a)}"`)):(l.set(e,(l.get(e)||new Set).add(a)),o=i.get(a)||g(),i.set(a,o),o.promise.then(t=>(l.get(e)?.delete(a),t),t=>{throw l.get(e)?.delete(a),t})):u}}),resolveDepFor:(e,t)=>{let r=i.get(e);r&&(r.resolve(t),i.delete(e)),x(l,e)},rejectDepFor:(e,t)=>{let r=i.get(e);r&&(r.reject(t),i.delete(e)),x(l,e)}}),f=r?r.allSettled?(e,t="fulfilled")=>"fulfilled"===t?{status:t,value:e}:{status:t,reason:e}:(e,t="fulfilled")=>e:(e,t="fulfilled")=>e,m=[];return(c.taskNameSet.forEach(async t=>{let r=e[t],i={$:c.createContextFor(t)},n=g();if(n.promise.then(e=>(p[t]=f(e,"fulfilled"),c.resolveDepFor(t,e),e),e=>{u&&(p[t]=f(e,"rejected")),c.rejectDepFor(t,e)}),m.push(n.promise),a(r))return void await r.then(n.resolve,n.reject);if(!d(r))return void n.resolve(r);try{let e=await r.call(i);n.resolve(e)}catch(e){n.reject(e)}}),u)?Promise.allSettled(m).then(()=>p):Promise.all(m).then(()=>p)}function w(e,t,r){let i=f(e),n={progress:0,valueFormatter:r},a=(e,t)=>{let{valueFormatter:r,progress:i}=n;return"number"!==f(e)?e:r(e+(t-e)*i)},l=(e,t)=>Array.from(e,(e,r)=>Array.isArray(e)?l(e,t[r]):"object"===f(e)?s(e,t[r]):a(e,t[r])),s=(e,t)=>{let r={},i=Reflect.ownKeys(e);for(let n=0;n<i.length;n++){let o=i[n],u=e[o],h=t[o];Array.isArray(e[o])?r[o]=l(u,h):"object"===f(u)?r[o]=s(u,h):r[o]=a(u,h)}return r},o=a;return"array"===i?o=l:"object"===i&&(o=s),r=>(n.progress=r,o(e,t))}function D(e,t,r){let n=f(e);if(n!==f(t)&&i("animation/stepAnimation","from and to must be the same type"),"array"===n){e.length!==t.length&&i("animation/stepAnimation","from and to must be the same length");let n=[Array.from({length:e.length}),Array.from({length:t.length})];for(let i=0;i<e.length;i++){let[a,l]=D(e[i],t[i],r);n[0][i]=a,n[1][i]=l}return n}if("object"===n){let n=Reflect.ownKeys(t),a=new Set(Reflect.ownKeys(e)),l=[{},{}];for(let s=0;s<n.length;s++){let o=n[s];a.has(o)||i("animation/stepAnimation",`from does not have this key: ${String(o)}`);let[u,h]=D(e[o],t[o],r);l[0][o]=u,l[1][o]=h}return l}return"number"!==n?[r(e),r(t)]:[e,t]}async function v(e,t,r){return new Promise((t,r)=>{let i=e();if(a(i))return i.then(t,r);t()}).catch(r??t.reject)}let A=s({autoStart:u.boolean(!0),easing:u.function(()=>m),onStart:u.function(()=>n),onStop:u.function(()=>n),onClear:u.function(()=>n),onUpdate:u.function(()=>n),onComplete:u.function(()=>n),formatterValue:u.function(()=>m),formatter:u.function(()=>m),parser:u.function(()=>m)});function*M(e,t,r,i={}){(!Number.isInteger(r)||r<=0)&&c("stepAnimation","step must be a positive integer",RangeError);let{parser:n=m,formatterValue:a=m,formatter:l}=o(i,A,{unwrap:!0}),[s,u]=D(e,t,n),h=w(s,u,a);for(let e=0;e<=r;e++){let t=l(h(e/r));yield t}}function R(e,t,r,i={}){let n;(r<=0||!Number.isInteger(r))&&c("animation","duration must be a positive integer",RangeError);let a=o(i,A,{unwrap:!0}),[l,s]=D(e,t,a.parser),{autoStart:u,easing:h,onComplete:p,onUpdate:d,formatterValue:f,formatter:m}=a,y=w(l,s,f),x=(...e)=>m(y(...e)),S=0,b=!1,M=function(e,t){let{onStart:r,onStop:i,onClear:n}=t,a=g(),l={stopSignal:!0,resolvers:a,stop:()=>{l.stopSignal=!0,i()},start:()=>{l.stopSignal=!1,r(),e()},clear:()=>{l.stopSignal=!0,n(),a.resolve(!0)}};return l}(()=>{let e=performance.now();if(S+=e,C(j)){S-=performance.now();return}b||(d(x(0)),b=!0)},a),{resolvers:P}=M,C=(n="function"==typeof globalThis.requestAnimationFrame?globalThis.requestAnimationFrame:e=>setTimeout(e,16),e=>!!M.stopSignal||(n(()=>v(e,P,e=>{M.stop(),P.reject(e)})),!1)),j=()=>{let e=performance.now()-S;d(x(h(Math.min(e/r,1)))),e<r?C(j)&&(S=-e):(p(),P.resolve(!1))};return!1!==u&&M.start(),{promise:P.promise,stop:M.stop,start:M.start,clear:M.clear}}let P=Symbol("EMPTY");function C(e,t,r){d(e)||i("tryCallFunc","callback is not a function");let n=(e,r,i)=>{if(d(t))try{r.errorResult=Reflect.apply(t,e,[i])}catch(e){r.error=e}else r.error=i;return r.errorResult},l=(e,t,i)=>{try{if(t.error!==P)throw t.error}finally{d(r)&&Reflect.apply(r,e,t.error===P?[i]:[t.error])}};return function(...t){let r={oriResult:P,errorResult:P,error:P},i=(async()=>{try{return r.oriResult=Reflect.apply(e,this,t),r.oriResult}catch(e){return n(this,r,e)}})().catch(e=>n(this,r,e));if(a(r.oriResult))return i.then(e=>(l(this,r,e),e));let s=r.oriResult===P?r.errorResult:r.oriResult;return l(this,r,s),s}}function j(e,t,r){return d(e)||i("tryCall","callback is not a function"),C(e,t,r).call(this)}let F=/^[a-z][a-z\d+\-.]*:/imu;function $(e){return!!e&&F.test(e)}function U(e,t){let r=t?t(e):e;switch(f(r)){case"object":case"array":case"number":case"boolean":case"function":return JSON.stringify(r);default:return r}}function E(e,t,r){return{$:e,$$:r,$$r:t,$updateBaseUrl(e){if($(e))t.baseUrl=e;else{let{origin:r}=globalThis.location||{};r||c("apiController.$updateBaseUrl","location.origin is undefined");let i=(e||"/").startsWith("/")?e||"":`/${e}`;t.baseUrl=`${r}${i}`}}}}function L(e,t=!1){let r=Reflect.ownKeys(e),i=[];for(let t=0;t<r.length;t++){let n=r[t];n.endsWith("Custom")&&i.push(n),y(e[n].url)||i.push(...L(e[n],!0))}return!t&&i.length>0&&p.warn("apiController.createApiWithMap","api 命名不应该使用 Custom 结尾, 因为这是一个内部实现的方法",i),i}async function O(e,t){let{baseUrl:r,url:n,method:a,parser:l,data:s,tdto:o,tvo:u,onResponse:p,...c}=e,f=function(e,t){if($(e))return new URL(e);$(t)||i("apiController.request","baseUrl 配置不合法, 必须是绝对路径");let r=new URL(t),n="/"===r.pathname?"":r.pathname.replace(/\/$/u,""),a=e.startsWith("/")?e:`/${e}`;return new URL(`${n}${a}`,r)}(n,r),m=a?.toUpperCase(),y=j(()=>{if(h(m)||"GET"===m||"HEAD"===m){let e=Object.keys(s||{});for(let t=0;t<e.length;++t)f.searchParams.append(e[t],s[e[t]]);return new Request(f,{...c,method:m})}let e=U(s,o);return new Request(f,{...c,method:m,body:e})}),g=await t(y),x=await j(()=>{if(p)return p(g,e);if(!l)return g.json();if("stream"===l)return g.body;let t=g[l];if(d(t))return Reflect.apply(t,g,[]);i("apiController.responseParser","Invalid parser")});return u?u(x):x}async function _(e){let{onRequest:t,...r}=e;return O(e,async i=>new Response(U(await (t&&t(i,e))),{...r}))}async function k(e){return O(e,fetch)}function T(e){let t=function(e,t){if(!e.includes("/:"))return e;t||i("apiController.parseParams","url 中存在 params 参数, params 配置不能为空, 请使用 custom 方法调用并传递 params 配置");let r=e.split("/"),n=[];for(let e=1;e<r.length;++e){if(":"!==r[e][0])continue;let i=r[e].slice(1),a=t[i];if(!(l(a)||a)){n.push(i);continue}let s=encodeURIComponent(String(a));r[e]=s}return n.length>0&&i("apiController.parseParams",`params 配置中缺少 [${n.join(", ")}] 参数`),r.join("/")}(e.url,e.params),{requestMode:r,requestModeMap:n}=e,a=(n||{})[r||""];return a?a({...e,url:t}):"mock"===r?_({...e,url:t}):k({...e,url:t})}let I=Symbol("fromDefine");function N(e,t){let i=e[I];delete e[I];let n=Object.create(null),a=t||{};r(i)||L(e);let l=E(e,a,t);return new Proxy(e,{get(e,t,r){if(Reflect.getOwnPropertyDescriptor(n,t))return n[t];let{instanceMember:s,api:o,isCustom:u=!1}=function(e,t,r,i){if(Reflect.getOwnPropertyDescriptor(i,t))return{instanceMember:i[t]};let n=y(t)&&Reflect.has(e,t),a=y(t)&&t.endsWith("Custom")&&!n,l=a?t.slice(0,-6):t;if(!Reflect.getOwnPropertyDescriptor(e,l))return;let s=Reflect.get(e,l,r);if(!a||y(s.url))return{api:s,isCustom:a}}(e,t,r,l)||{};if(s)return s;if(!o)return;let h=null;return h=y(o.url)?K({...o,[I]:i},a,u):N({...o,[I]:i},a),n[t]=h,h}})}function K(e,t,n){let a=e[I];delete e[I];let l=t||{};y(e.url)||i("apiController.createApi","入参应为 APIConfig 对象"),e.url.includes("/:")&&(r(a)||p.warn("apiController.createApi","url 中存在 params 参数, 使用 defineApi 或 defineApiMap 定义 API 或 API map 来获取更好的类型提示"),r(n)||i("apiController.createApi","url 中存在 params 参数, 不支持普通请求, 转为自定义请求"));let s=null;s=r(n)?(t,r)=>T({...l,...e,...r,url:e.url,data:t,oriUrl:e.url}):t=>T({...l,...e,data:t,oriUrl:e.url});let o=E(e,l,t);return $(e.url)||o.$updateBaseUrl(l.baseUrl),new Proxy(s,{get:(e,t,r)=>Reflect.getOwnPropertyDescriptor(o,t)?o[t]:Reflect.get(e,t,r)})}function q(e){return{...e,[I]:!0}}function z(e){return L(e),{...e,[I]:!0}}function B(e){return Array.isArray(e)?[]:{}}function H(e){return Array.isArray(e)||"object"==typeof e}function W(...e){let t=(1===e.length&&Array.isArray(e[0])?e[0]:e).map(e=>{let t=null;if(Array.isArray(e)){let[r,i,n]=e;t={condition:r,value:i,fullback:n}}else Object.getOwnPropertyDescriptor(e,"condition")?t=e:i("conditionMerge","input must be an ConditionItem");let r=H(t.value),n=void 0===t.fullback||H(t.fullback);return r&&n||i("conditionMerge","value and fullback must be an array or object"),t}),r=B((t[0]||{}).value),n=Array.isArray(r)?(e,t)=>Reflect.apply(Array.prototype.splice.bind(e,e.length,0),null,t):Object.assign;for(let e=0,i=t[e];e<t.length;i=t[++e])n(r,i.condition?i.value:i.fullback||B(i.value));return r}let Q={fixed:{fixedFlag:Symbol("fixed")},insert:{insertFlag:Symbol("insert")}},J=s({name:u.string("default"),fixedSlots:u.array([]),dataList:u.array([]),listener:u.object({})});class G extends EventTarget{addEventListener(...e){super.addEventListener.apply(this,e)}removeEventListener(...e){super.removeEventListener.apply(this,e)}options;fixedSlots=new Map;dataList=[];mixedData=[];lastMixedSlotIdx=-1;prevDataLength=0;isBatching=!1;constructor(e){super();let t=o(e||{},J,{unwrap:!0}),{fixedSlots:r,dataList:i,listener:n}=t;this.options=t,this.addFixedSlots(r,{lazy:!0}),this.appendList(i);try{this.initListener(n)}catch(e){c("dataMixedManager",e.message,e.constructor)}}initListener(e){let t=Object.keys(e);for(let r=0,i=t[r],n=e[i];r<t.length;n=e[i=t[++r]])this.addEventListener(i,n)}getTypeText(e){switch(e){case Q.fixed:return"fixed";case Q.insert:return"insert"}}buildSlotConfig(e,t){let r=this.getTypeText(e.type||t);return{...e,type:r,inputPosition:e.position,insertMode:e.insertMode??"cover"}}addFixedSlot(e,t){let r=this.reorderFixedSlots(this.buildSlotConfig(e,Q.fixed));return this.fixedSlots.set(r.position,r),this.buildMixedData(t),r.position}reorderFixedSlots(e){let{position:t,insertMode:r}=e;if(h(r)||"cover"===r||!this.fixedSlots.has(t))return{...e,inputPosition:t};let i="after"===r?t+1:t;for(let e=i+1,t=this.fixedSlots.get(e-1),r=this.fixedSlots.get(e);t;++e,t=r,r=this.fixedSlots.get(e))t.position=e,this.fixedSlots.set(e,t);return{...e,position:i,inputPosition:t}}addFixedSlots(t,r){if(e(t))return[];let i=this.batchUpdate(()=>t.map(e=>this.addFixedSlot(e)));return this.buildMixedData(r),i}deleteFixedSlot(e,t){this.fixedSlots.delete(e),this.buildMixedData(t)}deleteFixedSlots(t,r){e(t)||(this.batchUpdate(()=>t.forEach(e=>void this.deleteFixedSlot(e))),this.buildMixedData(r))}batchUpdate(e){try{return this.isBatching=!0,e()}finally{this.isBatching=!1}}clearFixedSlots(e){this.fixedSlots.clear(),this.buildMixedData(e)}appendList(t,r){e(t)||(this.dataList.push(...t),this.buildMixedData({...r,lazy:!0===(r||{}).lazy}))}clearList(){this.dataList.length=0,this.mixedData.length=0,this.dispatch("change",{mode:"clear",mixedData:this.getMixedData({mode:"rebuild"})}),this.dispatch("clear")}getMixedData(e){return this.buildMixedData({...e,lazy:!1}),this.mixedData.slice()}dispatch(e,t){let r={name:this.options.name,...t};this.dispatchEvent(new CustomEvent(e,{detail:r})),void 0!==globalThis.window&&globalThis.window.dispatchEvent(new CustomEvent(`[DMM]:${e}`,{detail:r}))}buildMixedData(e){if(this.isBatching)return;let{lazy:t,mode:r}=e||{};if("rebuild"===r&&(this.prevDataLength=0,this.lastMixedSlotIdx=-1),!1!==t||this.dataList.length<=this.prevDataLength)return;let i=this.prevDataLength,n=this.dataList.length,a=n-i;this.prevDataLength=n;let l=i>0,s=this.sliceSlots(l?this.mixedData.length:this.lastMixedSlotIdx,this.mixedData.length+a);this.lastMixedSlotIdx=s.at(-1)??this.lastMixedSlotIdx;let o=l?this.mixedData.length:0;this.mixedData.length=(l?a+o:n)+s.length;for(let e=0,t=s[e];i<n;++o)if(o===t){let r=this.fixedSlots.get(t);this.mixedData[o]={isFixed:!0,type:r.type,data:r.data},t=s[++e]}else this.mixedData[o]={isFixed:!1,type:"plain",data:this.dataList[i]},++i;this.dispatch("change",{mode:l?"patch":"rebuild",mixedData:this.mixedData.slice()})}sliceSlots(e,t=1/0){let r=-2,i=0;return Array.from(this.fixedSlots.keys()).sort((e,t)=>e-t).filter(n=>(n>=e&&n<t+i||n-1===r)&&(++i,r=n,!0))}insertSlot(e){let t=this.addFixedSlot({...e,type:Q.insert});return t>this.mixedData.length||this.buildMixedData({lazy:!1,mode:"rebuild"}),t}insertSlots(t){if(e(t))return[];let r=this.batchUpdate(()=>t.map(e=>this.insertSlot(e)));return this.buildMixedData({lazy:!1,mode:"rebuild"}),r}}function V(e){return new G(e)}let Y=new Set(["number","string","date"]);function X(e,t){return Y.has(f(e))&&Y.has(f(t))?e<t?-1:+(e>t):(p.warn("PriorityQueue",`Unsupported type: ${f(e)} ${f(t)}`),0)}function Z(e,t,r,i,n){if(e>=r)return t;let a=n(i[e].item,i[t].item);return a<0||0===a&&i[e].insertOrder<i[t].insertOrder?e:t}let ee=s({compare:u.function(()=>X),allowDuplicate:u.boolean(!1)});class et{heap=[];itemSet=new Set;compare;allowDuplicate;insertCounter=0;constructor(e={}){let{compare:t,allowDuplicate:r}=o(e||{},ee,{unwrap:!0});this.compare=t,this.allowDuplicate=r}swapItems(e,t){[this.heap[e],this.heap[t]]=[this.heap[t],this.heap[e]]}heapifyUp(e){let t=e;for(;t>0;){let e=Math.floor((t-1)/2),r=this.heap[t],i=this.heap[e];if(0>this.compare(r.item,i.item))this.swapItems(t,e),t=e;else break}}heapifyDown(e){let t=e,r=this.heap.length;for(;t<r;){let e=2*t+1,i=2*t+2,n=t;if(n=Z(e,n,r,this.heap,this.compare),(n=Z(i,n,r,this.heap,this.compare))===t)break;this.swapItems(t,n),t=n}}isDuplicate(e){return!this.allowDuplicate&&this.itemSet.has(e)}enqueue(e){if(this.isDuplicate(e)){let t=j(()=>"object"==typeof e&&null!==e?JSON.stringify(e):String(e),()=>Object.prototype.toString.call(e));return p.warn("PriorityQueue.enqueue",`Duplicate item detected: ${t}`),!1}let t={item:e,insertOrder:this.insertCounter++};return this.allowDuplicate||this.itemSet.add(e),this.heap.push(t),this.heapifyUp(this.heap.length-1),!0}enqueueMany(e){return e.map(e=>this.enqueue(e))}dequeue(){let e;if(0!==this.heap.length)return 1===this.heap.length?e=this.heap.pop().item:(e=this.heap[0].item,this.heap[0]=this.heap.pop(),this.heapifyDown(0)),this.itemSet.delete(e),e}peek(){if(0!==this.heap.length)return this.heap[0].item}size(){return this.heap.length}isEmpty(){return 0===this.heap.length}clear(){this.heap.length=0,this.itemSet.clear(),this.insertCounter=0}toArray(){let e=[...this.heap];return e.sort((e,t)=>{let r=this.compare(e.item,t.item);return 0!==r?r:e.insertOrder-t.insertOrder}),e.map(e=>e.item)}}function er(e){return new et(e)}Symbol("__PACK__");export{$dt,$dt as defineTransform,$t,createError,dataHandler,getType,identity,isArray,isBoolean,isEmptyArray,isEmptyString,isFalse,isFalsy,isFunction,isNaN,isNull,isNullOrUndef,isNumber,isObject,isPlainNumber,isPlainObject,isPlainSymbol,isPromiseLike,isPropertyKey,isString,isSymbol,isTrue,isTruthy,isUndef,noop,throwError,throwType}from"../665.js";export{createStorageHandler}from"../893.js";export{b as allx,R as animation,W as conditionMerge,K as createApi,N as createApiWithMap,V as dataMixedManager,q as defineApi,z as defineApiMap,er as priorityQueue,T as request,M as stepAnimation,j as tryCall,C as tryCallFunc,g as withResolvers};
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
type Logger = {
|
|
2
2
|
[K in keyof Omit<Console, 'table'> as Console[K] extends (...args: any[]) => any ? K : never]: Console[K] extends (...args: [any, ...infer AS]) => infer R ? (fnName: string, ...args: AS) => R : never;
|
|
3
3
|
};
|
|
4
|
+
declare global {
|
|
5
|
+
var $$lingshu$$: Partial<{
|
|
6
|
+
disableLogger: boolean;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
4
9
|
export declare const logger: Logger;
|
|
5
10
|
export {};
|
|
@@ -1,9 +1 @@
|
|
|
1
|
-
|
|
2
|
-
get (target, prop, receiver) {
|
|
3
|
-
const oldLog = Reflect.get(target, prop, receiver).bind(console);
|
|
4
|
-
return (fnName, ...args)=>{
|
|
5
|
-
oldLog(`[@cmtlyt/lingshu-toolkit#${fnName}]:`, ...args);
|
|
6
|
-
};
|
|
7
|
-
}
|
|
8
|
-
});
|
|
9
|
-
export { logger };
|
|
1
|
+
let e=new Proxy(console,{get(e,l,o){if((globalThis.$$lingshu$$||{}).disableLogger)return()=>void 0;let t=Reflect.get(e,l,o).bind(console);return(e,...l)=>{t(`[@cmtlyt/lingshu-toolkit#${e}]:`,...l)}}});export{e as logger};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { PriorityQueueOptions } from './types';
|
|
2
|
+
declare class PriorityQueue<T> {
|
|
3
|
+
private readonly heap;
|
|
4
|
+
private readonly itemSet;
|
|
5
|
+
private readonly compare;
|
|
6
|
+
private readonly allowDuplicate;
|
|
7
|
+
private insertCounter;
|
|
8
|
+
constructor(options?: PriorityQueueOptions<T>);
|
|
9
|
+
private swapItems;
|
|
10
|
+
private heapifyUp;
|
|
11
|
+
private heapifyDown;
|
|
12
|
+
private isDuplicate;
|
|
13
|
+
enqueue(item: T): boolean;
|
|
14
|
+
enqueueMany(items: T[]): boolean[];
|
|
15
|
+
dequeue(): T | undefined;
|
|
16
|
+
peek(): T | undefined;
|
|
17
|
+
size(): number;
|
|
18
|
+
isEmpty(): boolean;
|
|
19
|
+
clear(): void;
|
|
20
|
+
/**
|
|
21
|
+
* 返回队列中所有元素的有序数组副本
|
|
22
|
+
*
|
|
23
|
+
* @description
|
|
24
|
+
* 该方法返回一个新数组,包含队列中的所有元素,按照以下顺序排列:
|
|
25
|
+
* 1. 优先级从小到大(根据 compare 函数)
|
|
26
|
+
* 2. 相同优先级的元素按照插入顺序(FIFO)
|
|
27
|
+
*
|
|
28
|
+
* 注意:返回的是数组副本,修改返回的数组不会影响原队列
|
|
29
|
+
*
|
|
30
|
+
* @returns 按优先级和插入顺序排序的元素数组
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* const queue = priorityQueue<number>();
|
|
35
|
+
* queue.enqueue(3);
|
|
36
|
+
* queue.enqueue(1);
|
|
37
|
+
* queue.enqueue(2);
|
|
38
|
+
*
|
|
39
|
+
* console.log(queue.toArray()); // [1, 2, 3]
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
toArray(): T[];
|
|
43
|
+
}
|
|
44
|
+
declare function priorityQueue<T>(options?: PriorityQueueOptions<T>): PriorityQueue<T>;
|
|
45
|
+
export { priorityQueue };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$dt as e,$t as t,dataHandler as i}from"../data-handler/index.js";import{logger as h}from"../logger/index.js";import{tryCall as r}from"../try-call/index.js";import{defaultCompare as s,getLeftChildIndex as a,getParentIndex as p,getRightChildIndex as n,updateSmallestIndex as l}from"./utils.js";let o=e({compare:t.function(()=>s),allowDuplicate:t.boolean(!1)});class u{heap=[];itemSet=new Set;compare;allowDuplicate;insertCounter=0;constructor(e={}){let{compare:t,allowDuplicate:h}=i(e||{},o,{unwrap:!0});this.compare=t,this.allowDuplicate=h}swapItems(e,t){[this.heap[e],this.heap[t]]=[this.heap[t],this.heap[e]]}heapifyUp(e){let t=e;for(;t>0;){let e=p(t),i=this.heap[t],h=this.heap[e];if(0>this.compare(i.item,h.item))this.swapItems(t,e),t=e;else break}}heapifyDown(e){let t=e,i=this.heap.length;for(;t<i;){let e=a(t),h=n(t),r=t;if(r=l(e,r,i,this.heap,this.compare),(r=l(h,r,i,this.heap,this.compare))===t)break;this.swapItems(t,r),t=r}}isDuplicate(e){return!this.allowDuplicate&&this.itemSet.has(e)}enqueue(e){if(this.isDuplicate(e)){let t=r(()=>"object"==typeof e&&null!==e?JSON.stringify(e):String(e),()=>Object.prototype.toString.call(e));return h.warn("PriorityQueue.enqueue",`Duplicate item detected: ${t}`),!1}let t={item:e,insertOrder:this.insertCounter++};return this.allowDuplicate||this.itemSet.add(e),this.heap.push(t),this.heapifyUp(this.heap.length-1),!0}enqueueMany(e){return e.map(e=>this.enqueue(e))}dequeue(){let e;if(0!==this.heap.length)return 1===this.heap.length?e=this.heap.pop().item:(e=this.heap[0].item,this.heap[0]=this.heap.pop(),this.heapifyDown(0)),this.itemSet.delete(e),e}peek(){if(0!==this.heap.length)return this.heap[0].item}size(){return this.heap.length}isEmpty(){return 0===this.heap.length}clear(){this.heap.length=0,this.itemSet.clear(),this.insertCounter=0}toArray(){let e=[...this.heap];return e.sort((e,t)=>{let i=this.compare(e.item,t.item);return 0!==i?i:e.insertOrder-t.insertOrder}),e.map(e=>e.item)}}function m(e){return new u(e)}export{m as priorityQueue};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type CompareFn<T> = (first: T, second: T) => number;
|
|
2
|
+
interface PriorityQueueOptions<T> {
|
|
3
|
+
compare?: CompareFn<T>;
|
|
4
|
+
allowDuplicate?: boolean;
|
|
5
|
+
}
|
|
6
|
+
interface HeapItem<T> {
|
|
7
|
+
item: T;
|
|
8
|
+
insertOrder: number;
|
|
9
|
+
}
|
|
10
|
+
export type { CompareFn, HeapItem, PriorityQueueOptions };
|
|
File without changes
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CompareFn, HeapItem } from './types';
|
|
2
|
+
declare function defaultCompare<T>(left: T, right: T): number;
|
|
3
|
+
declare function getParentIndex(index: number): number;
|
|
4
|
+
declare function getLeftChildIndex(index: number): number;
|
|
5
|
+
declare function getRightChildIndex(index: number): number;
|
|
6
|
+
declare function updateSmallestIndex<T>(childIndex: number, smallestIndex: number, size: number, heap: HeapItem<T>[], compare: CompareFn<T>): number;
|
|
7
|
+
export { defaultCompare, getLeftChildIndex, getParentIndex, getRightChildIndex, updateSmallestIndex };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{logger as e}from"../logger/index.js";import{getType as t}from"../utils/index.js";let r=new Set(["number","string","date"]);function n(n,i){return r.has(t(n))&&r.has(t(i))?n<i?-1:+(n>i):(e.warn("PriorityQueue",`Unsupported type: ${t(n)} ${t(i)}`),0)}function i(e){return Math.floor((e-1)/2)}function u(e){return 2*e+1}function o(e){return 2*e+2}function d(e,t,r,n,i){if(e>=r)return t;let u=i(n[e].item,n[t].item);return u<0||0===u&&n[e].insertOrder<n[t].insertOrder?e:t}export{n as defaultCompare,u as getLeftChildIndex,i as getParentIndex,o as getRightChildIndex,d as updateSmallestIndex};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
declare function createError(fnName: string, message: string, ErrorClass?: ErrorConstructor): Error;
|
|
2
|
+
declare function throwError(fnName: string, message: string, ErrorClass?: ErrorConstructor): never;
|
|
3
|
+
declare function throwType(fnName: string, message: string): never;
|
|
4
|
+
export { createError, throwError, throwType };
|
|
@@ -1,10 +1 @@
|
|
|
1
|
-
function
|
|
2
|
-
return new ErrorClass(`[@cmtlyt/lingshu-toolkit#${fnName}]: ${message}`);
|
|
3
|
-
}
|
|
4
|
-
function throwError(fnName, message, ErrorClass = Error) {
|
|
5
|
-
throw createError(fnName, message, ErrorClass);
|
|
6
|
-
}
|
|
7
|
-
function throwType(fnName, message) {
|
|
8
|
-
throwError(fnName, message, TypeError);
|
|
9
|
-
}
|
|
10
|
-
export { createError, throwError, throwType };
|
|
1
|
+
function r(o,t,n=Error){return new n(`[@cmtlyt/lingshu-toolkit#${o}]: ${t}`)}function o(t,n,e=Error){throw r(t,n,e)}function t(r,t){o(r,t,TypeError)}export{r as createError,o as throwError,t as throwType};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type TryCallResultValue<R, E> = Awaited<[E] extends [never] ? R : R | E>;
|
|
2
|
+
type TryCallResult<R, E> = [R] extends [never] ? E : R extends PromiseLike<infer P> ? Promise<TryCallResultValue<P, E>> : TryCallResultValue<R, E>;
|
|
3
|
+
type TryCallFinalArgs<R, E> = TryCallResultValue<R, E> | Error;
|
|
4
|
+
/**
|
|
5
|
+
* 包装一个拦截错误的函数
|
|
6
|
+
*
|
|
7
|
+
* @platform web, node, webworker
|
|
8
|
+
*
|
|
9
|
+
* @param cb 回调函数
|
|
10
|
+
* @param onError 错误处理函数
|
|
11
|
+
*/
|
|
12
|
+
declare function tryCallFunc<A extends any[], R, E = never>(cb: (...args: A) => R, onError?: ((err: any) => E) | null, onFinal?: (result: TryCallFinalArgs<R, E>) => void): (...args: A) => TryCallResult<R, E>;
|
|
13
|
+
/**
|
|
14
|
+
* 尝试调用函数
|
|
15
|
+
*
|
|
16
|
+
* @platform web, node, webworker
|
|
17
|
+
*
|
|
18
|
+
* @param cb 回调函数
|
|
19
|
+
* @param onError 错误处理函数
|
|
20
|
+
*/
|
|
21
|
+
declare function tryCall<R, E = never>(this: any, cb: () => R, onError?: ((err: any) => E) | null, onFinal?: (result: TryCallFinalArgs<R, E>) => void): TryCallResult<R, E>;
|
|
22
|
+
export { tryCall, tryCallFunc };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{throwType as r}from"../throw-error/index.js";import{isFunction as t,isPromiseLike as e}from"../utils/verify.js";let l=Symbol("EMPTY");function o(o,i,n){t(o)||r("tryCallFunc","callback is not a function");let u=(r,e,l)=>{if(t(i))try{e.errorResult=Reflect.apply(i,r,[l])}catch(r){e.error=r}else e.error=l;return e.errorResult},s=(r,e,o)=>{try{if(e.error!==l)throw e.error}finally{t(n)&&Reflect.apply(n,r,e.error===l?[o]:[e.error])}};return function(...r){let t={oriResult:l,errorResult:l,error:l},i=(async()=>{try{return t.oriResult=Reflect.apply(o,this,r),t.oriResult}catch(r){return u(this,t,r)}})().catch(r=>u(this,t,r));if(e(t.oriResult))return i.then(r=>(s(this,t,r),r));let n=t.oriResult===l?t.errorResult:t.oriResult;return s(this,t,n),n}}function i(e,l,i){return t(e)||r("tryCall","callback is not a function"),o(e,l,i).call(this)}export{i as tryCall,o as tryCallFunc};
|
|
@@ -7,5 +7,7 @@ export type Printify<T> = T extends any[] ? T : [T] extends [never] ? T : {
|
|
|
7
7
|
[K in keyof T]: T[K];
|
|
8
8
|
};
|
|
9
9
|
export type PickRequired<T, K extends keyof T> = Printify<Omit<T, K> & Required<Pick<T, K>>>;
|
|
10
|
+
export type Func<A extends any[], R = any> = (...args: A) => R;
|
|
10
11
|
export type AnyFunc = (...args: any[]) => any;
|
|
11
12
|
export type UnULCase<T extends string> = T extends `${infer F}${infer R}` ? `${Uppercase<F> | Lowercase<F>}${UnULCase<R>}` : Uppercase<T> | Lowercase<T>;
|
|
13
|
+
export type Cast<X, Y> = X extends Y ? X : Y;
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export * from "./pack.js";
|
|
1
|
+
export*from"./base.js";export*from"./pack.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
declare const __PACK__: unique symbol;
|
|
2
|
-
export
|
|
2
|
+
export interface Pack<T> {
|
|
3
3
|
[__PACK__]: T;
|
|
4
|
-
}
|
|
4
|
+
}
|
|
5
5
|
export type Unpack<T extends Pack<any>> = T extends Pack<infer U> ? U : never;
|
|
6
|
-
export type SafeUnpack<T
|
|
6
|
+
export type SafeUnpack<T> = T extends Pack<infer U> ? U : T;
|
|
7
7
|
export type IsPack<T> = Pack<any> extends T ? true : false;
|
|
8
8
|
export type HasPack<T> = (T extends any[] ? HasPack<T[number]> : IsPack<T>) extends false ? false : true;
|
|
9
9
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Symbol(
|
|
1
|
+
Symbol("__PACK__");
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
|
|
2
|
-
const identity = (_v)=>_v;
|
|
3
|
-
function getType(_v) {
|
|
4
|
-
return Object.prototype.toString.call(_v).slice(8, -1).toLowerCase();
|
|
5
|
-
}
|
|
6
|
-
export { getType, identity, noop };
|
|
1
|
+
let t=()=>void 0,e=t=>t;function o(t){return Object.prototype.toString.call(t).slice(8,-1).toLowerCase()}export{o as getType,e as identity,t as noop};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export * from "./verify.js";
|
|
1
|
+
export*from"./base.js";export*from"./verify.js";
|
|
@@ -49,5 +49,5 @@ export declare function isTruthy<T>(_v: T): _v is Exclude<T, false | 0 | '' | nu
|
|
|
49
49
|
export declare function isFalsy(_v: unknown): _v is false | 0 | '' | null | undefined;
|
|
50
50
|
/** 判断是一个函数 */
|
|
51
51
|
export declare function isFunction(_v: unknown): _v is AnyFunc;
|
|
52
|
-
/** 判断是一个
|
|
52
|
+
/** 判断是一个 PromiseLike */
|
|
53
53
|
export declare function isPromiseLike(_v: unknown): _v is PromiseLike<any>;
|
|
@@ -1,67 +1 @@
|
|
|
1
|
-
function
|
|
2
|
-
return 'symbol' == typeof _v;
|
|
3
|
-
}
|
|
4
|
-
function isUndef(_v) {
|
|
5
|
-
return void 0 === _v;
|
|
6
|
-
}
|
|
7
|
-
function isNull(_v) {
|
|
8
|
-
return null === _v;
|
|
9
|
-
}
|
|
10
|
-
function isNullOrUndef(_v) {
|
|
11
|
-
return isNull(_v) || isUndef(_v);
|
|
12
|
-
}
|
|
13
|
-
function verify_isNaN(_v) {
|
|
14
|
-
return Number.isNaN(_v);
|
|
15
|
-
}
|
|
16
|
-
function isPlainSymbol(_v) {
|
|
17
|
-
return isSymbol(_v) && isUndef(Symbol.keyFor(_v));
|
|
18
|
-
}
|
|
19
|
-
function isObject(_v) {
|
|
20
|
-
return 'object' == typeof _v && !isNull(_v);
|
|
21
|
-
}
|
|
22
|
-
function isPlainObject(_v) {
|
|
23
|
-
return isObject(_v) && !isArray(_v);
|
|
24
|
-
}
|
|
25
|
-
function isArray(_v) {
|
|
26
|
-
return Array.isArray(_v);
|
|
27
|
-
}
|
|
28
|
-
function isEmptyArray(_v) {
|
|
29
|
-
return isArray(_v) && 0 === _v.length;
|
|
30
|
-
}
|
|
31
|
-
function isString(_v) {
|
|
32
|
-
return 'string' == typeof _v;
|
|
33
|
-
}
|
|
34
|
-
function isEmptyString(_v) {
|
|
35
|
-
return isString(_v) && 0 === _v.length;
|
|
36
|
-
}
|
|
37
|
-
function isNumber(_v) {
|
|
38
|
-
return 'number' == typeof _v;
|
|
39
|
-
}
|
|
40
|
-
function isPlainNumber(_v) {
|
|
41
|
-
return isNumber(_v) && !verify_isNaN(_v);
|
|
42
|
-
}
|
|
43
|
-
function isPropertyKey(_v) {
|
|
44
|
-
return isString(_v) || isNumber(_v) || isSymbol(_v);
|
|
45
|
-
}
|
|
46
|
-
function isBoolean(_v) {
|
|
47
|
-
return 'boolean' == typeof _v;
|
|
48
|
-
}
|
|
49
|
-
function isTrue(_v) {
|
|
50
|
-
return true === _v || isString(_v) && 'true' === _v.toLowerCase();
|
|
51
|
-
}
|
|
52
|
-
function isFalse(_v) {
|
|
53
|
-
return false === _v || isString(_v) && 'false' === _v.toLowerCase();
|
|
54
|
-
}
|
|
55
|
-
function isTruthy(_v) {
|
|
56
|
-
return !!_v;
|
|
57
|
-
}
|
|
58
|
-
function isFalsy(_v) {
|
|
59
|
-
return !(verify_isNaN(_v) || _v);
|
|
60
|
-
}
|
|
61
|
-
function isFunction(_v) {
|
|
62
|
-
return 'function' == typeof _v;
|
|
63
|
-
}
|
|
64
|
-
function isPromiseLike(_v) {
|
|
65
|
-
return isObject(_v) && isFunction(_v.then);
|
|
66
|
-
}
|
|
67
|
-
export { isArray, isBoolean, isEmptyArray, isEmptyString, isFalse, isFalsy, isFunction, verify_isNaN as isNaN, isNull, isNullOrUndef, isNumber, isObject, isPlainNumber, isPlainObject, isPlainSymbol, isPromiseLike, isPropertyKey, isString, isSymbol, isTrue, isTruthy, isUndef };
|
|
1
|
+
function n(n){return"symbol"==typeof n}function r(n){return void 0===n}function t(n){return null===n}function i(n){return t(n)||r(n)}function e(n){return Number.isNaN(n)}function u(t){return n(t)&&r(Symbol.keyFor(t))}function o(n){return"object"==typeof n&&!t(n)}function s(n){return o(n)&&!f(n)}function f(n){return Array.isArray(n)}function c(n){return f(n)&&0===n.length}function y(n){return"string"==typeof n}function l(n){return y(n)&&0===n.length}function a(n){return"number"==typeof n}function b(n){return a(n)&&!e(n)}function m(r){return y(r)||a(r)||n(r)}function N(n){return"boolean"==typeof n}function p(n){return!0===n||y(n)&&"true"===n.toLowerCase()}function g(n){return!1===n||y(n)&&"false"===n.toLowerCase()}function P(n){return!!n}function S(n){return!(e(n)||n)}function h(n){return"function"==typeof n}function A(n){return(o(n)||h(n))&&h(n.then)}export{f as isArray,N as isBoolean,c as isEmptyArray,l as isEmptyString,g as isFalse,S as isFalsy,h as isFunction,t as isNull,i as isNullOrUndef,a as isNumber,o as isObject,b as isPlainNumber,s as isPlainObject,u as isPlainSymbol,A as isPromiseLike,m as isPropertyKey,y as isString,n as isSymbol,p as isTrue,P as isTruthy,r as isUndef,e as isNaN};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
interface Resolver<T> {
|
|
2
2
|
promise: Promise<T>;
|
|
3
3
|
resolve: (value: T | PromiseLike<T>) => void;
|
|
4
4
|
reject: (reason?: any) => void;
|
|
5
|
-
}
|
|
6
|
-
|
|
5
|
+
}
|
|
6
|
+
declare function withResolvers<T>(): Resolver<T>;
|
|
7
|
+
export type { Resolver };
|
|
8
|
+
export { withResolvers };
|
|
@@ -1,15 +1 @@
|
|
|
1
|
-
function withResolvers() {
|
|
2
|
-
return 'function' == typeof Promise.withResolvers ? Promise.withResolvers() : (()=>{
|
|
3
|
-
const resolver = {
|
|
4
|
-
promise: null,
|
|
5
|
-
resolve: null,
|
|
6
|
-
reject: null
|
|
7
|
-
};
|
|
8
|
-
resolver.promise = new Promise((resolve, reject)=>{
|
|
9
|
-
resolver.resolve = resolve;
|
|
10
|
-
resolver.reject = reject;
|
|
11
|
-
});
|
|
12
|
-
return resolver;
|
|
13
|
-
})();
|
|
14
|
-
}
|
|
15
|
-
export { withResolvers };
|
|
1
|
+
function e(){let e;return"function"==typeof Promise.withResolvers?Promise.withResolvers():((e={promise:null,resolve:null,reject:null}).promise=new Promise((r,o)=>{e.resolve=r,e.reject=o}),e)}export{e as withResolvers};
|
package/dist/vue/index.js
CHANGED
|
@@ -1,29 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { dataHandler, $t, $dt } from "../707.js";
|
|
3
|
-
function setTitle(title) {
|
|
4
|
-
if (!title || "u" < typeof document) return;
|
|
5
|
-
const oldTitle = document.title;
|
|
6
|
-
document.title = title;
|
|
7
|
-
return oldTitle;
|
|
8
|
-
}
|
|
9
|
-
const validInfo = $dt({
|
|
10
|
-
restoreOnUnmount: $t.boolean(true)
|
|
11
|
-
});
|
|
12
|
-
function useTitle(newTitle = '', options = {}) {
|
|
13
|
-
const { restoreOnUnmount } = dataHandler(options, validInfo, {
|
|
14
|
-
unwrap: true
|
|
15
|
-
});
|
|
16
|
-
const title = ref(toValue(newTitle));
|
|
17
|
-
const originalTitle = setTitle(title.value);
|
|
18
|
-
watch(title, setTitle, {
|
|
19
|
-
flush: 'sync'
|
|
20
|
-
});
|
|
21
|
-
watch(()=>toValue(newTitle), (value)=>{
|
|
22
|
-
title.value = value;
|
|
23
|
-
});
|
|
24
|
-
if (restoreOnUnmount) onScopeDispose(()=>{
|
|
25
|
-
setTitle(originalTitle);
|
|
26
|
-
});
|
|
27
|
-
return title;
|
|
28
|
-
}
|
|
29
|
-
export { useTitle };
|
|
1
|
+
import{onScopeDispose as t,ref as e,toValue as n,watch as u}from"vue";import{dataHandler as o,$t as r,$dt as l}from"../665.js";function i(t){if(!t||"u"<typeof document)return;let e=document.title;return document.title=t,e}let m=l({restoreOnUnmount:r.boolean(!0)});function f(r="",l={}){let{restoreOnUnmount:c}=o(l,m,{unwrap:!0}),a=e(n(r)),p=i(a.value);return u(a,i,{flush:"sync"}),u(()=>n(r),t=>{a.value=t}),c&&t(()=>{i(p)}),a}export{f as useTitle};
|
|
@@ -2,5 +2,5 @@ import { type MaybeRefOrGetter } from 'vue';
|
|
|
2
2
|
interface UseTitleOptions {
|
|
3
3
|
restoreOnUnmount: boolean;
|
|
4
4
|
}
|
|
5
|
-
|
|
6
|
-
export {};
|
|
5
|
+
declare function useTitle(newTitle?: MaybeRefOrGetter<string>, options?: Partial<UseTitleOptions>): import("vue").Ref<string, string>;
|
|
6
|
+
export { useTitle };
|
|
@@ -1,29 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { $dt, $t, dataHandler } from "../../shared/data-handler/index.js";
|
|
3
|
-
function setTitle(title) {
|
|
4
|
-
if (!title || "u" < typeof document) return;
|
|
5
|
-
const oldTitle = document.title;
|
|
6
|
-
document.title = title;
|
|
7
|
-
return oldTitle;
|
|
8
|
-
}
|
|
9
|
-
const validInfo = $dt({
|
|
10
|
-
restoreOnUnmount: $t.boolean(true)
|
|
11
|
-
});
|
|
12
|
-
function useTitle(newTitle = '', options = {}) {
|
|
13
|
-
const { restoreOnUnmount } = dataHandler(options, validInfo, {
|
|
14
|
-
unwrap: true
|
|
15
|
-
});
|
|
16
|
-
const title = ref(toValue(newTitle));
|
|
17
|
-
const originalTitle = setTitle(title.value);
|
|
18
|
-
watch(title, setTitle, {
|
|
19
|
-
flush: 'sync'
|
|
20
|
-
});
|
|
21
|
-
watch(()=>toValue(newTitle), (value)=>{
|
|
22
|
-
title.value = value;
|
|
23
|
-
});
|
|
24
|
-
if (restoreOnUnmount) onScopeDispose(()=>{
|
|
25
|
-
setTitle(originalTitle);
|
|
26
|
-
});
|
|
27
|
-
return title;
|
|
28
|
-
}
|
|
29
|
-
export { useTitle };
|
|
1
|
+
import{onScopeDispose as e,ref as t,toValue as n,watch as r}from"vue";import{$dt as u,$t as o,dataHandler as l}from"../../shared/data-handler/index.js";function i(e){if(!e||"u"<typeof document)return;let t=document.title;return document.title=e,t}let a=u({restoreOnUnmount:o.boolean(!0)});function m(u="",o={}){let{restoreOnUnmount:d}=l(o,a,{unwrap:!0}),f=t(n(u)),c=i(f.value);return r(f,i,{flush:"sync"}),r(()=>n(u),e=>{f.value=e}),d&&e(()=>{i(c)}),f}export{m as useTitle};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cmtlyt/lingshu-toolkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/shared.js",
|
|
6
6
|
"module": "./dist/shared.js",
|
|
@@ -40,33 +40,35 @@
|
|
|
40
40
|
"email": "cmtlyt@163.com"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@biomejs/biome": "2.
|
|
43
|
+
"@biomejs/biome": "2.4.11",
|
|
44
44
|
"@cmtlyt/unplugin-shadcn-registry-generate": "^0.1.5",
|
|
45
|
-
"@commitlint/cli": "^20.
|
|
46
|
-
"@commitlint/config-conventional": "^20.
|
|
47
|
-
"@rslib/core": "^0.
|
|
45
|
+
"@commitlint/cli": "^20.5.0",
|
|
46
|
+
"@commitlint/config-conventional": "^20.5.0",
|
|
47
|
+
"@rslib/core": "^0.21.0",
|
|
48
48
|
"@rspress/core": "^2.0.8",
|
|
49
|
-
"@types/node": "^
|
|
50
|
-
"@types/react": "^19.2.
|
|
51
|
-
"@vitejs/plugin-react": "^5.
|
|
52
|
-
"@vitejs/plugin-vue": "^6.0.
|
|
53
|
-
"@vitest/browser-playwright": "4.
|
|
54
|
-
"@vitest/coverage-v8": "4.
|
|
55
|
-
"@vitest/ui": "4.
|
|
49
|
+
"@types/node": "^25.5.2",
|
|
50
|
+
"@types/react": "^19.2.14",
|
|
51
|
+
"@vitejs/plugin-react": "^5.2.0",
|
|
52
|
+
"@vitejs/plugin-vue": "^6.0.5",
|
|
53
|
+
"@vitest/browser-playwright": "4.1.4",
|
|
54
|
+
"@vitest/coverage-v8": "4.1.4",
|
|
55
|
+
"@vitest/ui": "4.1.4",
|
|
56
|
+
"changelogithub": "^14.0.0",
|
|
56
57
|
"cross-env": "^10.1.0",
|
|
58
|
+
"depcheck": "^1.4.7",
|
|
57
59
|
"esno": "^4.8.0",
|
|
58
60
|
"husky": "^9.1.7",
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"playwright": "^1.
|
|
62
|
-
"react": "^19.2.
|
|
63
|
-
"react-dom": "^19.2.
|
|
64
|
-
"typescript": "^
|
|
65
|
-
"vite-tsconfig-paths": "^6.
|
|
66
|
-
"vitest": "4.
|
|
67
|
-
"vitest-browser-react": "2.0
|
|
68
|
-
"vitest-browser-vue": "2.0
|
|
69
|
-
"vue": "^3.5.
|
|
61
|
+
"lint-staged": "^16.4.0",
|
|
62
|
+
"msw": "^2.13.2",
|
|
63
|
+
"playwright": "^1.59.1",
|
|
64
|
+
"react": "^19.2.5",
|
|
65
|
+
"react-dom": "^19.2.5",
|
|
66
|
+
"typescript": "^6.0.2",
|
|
67
|
+
"vite-tsconfig-paths": "^6.1.1",
|
|
68
|
+
"vitest": "4.1.4",
|
|
69
|
+
"vitest-browser-react": "2.2.0",
|
|
70
|
+
"vitest-browser-vue": "2.1.0",
|
|
71
|
+
"vue": "^3.5.32"
|
|
70
72
|
},
|
|
71
73
|
"peerDependencies": {
|
|
72
74
|
"react": "^19.2.3",
|
|
@@ -78,7 +80,8 @@
|
|
|
78
80
|
"version": ">=22.12.0"
|
|
79
81
|
},
|
|
80
82
|
"packageManager": {
|
|
81
|
-
"name": "pnpm"
|
|
83
|
+
"name": "pnpm",
|
|
84
|
+
"version": ">=10.2.0"
|
|
82
85
|
}
|
|
83
86
|
},
|
|
84
87
|
"publishConfig": {
|
|
@@ -118,8 +121,8 @@
|
|
|
118
121
|
"preview:docs": "rspress preview",
|
|
119
122
|
"format": "biome format --write",
|
|
120
123
|
"test": "vitest --config=vitest.project.config.ts --coverage.enabled --ui",
|
|
121
|
-
"test:ci": "cross-env
|
|
122
|
-
"test:lib:ci": "cross-env
|
|
124
|
+
"test:ci": "cross-env ci_test=true gen_file_disabled=true vitest run --config=vitest.project.config.ts",
|
|
125
|
+
"test:lib:ci": "cross-env ci_test=true gen_file_disabled=true vitest run",
|
|
123
126
|
"test:lib": "vitest --coverage.enabled --ui",
|
|
124
127
|
"script:gen-file": "esno scripts/gen-file.ts"
|
|
125
128
|
}
|