Skip to content

Commit 0380fdd

Browse files
committed
chore: replace lodash to decrease bundle size
Replace `lodash.isequal` by `@gilbarbara/deep-equal` and `lodash.clonedeep` by `klona` to decrease the bundle size.
1 parent 1b29f8a commit 0380fdd

File tree

9 files changed

+51
-54
lines changed

9 files changed

+51
-54
lines changed

package-lock.json

+22-25
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/react/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
"react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
6060
},
6161
"dependencies": {
62-
"@inertiajs/core": "2.0.3",
63-
"lodash.isequal": "^4.5.0"
62+
"@gilbarbara/deep-equal": "^0.3.1",
63+
"@inertiajs/core": "2.0.3"
6464
}
6565
}

packages/react/src/useForm.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { FormDataConvertible, Method, Progress, router, VisitOptions } from '@inertiajs/core'
2-
import isEqual from 'lodash.isequal'
2+
import isDeepEqual from '@gilbarbara/deep-equal'
33
import { useCallback, useEffect, useRef, useState } from 'react'
44
import useRemember from './useRemember'
55

@@ -270,7 +270,7 @@ export default function useForm<TForm extends FormDataType>(
270270
return {
271271
data,
272272
setData: setDataFunction,
273-
isDirty: !isEqual(data, defaults),
273+
isDirty: !isDeepEqual(data, defaults),
274274
errors,
275275
hasErrors,
276276
processing,

packages/svelte/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@
4343
"svelte": "^4.0.0 || ^5.0.0 || ^5.0.0-next.244"
4444
},
4545
"dependencies": {
46+
"@gilbarbara/deep-equal": "^0.3.1",
4647
"@inertiajs/core": "2.0.3",
4748
"html-escape": "^2.0.0",
48-
"lodash": "^4.5.0"
49+
"klona": "^2.0.5"
4950
},
5051
"devDependencies": {
5152
"@sveltejs/adapter-auto": "^3.2.0",
5253
"@sveltejs/kit": "^2.5.26",
5354
"@sveltejs/package": "^2.3.4",
5455
"@sveltejs/vite-plugin-svelte": "^3.1.2",
5556
"@types/html-escape": "^2.0.2",
56-
"@types/lodash": "^4.17.7",
5757
"axios": "^1.7.6",
5858
"publint": "^0.2.10",
5959
"svelte": "^4.2.16",

packages/svelte/src/useForm.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import type {
1111
} from '@inertiajs/core'
1212
import { router } from '@inertiajs/core'
1313
import type { AxiosProgressEvent } from 'axios'
14-
import cloneDeep from 'lodash/cloneDeep'
15-
import isEqual from 'lodash/isEqual'
14+
import { klona } from 'klona/full'
15+
import isDeepEqual from '@gilbarbara/deep-equal'
1616
import { writable, type Writable } from 'svelte/store'
1717

1818
type FormDataType = Record<string, FormDataConvertible>
@@ -63,7 +63,7 @@ export default function useForm<TForm extends FormDataType>(
6363
const restored = rememberKey
6464
? (router.restore(rememberKey) as { data: TForm; errors: Record<keyof TForm, string> } | null)
6565
: null
66-
let defaults = cloneDeep(data)
66+
let defaults = klona(data)
6767
let cancelToken: { cancel: () => void } | null = null
6868
let recentlySuccessfulTimeoutId: ReturnType<typeof setTimeout> | null = null
6969
let transform = (data: TForm) => data as object
@@ -95,16 +95,16 @@ export default function useForm<TForm extends FormDataType>(
9595
defaults(fieldOrFields?: keyof TForm | Partial<TForm>, maybeValue?: FormDataConvertible) {
9696
defaults =
9797
typeof fieldOrFields === 'undefined'
98-
? cloneDeep(this.data())
98+
? klona(this.data())
9999
: Object.assign(
100-
cloneDeep(defaults),
100+
klona(defaults),
101101
typeof fieldOrFields === 'string' ? { [fieldOrFields]: maybeValue } : fieldOrFields,
102102
)
103103

104104
return this
105105
},
106106
reset(...fields) {
107-
const clonedData = cloneDeep(defaults)
107+
const clonedData = klona(defaults)
108108
if (fields.length === 0) {
109109
this.setStore(clonedData)
110110
} else {
@@ -244,7 +244,7 @@ export default function useForm<TForm extends FormDataType>(
244244
} as InertiaForm<TForm>)
245245

246246
store.subscribe((form) => {
247-
if (form.isDirty === isEqual(form.data(), defaults)) {
247+
if (form.isDirty === isDeepEqual(form.data(), defaults)) {
248248
form.setStore('isDirty', !form.isDirty)
249249
}
250250

packages/vue3/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@
5858
"vue": "^3.0.0"
5959
},
6060
"dependencies": {
61+
"@gilbarbara/deep-equal": "^0.3.1",
6162
"@inertiajs/core": "2.0.3",
62-
"lodash.clonedeep": "^4.5.0",
63-
"lodash.isequal": "^4.5.0"
63+
"klona": "^2.0.5"
6464
}
6565
}

packages/vue3/src/remember.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { router } from '@inertiajs/core'
2-
import cloneDeep from 'lodash.clonedeep'
2+
import { klona } from 'klona/full'
33
import { ComponentOptions } from 'vue'
44

55
const remember: ComponentOptions = {
@@ -52,7 +52,7 @@ const remember: ComponentOptions = {
5252
rememberable.reduce(
5353
(data, key) => ({
5454
...data,
55-
[key]: cloneDeep(hasCallbacks(key) ? this[key].__remember() : this[key]),
55+
[key]: klona(hasCallbacks(key) ? this[key].__remember() : this[key]),
5656
}),
5757
{},
5858
),

packages/vue3/src/useForm.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { FormDataConvertible, Method, Progress, router, VisitOptions } from '@inertiajs/core'
2-
import cloneDeep from 'lodash.clonedeep'
3-
import isEqual from 'lodash.isequal'
2+
import { klona } from 'klona/full'
3+
import isDeepEqual from '@gilbarbara/deep-equal'
44
import { reactive, watch } from 'vue'
55

66
type FormDataType = Record<string, FormDataConvertible>
@@ -48,13 +48,13 @@ export default function useForm<TForm extends FormDataType>(
4848
const restored = rememberKey
4949
? (router.restore(rememberKey) as { data: TForm; errors: Record<keyof TForm, string> })
5050
: null
51-
let defaults = typeof data === 'function' ? cloneDeep(data()) : cloneDeep(data)
51+
let defaults = typeof data === 'function' ? klona(data()) : klona(data)
5252
let cancelToken = null
5353
let recentlySuccessfulTimeoutId = null
5454
let transform = (data) => data
5555

5656
const form = reactive({
57-
...(restored ? restored.data : cloneDeep(defaults)),
57+
...(restored ? restored.data : klona(defaults)),
5858
isDirty: false,
5959
errors: restored ? restored.errors : {},
6060
hasErrors: false,
@@ -84,16 +84,16 @@ export default function useForm<TForm extends FormDataType>(
8484
} else {
8585
defaults = Object.assign(
8686
{},
87-
cloneDeep(defaults),
87+
klona(defaults),
8888
typeof fieldOrFields === 'string' ? { [fieldOrFields]: maybeValue } : fieldOrFields,
8989
)
9090
}
9191

9292
return this
9393
},
9494
reset(...fields) {
95-
const resolvedData = typeof data === 'function' ? cloneDeep(data()) : cloneDeep(defaults)
96-
const clonedData = cloneDeep(resolvedData)
95+
const resolvedData = typeof data === 'function' ? klona(data()) : klona(defaults)
96+
const clonedData = klona(resolvedData)
9797
if (fields.length === 0) {
9898
defaults = clonedData
9999
Object.assign(this, resolvedData)
@@ -171,7 +171,7 @@ export default function useForm<TForm extends FormDataType>(
171171
recentlySuccessfulTimeoutId = setTimeout(() => (this.recentlySuccessful = false), 2000)
172172

173173
const onSuccess = options.onSuccess ? await options.onSuccess(page) : null
174-
defaults = cloneDeep(this.data())
174+
defaults = klona(this.data())
175175
this.isDirty = false
176176
return onSuccess
177177
},
@@ -242,9 +242,9 @@ export default function useForm<TForm extends FormDataType>(
242242
watch(
243243
form,
244244
(newValue) => {
245-
form.isDirty = !isEqual(form.data(), defaults)
245+
form.isDirty = !isDeepEqual(form.data(), defaults)
246246
if (rememberKey) {
247-
router.remember(cloneDeep(newValue.__remember()), rememberKey)
247+
router.remember(klona(newValue.__remember()), rememberKey)
248248
}
249249
},
250250
{ immediate: true, deep: true },

packages/vue3/src/useRemember.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { router } from '@inertiajs/core'
2-
import cloneDeep from 'lodash.clonedeep'
2+
import { klona } from 'klona/full'
33
import { isReactive, reactive, ref, Ref, watch } from 'vue'
44

55
export default function useRemember<T extends object>(
@@ -18,7 +18,7 @@ export default function useRemember<T extends object>(
1818
watch(
1919
remembered,
2020
(newValue) => {
21-
router.remember(cloneDeep(hasCallbacks ? data.__remember() : newValue), key)
21+
router.remember(klona(hasCallbacks ? data.__remember() : newValue), key)
2222
},
2323
{ immediate: true, deep: true },
2424
)

0 commit comments

Comments
 (0)