two new functions added

This commit is contained in:
zhujingjing 2023-11-11 16:13:36 +08:00
parent d35cf27043
commit ab9bcd61e1
Signed by: karlcw
GPG Key ID: B11805D3A0F5C671
8 changed files with 119 additions and 47 deletions

View File

@ -7,3 +7,22 @@
* @return {(str: string) => T[]} - * @return {(str: string) => T[]} -
*/ */
export declare function stringTokenizer<T>(regExp: RegExp, matchHandler: (text: string, match: boolean) => T, textHandler?: (text: string, match: boolean) => T): (str: string) => T[]; export declare function stringTokenizer<T>(regExp: RegExp, matchHandler: (text: string, match: boolean) => T, textHandler?: (text: string, match: boolean) => T): (str: string) => T[];
/**
*
*
* undefinedtrue
* false
* @param source
* @param target
* @returns
*/
export declare function equalsIgnoreCase(source: string | undefined, target: string | undefined): boolean;
/**
*
*
* truefalse
* @param list
* @param search
* @returns
*/
export declare const includeIgnoreCase: (list: string[], search: string) => boolean;

4
lib/index.d.ts vendored
View File

@ -1,3 +1,3 @@
import { withRecord } from "./commons/record-util"; import { withRecord } from "./commons/record-util";
import { stringTokenizer } from "./commons/str-utils"; import { stringTokenizer, equalsIgnoreCase, includeIgnoreCase } from "./commons/str-utils";
export { stringTokenizer, withRecord }; export { stringTokenizer, withRecord, equalsIgnoreCase, includeIgnoreCase };

View File

