diff --git a/package.json b/package.json index 015a6cd..370ee4e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@use-kit/functions", "type": "module", - "version": "0.0.8", + "version": "0.0.9", "packageManager": "pnpm@8.4.0", "description": "", "author": "Akashi Sai ", @@ -39,6 +39,7 @@ "scripts": { "build": "unbuild", "build:rollup": "rollup --config rollup.config.ts --configPlugin typescript", + "clean": "rimraf dist", "dev": "unbuild --stub", "lint": "eslint .", "prepublishOnly": "nr build", @@ -46,10 +47,11 @@ "start": "esno packages/index.ts", "test": "vitest", "typecheck": "tsc --noEmit", + "docs:clean": "rimraf 'packages/docs/browser' 'packages/docs/core' 'packages/docs/integrated' 'packages/docs/node'", "docs:dev": "vitepress dev packages/docs", "docs:build": "vitepress build packages/docs", "docs:preview": "vitepress preview packages/docs", - "ci-docs": "tsno run scripts/ci-docs.ts" + "ci-docs": "nr docs:clean && tsno run scripts/ci-docs.ts" }, "dependencies": { "dayjs": "^1.11.7", diff --git a/packages/core/getObjectField/index.md b/packages/core/getObjectField/index.md index e28d30e..4d97af6 100644 --- a/packages/core/getObjectField/index.md +++ b/packages/core/getObjectField/index.md @@ -9,8 +9,11 @@ Filter object field. ## Usage ```ts -import { getObjectField } from '@use-kit/functions' +import { getObjectField, objectFilter } from '@use-kit/functions' const obj = { name: 'asuka', age: 23, height: 158 } const ret = getObjectField(obj, ['name']) // { name: 'asuka' } + +// The same way you can do +const ret = objectFilter(obj, (key, value) => key === 'name') ``` diff --git a/packages/core/getObjectField/index.test.ts b/packages/core/getObjectField/index.test.ts index cd7ac44..3c2f3d5 100644 --- a/packages/core/getObjectField/index.test.ts +++ b/packages/core/getObjectField/index.test.ts @@ -21,6 +21,12 @@ describe('should', () => { "name": "asuka", } `) + + expect(objectFilter(obj, (key: any) => key === 'name')).toMatchInlineSnapshot(` + { + "name": "asuka", + } + `) }) }) diff --git a/packages/core/getTreeNode/index.md b/packages/core/getTreeNode/index.md index 0992109..d74b57d 100644 --- a/packages/core/getTreeNode/index.md +++ b/packages/core/getTreeNode/index.md @@ -9,7 +9,7 @@ Get tree node. ## Usage ```ts -import { getTreeNode, getTreeNodes } from '@use-kit/functions' +import { getParentTree, getTreeNode, getTreeNodes } from '@use-kit/functions' const tree = [{ id: 'nogi', @@ -20,4 +20,5 @@ const tree = [{ const node = getTreeNode(tree, node => node.id === 'asuka') const nodes = getTreeNodes(tree, node => node.parent === 'nogi') +const parent = getParentTree(tree, node => node.id === 'shiori') // The result is consistent with the previous example ``` diff --git a/packages/core/getTreeNode/index.test.ts b/packages/core/getTreeNode/index.test.ts index de40f88..c184c02 100644 --- a/packages/core/getTreeNode/index.test.ts +++ b/packages/core/getTreeNode/index.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { getTreeNode, getTreeNodes } from '.' +import { getParentTree, getTreeNode, getTreeNodes } from '.' const tree = [{ id: 'nogi', @@ -34,4 +34,19 @@ describe('should', () => { ] `) }) + + it('getParentTree', () => { + expect(getParentTree(tree, (node: any) => node.id === 'shiori')).toMatchInlineSnapshot(` + [ + { + "id": "asuka", + "parent": "nogi", + }, + { + "id": "shiori", + "parent": "nogi", + }, + ] + `) + }) }) diff --git a/packages/core/index.ts b/packages/core/index.ts index 3f7754e..fec8b1d 100644 --- a/packages/core/index.ts +++ b/packages/core/index.ts @@ -1,7 +1,10 @@ export * from './composeTree' +export * from './debounce' + export * from './flattenArray' export * from './flattenTree' +export * from './fuzzyQuery' export * from './generateArray' export * from './generateTree' @@ -11,4 +14,15 @@ export * from './getFileType' export * from './getObjectField' export * from './getTreeNode' +export * from './hideMobile' + +export * from './isBase64' +export * from './isEmpty' export * from './isType' + +export * from './sum' +export * from './sumPercent' + +export * from './throttle' + +export * from './uniqueList' diff --git a/packages/core/mergeField/index.md b/packages/core/mergeField/index.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/core/mergeField/index.test.ts b/packages/core/mergeField/index.test.ts new file mode 100644 index 0000000..9577dcb --- /dev/null +++ b/packages/core/mergeField/index.test.ts @@ -0,0 +1,5 @@ +import { describe, expect, it } from 'vitest' + +describe('merge field', () => { + it('should', () => expect(true).toBeTruthy()) +}) diff --git a/packages/core/mergeField/index.ts b/packages/core/mergeField/index.ts new file mode 100644 index 0000000..6c8ea4d --- /dev/null +++ b/packages/core/mergeField/index.ts @@ -0,0 +1 @@ +// TODO: diff --git a/packages/core/mergeList/index.md b/packages/core/mergeList/index.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/core/mergeList/index.test.ts b/packages/core/mergeList/index.test.ts new file mode 100644 index 0000000..9577dcb --- /dev/null +++ b/packages/core/mergeList/index.test.ts @@ -0,0 +1,5 @@ +import { describe, expect, it } from 'vitest' + +describe('merge field', () => { + it('should', () => expect(true).toBeTruthy()) +}) diff --git a/packages/core/mergeList/index.ts b/packages/core/mergeList/index.ts new file mode 100644 index 0000000..6c8ea4d --- /dev/null +++ b/packages/core/mergeList/index.ts @@ -0,0 +1 @@ +// TODO: diff --git a/packages/core/sum/index.md b/packages/core/sum/index.md new file mode 100644 index 0000000..477b57a --- /dev/null +++ b/packages/core/sum/index.md @@ -0,0 +1,19 @@ +--- +category: '@Core' +--- + +# sum + +Return numbers as possible whether sum a number or string. + +## Usage + +```ts +import { sum } from '@use-kit/functions' + +sum(1, 2) // 3 +sum(1, '2') // 3 +sum('1', '2') // 3 +sum(1, 'a') // 1a +sum('b', 'c') // bc +``` diff --git a/packages/core/sum/index.test.ts b/packages/core/sum/index.test.ts new file mode 100644 index 0000000..5a4b3cd --- /dev/null +++ b/packages/core/sum/index.test.ts @@ -0,0 +1,24 @@ +import { describe, expect, it } from 'vitest' +import { sum } from '.' + +describe('sum', () => { + it('n & n', () => { + expect(sum(1, 2)).toBe(3) + }) + + it('n & sn', () => { + expect(sum(1, '3')).toBe(4) + }) + + it('sn & sn', () => { + expect(sum('2', '3')).toBe(5) + }) + + it('n & s', () => { + expect(sum(3, 'a')).toBe('3a') + }) + + it('s & s', () => { + expect(sum('b', 'c')).toBe('bc') + }) +}) diff --git a/packages/core/sum/index.ts b/packages/core/sum/index.ts new file mode 100644 index 0000000..e91e911 --- /dev/null +++ b/packages/core/sum/index.ts @@ -0,0 +1,18 @@ +import { isNumber, isString } from '..' + +type sumProps = number | string + +export const sum = (target: sumProps, source: sumProps) => { + if (isNumber(target) && isNumber(source)) + return (target as number) + (source as number) + + if (isString(target) || isString(source)) { + if (!isNaN(Number(target)) && !isNaN(Number(source))) + return Number(target) + Number(source) + + else + return (target as string) + (source as string) + } + + return (target as string) + (source as string) +} diff --git a/packages/core/sumPercent/index.md b/packages/core/sumPercent/index.md new file mode 100644 index 0000000..ac8e48a --- /dev/null +++ b/packages/core/sumPercent/index.md @@ -0,0 +1,16 @@ +--- +category: '@Core' +--- + +# sumPercent + +Sum percentage. + +## Usage + +```ts +import { percentToNumber, sumPercent } from '@use-kit/functions' + +const { x, y } = percentToNumber('20%', '30%') // { x: 20, y: 30 } +const ret = sumPercent('20%', '13%') // 33% +``` diff --git a/packages/core/sumPercent/index.test.ts b/packages/core/sumPercent/index.test.ts new file mode 100644 index 0000000..b32ae18 --- /dev/null +++ b/packages/core/sumPercent/index.test.ts @@ -0,0 +1,8 @@ +import { describe, expect, it } from 'vitest' +import { sumPercent } from '.' + +describe('sum percent', () => { + it('add', () => { + expect(sumPercent('20%', '13%')).toMatchInlineSnapshot('"33%"') + }) +}) diff --git a/packages/core/sumPercent/index.ts b/packages/core/sumPercent/index.ts new file mode 100644 index 0000000..a88b2da --- /dev/null +++ b/packages/core/sumPercent/index.ts @@ -0,0 +1,12 @@ +export const percentToNumber = (target: string, source: string) => { + const x = target.split('%')[0] + const y = source.split('%')[0] + + return { x: Number(x), y: Number(y) } +} + +export const sumPercent = (target: string, source: string) => { + const { x, y } = percentToNumber(target, source) + + return `${x + y}%` +} diff --git a/packages/core/uniqueArray/index.md b/packages/core/uniqueList/index.md similarity index 78% rename from packages/core/uniqueArray/index.md rename to packages/core/uniqueList/index.md index c8d275a..daf2c31 100644 --- a/packages/core/uniqueArray/index.md +++ b/packages/core/uniqueList/index.md @@ -2,17 +2,17 @@ category: '@Core' --- -# uniqueArray +# uniqueList Unique array. ## Usage ```ts{6} -import { uniqueArray } from '@use-kit/functions' +import { uniqueList } from '@use-kit/functions' const arr = [1, 2, 2, '1', 'ab', 'ac', 'ab'] -const ret = uniqueArray(arr) +const ret = uniqueList(arr) // expect: [1, 2, '1', 'ab', 'ac'] @@ -22,7 +22,7 @@ const arr = [ { id: 3, name: 'akashi' }, { id: 4, name: 'shiori' }, ] -const ret = uniqueArray(arr) +const ret = uniqueList(arr, 'name') // expect: [ // { diff --git a/packages/core/uniqueArray/index.test.ts b/packages/core/uniqueList/index.test.ts similarity index 83% rename from packages/core/uniqueArray/index.test.ts rename to packages/core/uniqueList/index.test.ts index b8b246b..3c09c28 100644 --- a/packages/core/uniqueArray/index.test.ts +++ b/packages/core/uniqueList/index.test.ts @@ -1,10 +1,10 @@ import { describe, expect, it } from 'vitest' -import { uniqueArray } from '.' +import { uniqueList } from '.' describe('unique array', () => { it('number string', () => { const arr = [1, 2, 2, 3, '1', 'akashi', 1, 'asuka', 'akashi', 3, 4] - expect(uniqueArray(arr)).toMatchInlineSnapshot(` + expect(uniqueList(arr)).toMatchInlineSnapshot(` [ 1, 2, @@ -24,7 +24,7 @@ describe('unique array', () => { { id: 3, name: 'akashi' }, { id: 4, name: 'shiori' }, ] - expect(uniqueArray(arr, 'name')).toMatchInlineSnapshot(` + expect(uniqueList(arr, 'name')).toMatchInlineSnapshot(` [ { "id": 1, diff --git a/packages/core/uniqueArray/index.ts b/packages/core/uniqueList/index.ts similarity index 94% rename from packages/core/uniqueArray/index.ts rename to packages/core/uniqueList/index.ts index 745061f..6b41dff 100644 --- a/packages/core/uniqueArray/index.ts +++ b/packages/core/uniqueList/index.ts @@ -1,6 +1,6 @@ import { typeOf } from '../isType' -export const uniqueArray = ( +export const uniqueList = ( arr: (number | string)[] | Record[] = [], key = 'id', ): (number | string)[] | Record[] => { diff --git a/packages/docs/core/getObjectField/index.md b/packages/docs/core/getObjectField/index.md index e28d30e..4d97af6 100644 --- a/packages/docs/core/getObjectField/index.md +++ b/packages/docs/core/getObjectField/index.md @@ -9,8 +9,11 @@ Filter object field. ## Usage ```ts -import { getObjectField } from '@use-kit/functions' +import { getObjectField, objectFilter } from '@use-kit/functions' const obj = { name: 'asuka', age: 23, height: 158 } const ret = getObjectField(obj, ['name']) // { name: 'asuka' } + +// The same way you can do +const ret = objectFilter(obj, (key, value) => key === 'name') ``` diff --git a/packages/docs/core/getTreeNode/index.md b/packages/docs/core/getTreeNode/index.md index 0992109..d74b57d 100644 --- a/packages/docs/core/getTreeNode/index.md +++ b/packages/docs/core/getTreeNode/index.md @@ -9,7 +9,7 @@ Get tree node. ## Usage ```ts -import { getTreeNode, getTreeNodes } from '@use-kit/functions' +import { getParentTree, getTreeNode, getTreeNodes } from '@use-kit/functions' const tree = [{ id: 'nogi', @@ -20,4 +20,5 @@ const tree = [{ const node = getTreeNode(tree, node => node.id === 'asuka') const nodes = getTreeNodes(tree, node => node.parent === 'nogi') +const parent = getParentTree(tree, node => node.id === 'shiori') // The result is consistent with the previous example ``` diff --git a/packages/docs/core/mergeField/index.md b/packages/docs/core/mergeField/index.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/docs/core/mergeList/index.md b/packages/docs/core/mergeList/index.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/docs/core/sum/index.md b/packages/docs/core/sum/index.md new file mode 100644 index 0000000..477b57a --- /dev/null +++ b/packages/docs/core/sum/index.md @@ -0,0 +1,19 @@ +--- +category: '@Core' +--- + +# sum + +Return numbers as possible whether sum a number or string. + +## Usage + +```ts +import { sum } from '@use-kit/functions' + +sum(1, 2) // 3 +sum(1, '2') // 3 +sum('1', '2') // 3 +sum(1, 'a') // 1a +sum('b', 'c') // bc +``` diff --git a/packages/docs/core/sumPercent/index.md b/packages/docs/core/sumPercent/index.md new file mode 100644 index 0000000..ac8e48a --- /dev/null +++ b/packages/docs/core/sumPercent/index.md @@ -0,0 +1,16 @@ +--- +category: '@Core' +--- + +# sumPercent + +Sum percentage. + +## Usage + +```ts +import { percentToNumber, sumPercent } from '@use-kit/functions' + +const { x, y } = percentToNumber('20%', '30%') // { x: 20, y: 30 } +const ret = sumPercent('20%', '13%') // 33% +``` diff --git a/packages/docs/core/uniqueArray/index.md b/packages/docs/core/uniqueList/index.md similarity index 78% rename from packages/docs/core/uniqueArray/index.md rename to packages/docs/core/uniqueList/index.md index c8d275a..daf2c31 100644 --- a/packages/docs/core/uniqueArray/index.md +++ b/packages/docs/core/uniqueList/index.md @@ -2,17 +2,17 @@ category: '@Core' --- -# uniqueArray +# uniqueList Unique array. ## Usage ```ts{6} -import { uniqueArray } from '@use-kit/functions' +import { uniqueList } from '@use-kit/functions' const arr = [1, 2, 2, '1', 'ab', 'ac', 'ab'] -const ret = uniqueArray(arr) +const ret = uniqueList(arr) // expect: [1, 2, '1', 'ab', 'ac'] @@ -22,7 +22,7 @@ const arr = [ { id: 3, name: 'akashi' }, { id: 4, name: 'shiori' }, ] -const ret = uniqueArray(arr) +const ret = uniqueList(arr, 'name') // expect: [ // {