new functions
This commit is contained in:
parent
ab9bcd61e1
commit
698f4f22e4
32
lib/commons/record-util.d.ts
vendored
32
lib/commons/record-util.d.ts
vendored
|
|
@ -1,11 +1,33 @@
|
|||
import { UnwrapNestedRefs } from 'vue';
|
||||
declare enum ClearMode {
|
||||
clear = 3,
|
||||
import { UnwrapNestedRefs } from "vue";
|
||||
export declare enum RecordClearMode {
|
||||
delete = 2,
|
||||
reset = 1
|
||||
}
|
||||
export declare const withRecord: (obj: UnwrapNestedRefs<Record<string, any>>) => {
|
||||
clear: (mode?: ClearMode) => void;
|
||||
clear: (mode?: RecordClearMode) => void;
|
||||
replace: (newVal: UnwrapNestedRefs<Record<string, any>>) => void;
|
||||
};
|
||||
export {};
|
||||
/**
|
||||
* 这是一个泛型函数,接受任意个数的数组作为参数,并返回一个对象。
|
||||
* 该对象包含两个方法:test 和 path。
|
||||
* test 方法用于测试所有数组的元素是否相等,
|
||||
* path 方法用于测试所有数组的指定路径的值是否相等。
|
||||
|
||||
* @param arrays
|
||||
* @returns
|
||||
*/
|
||||
export declare function assignRecords<T extends Record<string, any>>(...arrays: T[][]): {
|
||||
test: (equal?: ((l: T, r: T) => boolean) | undefined) => T[];
|
||||
path: (...paths: string[]) => T[];
|
||||
};
|
||||
/**
|
||||
*
|
||||
* 接受一个目标对象和多个源对象作为参数,并返回合并后的对象。
|
||||
* 它会将源对象的属性复制到目标对象中,
|
||||
* 如果多个源对象有同名属性,
|
||||
* 则最后的属性值将覆盖前面的属性值。
|
||||
* @param target 目标对象
|
||||
* @param sources 来源对象参数
|
||||
* @returns 目标对象
|
||||
*/
|
||||
export declare const extend: <T extends Record<string, any>>(target: T, ...sources: (T | undefined)[]) => T;
|
||||
|
|
|
|||
4
lib/index.d.ts
vendored
4
lib/index.d.ts
vendored
|
|
@ -1,3 +1,3 @@
|
|||
import { withRecord } from "./commons/record-util";
|
||||
import { withRecord, assignRecords, RecordClearMode } from "./commons/record-util";
|
||||
import { stringTokenizer, equalsIgnoreCase, includeIgnoreCase } from "./commons/str-utils";
|
||||
export { stringTokenizer, withRecord, equalsIgnoreCase, includeIgnoreCase };
|
||||
export { stringTokenizer, withRecord, equalsIgnoreCase, includeIgnoreCase, assignRecords, RecordClearMode };
|
||||
|
|
|
|||
|
|
@ -1,45 +1,66 @@
|
|||
const h = (e) => ({
|
||||
var c = /* @__PURE__ */ ((e) => (e[e.delete = 2] = "delete", e[e.reset = 1] = "reset", e))(c || {});
|
||||
const g = (e) => ({
|
||||
clear: function(t = 2) {
|
||||
t === 1 ? Object.keys(e).forEach((n) => {
|
||||
e[n] = void 0;
|
||||
}) : t === 2 ? Object.keys(e).forEach((n) => {
|
||||
}) : t === 2 && Object.keys(e).forEach((n) => {
|
||||
delete e[n];
|
||||
}) : Object.assign(e, {});
|
||||
});
|
||||
},
|
||||
replace: function(t) {
|
||||
this.clear(
|
||||
3
|
||||
/* clear */
|
||||
2
|
||||
/* delete */
|
||||
), Object.assign(e, t);
|
||||
}
|
||||
});
|
||||
function g(e, t, n) {
|
||||
const f = t, o = n || t;
|
||||
return function(i) {
|
||||
const s = [], u = i.matchAll(e);
|
||||
let r = 0;
|
||||
for (const c of u) {
|
||||
const l = i.slice(r, c.index);
|
||||
l && s.push(o(l, !1)), s.push(f(c[0], !0)), r = c.index + c[0].length;
|
||||
function p(...e) {
|
||||
let t = e ?? [];
|
||||
return {
|
||||
test: function(n) {
|
||||
if (t.length <= 1)
|
||||
return t.length === 1 ? t[0] : [];
|
||||
let i = n ?? function(s, r) {
|
||||
return s === r;
|
||||
};
|
||||
return t.reduce((s, r) => (r && r.length > 0 && (s.length === 0 ? s.push(...r) : r.forEach((u) => {
|
||||
s.some((f) => i(f, u)) || s.push(u);
|
||||
})), s), []);
|
||||
},
|
||||
path: function(...n) {
|
||||
return this.test((i, s) => n.every((r) => i[r] === s[r]));
|
||||
}
|
||||
return r < i.length && s.push(o(i.slice(r), !1)), s;
|
||||
};
|
||||
}
|
||||
function y(e, t, n) {
|
||||
const i = t, s = n || t;
|
||||
return function(r) {
|
||||
const u = [], l = r.matchAll(e);
|
||||
let f = 0;
|
||||
for (const o of l) {
|
||||
const h = r.slice(f, o.index);
|
||||
h && u.push(s(h, !1)), u.push(i(o[0], !0)), f = o.index + o[0].length;
|
||||
}
|
||||
return f < r.length && u.push(s(r.slice(f), !1)), u;
|
||||
};
|
||||
}
|
||||
function a(e, t) {
|
||||
return typeof e == "string" && typeof t == "string" ? e.toLowerCase() === t.toLowerCase() : e === void 0 && t === void 0;
|
||||
}
|
||||
const p = (e, t) => {
|
||||
const m = (e, t) => {
|
||||
for (let n = 0; n < e.length; n++) {
|
||||
let f = e[n];
|
||||
if (a(f, t))
|
||||
let i = e[n];
|
||||
if (a(i, t))
|
||||
return !0;
|
||||
}
|
||||
return !1;
|
||||
};
|
||||
export {
|
||||
c as RecordClearMode,
|
||||
p as assignRecords,
|
||||
a as equalsIgnoreCase,
|
||||
p as includeIgnoreCase,
|
||||
g as stringTokenizer,
|
||||
h as withRecord
|
||||
m as includeIgnoreCase,
|
||||
y as stringTokenizer,
|
||||
g as withRecord
|
||||
};
|
||||
//# sourceMappingURL=index.es.js.map
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,2 +1,2 @@
|
|||
(function(i,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(i=typeof globalThis<"u"?globalThis:i||self,s(i["ez-common-ts"]={}))})(this,function(i){"use strict";const s=e=>({clear:function(n=2){n===1?Object.keys(e).forEach(t=>{e[t]=void 0}):n===2?Object.keys(e).forEach(t=>{delete e[t]}):Object.assign(e,{})},replace:function(n){this.clear(3),Object.assign(e,n)}});function h(e,n,t){const u=n,a=t||n;return function(o){const f=[],p=o.matchAll(e);let c=0;for(const r of p){const d=o.slice(c,r.index);d&&f.push(a(d,!1)),f.push(u(r[0],!0)),c=r.index+r[0].length}return c<o.length&&f.push(a(o.slice(c),!1)),f}}function l(e,n){return typeof e=="string"&&typeof n=="string"?e.toLowerCase()===n.toLowerCase():e===void 0&&n===void 0}const g=(e,n)=>{for(let t=0;t<e.length;t++){let u=e[t];if(l(u,n))return!0}return!1};i.equalsIgnoreCase=l,i.includeIgnoreCase=g,i.stringTokenizer=h,i.withRecord=s,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
|
||||
(function(r,o){typeof exports=="object"&&typeof module<"u"?o(exports):typeof define=="function"&&define.amd?define(["exports"],o):(r=typeof globalThis<"u"?globalThis:r||self,o(r["ez-common-ts"]={}))})(this,function(r){"use strict";var o=(e=>(e[e.delete=2]="delete",e[e.reset=1]="reset",e))(o||{});const g=e=>({clear:function(n=2){n===1?Object.keys(e).forEach(t=>{e[t]=void 0}):n===2&&Object.keys(e).forEach(t=>{delete e[t]})},replace:function(n){this.clear(2),Object.assign(e,n)}});function m(...e){let n=e??[];return{test:function(t){if(n.length<=1)return n.length===1?n[0]:[];let u=t??function(s,i){return s===i};return n.reduce((s,i)=>(i&&i.length>0&&(s.length===0?s.push(...i):i.forEach(f=>{s.some(l=>u(l,f))||s.push(f)})),s),[])},path:function(...t){return this.test((u,s)=>t.every(i=>u[i]===s[i]))}}}function p(e,n,t){const u=n,s=t||n;return function(i){const f=[],a=i.matchAll(e);let l=0;for(const c of a){const d=i.slice(l,c.index);d&&f.push(s(d,!1)),f.push(u(c[0],!0)),l=c.index+c[0].length}return l<i.length&&f.push(s(i.slice(l),!1)),f}}function h(e,n){return typeof e=="string"&&typeof n=="string"?e.toLowerCase()===n.toLowerCase():e===void 0&&n===void 0}const y=(e,n)=>{for(let t=0;t<e.length;t++){let u=e[t];if(h(u,n))return!0}return!1};r.RecordClearMode=o,r.assignRecords=m,r.equalsIgnoreCase=h,r.includeIgnoreCase=y,r.stringTokenizer=p,r.withRecord=g,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
|
||||
//# sourceMappingURL=index.umd.js.map
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -12,6 +12,7 @@
|
|||
"test": "vitest"
|
||||
},
|
||||
"devDependencies": {
|
||||
"prettier": "^3.0.3",
|
||||
"typescript": "^5.0.2",
|
||||
"vite": "^4.4.5",
|
||||
"vite-plugin-dts": "^3.6.3",
|
||||
|
|
@ -20,7 +21,8 @@
|
|||
"exports": {
|
||||
".": {
|
||||
"import": "./lib/index.es.js",
|
||||
"require": "./lib/index.umd.js"
|
||||
"require": "./lib/index.umd.js",
|
||||
"types": "./lib/index.d.ts"
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,9 @@ dependencies:
|
|||
version: registry.npmmirror.com/vitest@0.34.6
|
||||
|
||||
devDependencies:
|
||||
prettier:
|
||||
specifier: ^3.0.3
|
||||
version: registry.npmmirror.com/prettier@3.0.3
|
||||
typescript:
|
||||
specifier: ^5.0.2
|
||||
version: registry.npmmirror.com/typescript@5.2.2
|
||||
|
|
@ -1095,6 +1098,14 @@ packages:
|
|||
picocolors: registry.npmmirror.com/picocolors@1.0.0
|
||||
source-map-js: registry.npmmirror.com/source-map-js@1.0.2
|
||||
|
||||
registry.npmmirror.com/prettier@3.0.3:
|
||||
resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier/-/prettier-3.0.3.tgz}
|
||||
name: prettier
|
||||
version: 3.0.3
|
||||
engines: {node: '>=14'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/pretty-format@29.7.0:
|
||||
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-format/-/pretty-format-29.7.0.tgz}
|
||||
name: pretty-format
|
||||
|
|
|
|||
|
|
@ -1,30 +1,106 @@
|
|||
import { UnwrapNestedRefs } from 'vue';
|
||||
enum ClearMode {
|
||||
clear = 3,
|
||||
delete = 2,
|
||||
reset = 1
|
||||
import { UnwrapNestedRefs } from "vue";
|
||||
export enum RecordClearMode {
|
||||
delete = 2,
|
||||
reset = 1,
|
||||
}
|
||||
export const withRecord = (
|
||||
obj: UnwrapNestedRefs<Record<string, any>>,
|
||||
) => {
|
||||
export const withRecord = (obj: UnwrapNestedRefs<Record<string, any>>) => {
|
||||
return {
|
||||
clear: function (mode: RecordClearMode = RecordClearMode.delete) {
|
||||
if (mode === RecordClearMode.reset) {
|
||||
Object.keys(obj).forEach((key) => {
|
||||
obj[key] = undefined;
|
||||
});
|
||||
} else if (mode === RecordClearMode.delete) {
|
||||
Object.keys(obj).forEach((key) => {
|
||||
delete obj[key];
|
||||
});
|
||||
}
|
||||
},
|
||||
replace: function (newVal: UnwrapNestedRefs<Record<string, any>>) {
|
||||
this.clear(RecordClearMode.delete);
|
||||
Object.assign(obj, newVal);
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
return {
|
||||
clear: function (mode: ClearMode = ClearMode.delete) {
|
||||
if (mode === ClearMode.reset) {
|
||||
Object.keys(obj).forEach((key) => {
|
||||
obj[key] = undefined;
|
||||
});
|
||||
} else if (mode === ClearMode.delete) {
|
||||
Object.keys(obj).forEach((key) => {
|
||||
delete obj[key];
|
||||
});
|
||||
} else {
|
||||
Object.assign(obj, {});
|
||||
}
|
||||
},
|
||||
replace: function (newVal: UnwrapNestedRefs<Record<string, any>>) {
|
||||
this.clear(ClearMode.clear);
|
||||
Object.assign(obj, newVal);
|
||||
/**
|
||||
* 这是一个泛型函数,接受任意个数的数组作为参数,并返回一个对象。
|
||||
* 该对象包含两个方法:test 和 path。
|
||||
* test 方法用于测试所有数组的元素是否相等,
|
||||
* path 方法用于测试所有数组的指定路径的值是否相等。
|
||||
|
||||
* @param arrays
|
||||
* @returns
|
||||
*/
|
||||
export function assignRecords<T extends Record<string, any>>(...arrays: T[][]) {
|
||||
let _arrays = arrays ?? [];
|
||||
|
||||
return {
|
||||
test: function (equal?: (l: T, r: T) => boolean) {
|
||||
if (_arrays.length <= 1) {
|
||||
return _arrays.length === 1 ? _arrays[0] : [];
|
||||
}
|
||||
|
||||
let localEqual =
|
||||
equal ??
|
||||
function (ll: T, rr: T) {
|
||||
return ll === rr;
|
||||
};
|
||||
return _arrays.reduce((acc, crt) => {
|
||||
if (crt && crt.length > 0) {
|
||||
if (acc.length === 0) {
|
||||
acc.push(...crt);
|
||||
} else {
|
||||
crt.forEach((c) => {
|
||||
const some = acc.some((a) => localEqual(a, c));
|
||||
if (!some) {
|
||||
acc.push(c);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
return acc;
|
||||
}, []);
|
||||
},
|
||||
path: function (...paths: string[]) {
|
||||
return this.test((l, r) => {
|
||||
return paths.every((path) => {
|
||||
return l[path] === r[path];
|
||||
});
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 接受一个目标对象和多个源对象作为参数,并返回合并后的对象。
|
||||
* 它会将源对象的属性复制到目标对象中,
|
||||
* 如果多个源对象有同名属性,
|
||||
* 则最后的属性值将覆盖前面的属性值。
|
||||
* @param target 目标对象
|
||||
* @param sources 来源对象参数
|
||||
* @returns 目标对象
|
||||
*/
|
||||
export const extend = <T extends Record<string, any>>(
|
||||
// 目标对象
|
||||
target: T,
|
||||
// 其他对象参数
|
||||
...sources: (T | undefined)[]
|
||||
): T => {
|
||||
// 遍历其他对象参数
|
||||
for (const source of sources) {
|
||||
if (source !== undefined) {
|
||||
// 遍历参数对象的属性
|
||||
for (const key in source) {
|
||||
// 判断属性存在于参数对象中且值不为 null
|
||||
if (source.hasOwnProperty(key) && source[key] != null) {
|
||||
// 将属性赋值给目标对象
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 返回目标对象
|
||||
return target;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { withRecord } from "./commons/record-util";
|
||||
import { withRecord, assignRecords, RecordClearMode } from "./commons/record-util";
|
||||
import { stringTokenizer, equalsIgnoreCase, includeIgnoreCase } from "./commons/str-utils";
|
||||
|
||||
export { stringTokenizer, withRecord, equalsIgnoreCase, includeIgnoreCase };
|
||||
export { stringTokenizer, withRecord, equalsIgnoreCase, includeIgnoreCase, assignRecords, RecordClearMode };
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user