@ -1,9 +1,9 @@
const u = (e) => ({ const h = (e) => ({
clear: function(t = 2) { clear: function(t = 2) {
t === 1 ? Object.keys(e).forEach((c) => { t === 1 ? Object.keys(e).forEach((n) => {
e[c] = void 0; e[n] = void 0;
}) : t === 2 ? Object.keys(e).forEach((c) => { }) : t === 2 ? Object.keys(e).forEach((n) => {
delete e[c]; delete e[n];
}) : Object.assign(e, {}); }) : Object.assign(e, {});
}, },
replace: function(t) { replace: function(t) {
@ -13,20 +13,33 @@ const u = (e) => ({
), Object.assign(e, t); ), Object.assign(e, t);
} }
}); });
function a(e, t, c) { function g(e, t, n) {
const r = t, l = c || t; const f = t, o = n || t;
return function(n) { return function(i) {
const s = [], h = n.matchAll(e); const s = [], u = i.matchAll(e);
let i = 0; let r = 0;
for (const f of h) { for (const c of u) {
const o = n.slice(i, f.index); const l = i.slice(r, c.index);
o && s.push(l(o, !1)), s.push(r(f[0], !0)), i = f.index + f[0].length; l && s.push(o(l, !1)), s.push(f(c[0], !0)), r = c.index + c[0].length;
} }
return i < n.length && s.push(l(n.slice(i), !1)), s; return r < i.length && s.push(o(i.slice(r), !1)), s;
}; };
} }
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) => {
for (let n = 0; n < e.length; n++) {
let f = e[n];
if (a(f, t))
return !0;
}
return !1;
};
export { export {
a as stringTokenizer, a as equalsIgnoreCase,
u as withRecord p as includeIgnoreCase,
g as stringTokenizer,
h as withRecord
}; };
//# sourceMappingURL=index.es.js.map //# sourceMappingURL=index.es.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
(function(n,c){typeof exports=="object"&&typeof module<"u"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(n=typeof globalThis<"u"?globalThis:n||self,c(n["ez-common-ts"]={}))})(this,function(n){"use strict";const c=e=>({clear:function(t=2){t===1?Object.keys(e).forEach(i=>{e[i]=void 0}):t===2?Object.keys(e).forEach(i=>{delete e[i]}):Object.assign(e,{})},replace:function(t){this.clear(3),Object.assign(e,t)}});function h(e,t,i){const d=t,l=i||t;return function(s){const f=[],a=s.matchAll(e);let o=0;for(const u of a){const r=s.slice(o,u.index);r&&f.push(l(r,!1)),f.push(d(u[0],!0)),o=u.index+u[0].length}return o<s.length&&f.push(l(s.slice(o),!1)),f}}n.stringTokenizer=h,n.withRecord=c,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})}); (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"})});
//# sourceMappingURL=index.umd.js.map //# sourceMappingURL=index.umd.js.map

View File

@ -1 +1 @@
{"version":3,"file":"index.umd.js","sources":["../src/commons/record-util.ts","../src/commons/str-utils.ts"],"sourcesContent":["import { UnwrapNestedRefs } from 'vue';\r\nenum ClearMode {\r\n clear = 3,\r\n delete = 2,\r\n reset = 1\r\n}\r\nexport const withRecord = (\r\n obj: UnwrapNestedRefs<Record<string, any>>,\r\n) => {\r\n\r\n return {\r\n clear: function (mode: ClearMode = ClearMode.delete) {\r\n if (mode === ClearMode.reset) {\r\n Object.keys(obj).forEach((key) => {\r\n obj[key] = undefined;\r\n });\r\n } else if (mode === ClearMode.delete) {\r\n Object.keys(obj).forEach((key) => {\r\n delete obj[key];\r\n });\r\n } else {\r\n Object.assign(obj, {});\r\n }\r\n },\r\n replace: function (newVal: UnwrapNestedRefs<Record<string, any>>) {\r\n this.clear(ClearMode.clear);\r\n Object.assign(obj, newVal);\r\n }\r\n };\r\n};","/**\r\n * 生成给定函数体的函数注释。\r\n *\r\n * @param {RegExp} regExp - 用于匹配的正则表达式。\r\n * @param {(text: string, match: boolean) => T} matchHandler - 处理匹配到的文本的函数。\r\n * @param {(text: string, match: boolean) => T} [textHandler] - 处理未匹配到的文本的函数。\r\n * @return {(str: string) => T[]} - 分词器函数。\r\n */\r\n export function stringTokenizer<T>(\r\n regExp: RegExp,\r\n matchHandler: (text: string, match: boolean) => T,\r\n textHandler?: (text: string, match: boolean) => T\r\n ): (str: string) => T[] {\r\n\r\n const ifMatch = matchHandler;\r\n const ifText = textHandler?textHandler: matchHandler;\r\n\r\n return function (str: string) {\r\n const result: T[] = [];\r\n const matches = str.matchAll(regExp);\r\n let index = 0;\r\n for (const match of matches) {\r\n const before = str.slice(index, match.index);\r\n if (before) {\r\n result.push(ifText(before, false));\r\n }\r\n result.push(ifMatch(match[0], true));\r\n index = match.index! + match[0].length;\r\n }\r\n if (index < str.length) {\r\n result.push(ifText(str.slice(index), false));\r\n }\r\n return result;\r\n };\r\n }"],"names":["withRecord","obj","mode","key","newVal","stringTokenizer","regExp","matchHandler","textHandler","ifMatch","ifText","str","result","matches","index","match","before"],"mappings":"uOAMa,MAAAA,EACTC,IAGO,CACH,MAAO,SAAUC,EAAkB,EAAkB,CAC7CA,IAAS,EACT,OAAO,KAAKD,CAAG,EAAE,QAASE,GAAQ,CAC9BF,EAAIE,CAAG,EAAI,MAAA,CACd,EACMD,IAAS,EAChB,OAAO,KAAKD,CAAG,EAAE,QAASE,GAAQ,CAC9B,OAAOF,EAAIE,CAAG,CAAA,CACjB,EAEM,OAAA,OAAOF,EAAK,CAAA,CAAE,CAE7B,EACA,QAAS,SAAUG,EAA+C,CAC9D,KAAK,MAAM,GACJ,OAAA,OAAOH,EAAKG,CAAM,CAC7B,CAAA,GCnBU,SAAAC,EACdC,EACAC,EACAC,EACsB,CAEtB,MAAMC,EAAUF,EACVG,EAASF,GAAyBD,EAExC,OAAO,SAAUI,EAAa,CAC5B,MAAMC,EAAc,CAAA,EACdC,EAAUF,EAAI,SAASL,CAAM,EACnC,IAAIQ,EAAQ,EACZ,UAAWC,KAASF,EAAS,CAC3B,MAAMG,EAASL,EAAI,MAAMG,EAAOC,EAAM,KAAK,EACvCC,GACFJ,EAAO,KAAKF,EAAOM,EAAQ,EAAK,CAAC,EAEnCJ,EAAO,KAAKH,EAAQM,EAAM,CAAC,EAAG,EAAI,CAAC,EACnCD,EAAQC,EAAM,MAASA,EAAM,CAAC,EAAE,MAClC,CACI,OAAAD,EAAQH,EAAI,QACdC,EAAO,KAAKF,EAAOC,EAAI,MAAMG,CAAK,EAAG,EAAK,CAAC,EAEtCF,CAAA,CAEX"} {"version":3,"file":"index.umd.js","sources":["../src/commons/record-util.ts","../src/commons/str-utils.ts"],"sourcesContent":["import { UnwrapNestedRefs } from 'vue';\r\nenum ClearMode {\r\n clear = 3,\r\n delete = 2,\r\n reset = 1\r\n}\r\nexport const withRecord = (\r\n obj: UnwrapNestedRefs<Record<string, any>>,\r\n) => {\r\n\r\n return {\r\n clear: function (mode: ClearMode = ClearMode.delete) {\r\n if (mode === ClearMode.reset) {\r\n Object.keys(obj).forEach((key) => {\r\n obj[key] = undefined;\r\n });\r\n } else if (mode === ClearMode.delete) {\r\n Object.keys(obj).forEach((key) => {\r\n delete obj[key];\r\n });\r\n } else {\r\n Object.assign(obj, {});\r\n }\r\n },\r\n replace: function (newVal: UnwrapNestedRefs<Record<string, any>>) {\r\n this.clear(ClearMode.clear);\r\n Object.assign(obj, newVal);\r\n }\r\n };\r\n};","/**\r\n * 生成给定函数体的函数注释。\r\n *\r\n * @param {RegExp} regExp - 用于匹配的正则表达式。\r\n * @param {(text: string, match: boolean) => T} matchHandler - 处理匹配到的文本的函数。\r\n * @param {(text: string, match: boolean) => T} [textHandler] - 处理未匹配到的文本的函数。\r\n * @return {(str: string) => T[]} - 分词器函数。\r\n */\r\nexport function stringTokenizer<T>(\r\n regExp: RegExp,\r\n matchHandler: (text: string, match: boolean) => T,\r\n textHandler?: (text: string, match: boolean) => T\r\n): (str: string) => T[] {\r\n\r\n const ifMatch = matchHandler;\r\n const ifText = textHandler?textHandler: matchHandler;\r\n\r\n return function (str: string) {\r\n const result: T[] = [];\r\n const matches = str.matchAll(regExp);\r\n let index = 0;\r\n for (const match of matches) {\r\n const before = str.slice(index, match.index);\r\n if (before) {\r\n result.push(ifText(before, false));\r\n }\r\n result.push(ifMatch(match[0], true));\r\n index = match.index! + match[0].length;\r\n }\r\n if (index < str.length) {\r\n result.push(ifText(str.slice(index), false));\r\n }\r\n return result;\r\n };\r\n}\r\n\r\n/**\r\n * 该函数接受两个参数,判断它们是否相等,不区分大小写。\r\n * 如果参数都是字符串类型,则将它们转换为小写后比较。\r\n * 如果两个参数都是undefined则返回true\r\n * 否则返回false。\r\n * @param source \r\n * @param target \r\n * @returns \r\n */\r\nexport function equalsIgnoreCase(\r\n source: string | undefined,\r\n target: string | undefined\r\n) {\r\n if (typeof source === \"string\" && typeof target === \"string\") {\r\n return source.toLowerCase() === target.toLowerCase();\r\n } else if (source === undefined && target === undefined) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * 这个函数接受一个字符串数组和一个字符串作为参数,\r\n * 在数组中判断是否存在与搜索字符串相同或相似的字符串,忽略大小写。\r\n * 如果找到匹配项则返回true否则返回false。\r\n * @param list 字符串数组\r\n * @param search 用来搜索的字符串\r\n * @returns 是否包含\r\n */\r\nexport const includeIgnoreCase = (list: string[], search: string) => {\r\n for (let i = 0; i < list.length; i++) {\r\n let item = list[i];\r\n if (equalsIgnoreCase(item, search)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\n"],"names":["withRecord","obj","mode","key","newVal","stringTokenizer","regExp","matchHandler","textHandler","ifMatch","ifText","str","result","matches","index","match","before","equalsIgnoreCase","source","target","includeIgnoreCase","list","search","i","item"],"mappings":"uOAMa,MAAAA,EACTC,IAGO,CACH,MAAO,SAAUC,EAAkB,EAAkB,CAC7CA,IAAS,EACT,OAAO,KAAKD,CAAG,EAAE,QAASE,GAAQ,CAC9BF,EAAIE,CAAG,EAAI,MAAA,CACd,EACMD,IAAS,EAChB,OAAO,KAAKD,CAAG,EAAE,QAASE,GAAQ,CAC9B,OAAOF,EAAIE,CAAG,CAAA,CACjB,EAEM,OAAA,OAAOF,EAAK,CAAA,CAAE,CAE7B,EACA,QAAS,SAAUG,EAA+C,CAC9D,KAAK,MAAM,GACJ,OAAA,OAAOH,EAAKG,CAAM,CAC7B,CAAA,GCnBQ,SAAAC,EACdC,EACAC,EACAC,EACsB,CAEtB,MAAMC,EAAUF,EACVG,EAASF,GAAyBD,EAExC,OAAO,SAAUI,EAAa,CAC5B,MAAMC,EAAc,CAAA,EACdC,EAAUF,EAAI,SAASL,CAAM,EACnC,IAAIQ,EAAQ,EACZ,UAAWC,KAASF,EAAS,CAC3B,MAAMG,EAASL,EAAI,MAAMG,EAAOC,EAAM,KAAK,EACvCC,GACFJ,EAAO,KAAKF,EAAOM,EAAQ,EAAK,CAAC,EAEnCJ,EAAO,KAAKH,EAAQM,EAAM,CAAC,EAAG,EAAI,CAAC,EACnCD,EAAQC,EAAM,MAASA,EAAM,CAAC,EAAE,MAClC,CACI,OAAAD,EAAQH,EAAI,QACdC,EAAO,KAAKF,EAAOC,EAAI,MAAMG,CAAK,EAAG,EAAK,CAAC,EAEtCF,CAAA,CAEX,CAWgB,SAAAK,EACdC,EACAC,EACA,CACA,OAAI,OAAOD,GAAW,UAAY,OAAOC,GAAW,SAC3CD,EAAO,YAAA,IAAkBC,EAAO,YAAY,EAC1CD,IAAW,QAAaC,IAAW,MAIhD,CAUa,MAAAC,EAAoB,CAACC,EAAgBC,IAAmB,CACnE,QAASC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CAChC,IAAAC,EAAOH,EAAKE,CAAC,EACb,GAAAN,EAAiBO,EAAMF,CAAM,EACxB,MAAA,EAEX,CACO,MAAA,EACT"}

View File

@ -6,11 +6,11 @@
* @param {(text: string, match: boolean) => T} [textHandler] - * @param {(text: string, match: boolean) => T} [textHandler] -
* @return {(str: string) => T[]} - * @return {(str: string) => T[]} -
*/ */
export function stringTokenizer<T>( export function stringTokenizer<T>(
regExp: RegExp, regExp: RegExp,
matchHandler: (text: string, match: boolean) => T, matchHandler: (text: string, match: boolean) => T,
textHandler?: (text: string, match: boolean) => T textHandler?: (text: string, match: boolean) => T
): (str: string) => T[] { ): (str: string) => T[] {
const ifMatch = matchHandler; const ifMatch = matchHandler;
const ifText = textHandler?textHandler: matchHandler; const ifText = textHandler?textHandler: matchHandler;
@ -32,4 +32,44 @@
} }
return result; return result;
}; };
}
/**
*
*
* undefinedtrue
* false
* @param source
* @param target
* @returns
*/
export function equalsIgnoreCase(
source: string | undefined,
target: string | undefined
) {
if (typeof source === "string" && typeof target === "string") {
return source.toLowerCase() === target.toLowerCase();
} else if (source === undefined && target === undefined) {
return true;
} }
return false;
}
/**
*
*
* truefalse
* @param list
* @param search
* @returns
*/
export const includeIgnoreCase = (list: string[], search: string) => {
for (let i = 0; i < list.length; i++) {
let item = list[i];
if (equalsIgnoreCase(item, search)) {
return true;
}
}
return false;
};

View File

@ -1,4 +1,4 @@
import { withRecord } from "./commons/record-util"; import { withRecord } from "./commons/record-util";
import { stringTokenizer } from "./commons/str-utils"; import { stringTokenizer, equalsIgnoreCase, includeIgnoreCase } from "./commons/str-utils";
export { stringTokenizer, withRecord }; export { stringTokenizer, withRecord, equalsIgnoreCase, includeIgnoreCase };