Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions packages/core/getFieldWithDefault/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
category: '@Core'
---

# getField

Get object field with multiple default fields.

## Usage

```ts
import { getFieldWithDefault } from '@use-kit/functions'

const obj = { name: 'asuka', age: 23, height: 158 }
const ret = getFieldWithDefault(obj, 'default', obj.id, obj.name, obj.nickname) // 'asuak'
```
15 changes: 15 additions & 0 deletions packages/core/getFieldWithDefault/index.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { describe, expect, it } from 'vitest'
import { getFieldWithDefault } from '.'

describe('getFieldWithDefault', () => {
it('default', () => {
const obj = { name: 'asuka', age: 23, height: 158 }
expect(getFieldWithDefault(
obj,
'defaultValue',
(obj as any)?.id,
obj?.name,
(obj as any)?.nickname,
)).toMatchInlineSnapshot('"defaultValue"')
})
})
20 changes: 20 additions & 0 deletions packages/core/getFieldWithDefault/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
interface ObjectWithFields { [key: string]: any }

// TODO: get field with multiple default fields
export function getFieldWithDefault<T>(
obj: ObjectWithFields,
defaultValue: T,
...fields: string[]
): T {
if (typeof obj !== 'object' || obj === null)
return defaultValue

console.log('fields', fields)
for (const field of fields) {
if (Reflect.has(obj, field))
return field as T
}
console.log('default')

return defaultValue
}
20 changes: 20 additions & 0 deletions packages/core/getKeys/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
category: '@Core'
---

# getKeys

Get keys.

## Usage

```ts{6,7}
import { getKeys } from '@use-kit/functions'

const p = { name: 'asuka', age: 24 }
const ret = getKeys(p)
// [
// "name",
// "age",
// ]
```
25 changes: 25 additions & 0 deletions packages/core/getKeys/index.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { describe, expect, it } from 'vitest'
import { getKeys } from '.'

describe('getKeys', () => {
it('get keys', () => expect(getKeys({ name: 'asuka', age: 24 })).toMatchInlineSnapshot(`
[
"name",
"age",
]
`))

const map = new Map([
['akashi', { id: 'akashi' }],
['asuka', { id: 'asuka' }],
])

it('get map keys', () => {
expect(getKeys(map)).toMatchInlineSnapshot(`
[
"akashi",
"asuka",
]
`)
})
})
14 changes: 14 additions & 0 deletions packages/core/getKeys/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { isEmpty, isMap } from '..'

export const getKeys = (
obj: object | Map<string, any> | null | undefined,
): string[] => {
if (isEmpty(obj))
return []

if (isMap(obj))
return Array.from((obj as Map<string, any>).keys())

else
return Object.keys(obj as object)
}
9 changes: 8 additions & 1 deletion packages/core/getValues/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ Get values.

## Usage

```ts
```ts{6,7}
import { getValues } from '@use-kit/functions'

const p = { name: 'asuka', age: 24 }
const ret = getValues(p)
// [
// "asuka",
// 24,
// ]
```
39 changes: 38 additions & 1 deletion packages/core/getValues/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,42 @@
import { describe, expect, it } from 'vitest'
import { getValues } from '.'

describe('getField', () => {
it('get values', () => expect(true).toBeTruthy())
it('get values', () => expect(getValues({ name: 'asuka', age: 24 })).toMatchInlineSnapshot(`
[
"asuka",
24,
]
`))

it('get string values', () => {
expect(getValues('akashi')).toMatchInlineSnapshot(`
[
"a",
"k",
"a",
"s",
"h",
"i",
]
`)
})

const map = new Map([
['akashi', { id: 'akashi' }],
['asuka', { id: 'asuka' }],
])

it('get map values', () => {
expect(getValues(map as any)).toMatchInlineSnapshot(`
[
{
"id": "akashi",
},
{
"id": "asuka",
},
]
`)
})
})
19 changes: 16 additions & 3 deletions packages/core/getValues/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
export const getValues = <T>(object: { [key: string]: T } | null | undefined): T[] => {
if (object == null)
import { isEmpty, isMap } from '..'

interface GenericObject<T> {
[key: string]: T
}

export const getValues = <T>(object: {
[key: string]: T
} | Map<string, T> | string | null | undefined): T[] => {
if (isEmpty(object))
return []

return Object.keys(object).map(key => object[key])
if (isMap(object))
return Array.from((object as Map<string, T>).values())

return Object
.keys((object as GenericObject<T>))
.map(key => (object as GenericObject<T>)[key])
}
2 changes: 2 additions & 0 deletions packages/core/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ export * from './getAge'
export * from './getConstellation'
export * from './getField'
export * from './getFileType'
export * from './getKeys'
export * from './getObjectField'
export * from './getTreeNode'
export * from './getValues'

export * from './hasField'
export * from './hideMobile'
Expand Down
10 changes: 8 additions & 2 deletions packages/core/withDefaultObject/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,15 @@ describe('default object', () => {
it('with default undefined', () => {
const target = undefined
const source = { x: 0, y: 0 }
withDefaultObject(target, source)
const ret = withDefaultObject(target, source)

// TODO:
// undefined can't set to object, use return value
expect(target).toMatchInlineSnapshot('undefined')
expect(ret).toMatchInlineSnapshot(`
{
"x": 0,
"y": 0,
}
`)
})
})
16 changes: 16 additions & 0 deletions packages/docs/core/getFieldWithDefault/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
category: '@Core'
---

# getField

Get object field with multiple default fields.

## Usage

```ts
import { getFieldWithDefault } from '@use-kit/functions'

const obj = { name: 'asuka', age: 23, height: 158 }
const ret = getFieldWithDefault(obj, 'default', obj.id, obj.name, obj.nickname) // 'asuak'
```
20 changes: 20 additions & 0 deletions packages/docs/core/getKeys/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
category: '@Core'
---

# getKeys

Get keys.

## Usage

```ts{6,7}
import { getKeys } from '@use-kit/functions'

const p = { name: 'asuka', age: 24 }
const ret = getKeys(p)
// [
// "name",
// "age",
// ]
```
9 changes: 8 additions & 1 deletion packages/docs/core/getValues/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ Get values.

## Usage

```ts
```ts{6,7}
import { getValues } from '@use-kit/functions'

const p = { name: 'asuka', age: 24 }
const ret = getValues(p)
// [
// "asuka",
// 24,
// ]
```