Skip to content

Commit 86ceeff

Browse files
committed
fix: don't always clone properties in pickNonSpecialProps
1 parent 8f21f2f commit 86ceeff

File tree

6 files changed

+12
-12
lines changed

6 files changed

+12
-12
lines changed

packages/core/src/mutation/create.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export async function createItem<
2828

2929
const originalItem = item
3030

31-
item = pickNonSpecialProps(item) as Partial<ResolvedModelItem<TModel, TModelDefaults, TSchema>>
31+
item = pickNonSpecialProps(item, true) as Partial<ResolvedModelItem<TModel, TModelDefaults, TSchema>>
3232

3333
store.$processItemSerialization(model, item)
3434

packages/core/src/mutation/update.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export async function updateItem<
3131

3232
const originalItem = item
3333

34-
item = pickNonSpecialProps(item) as Partial<ResolvedModelItem<TModel, TModelDefaults, TSchema>>
34+
item = pickNonSpecialProps(item, true) as Partial<ResolvedModelItem<TModel, TModelDefaults, TSchema>>
3535

3636
key = key ?? model.getKey(item)
3737

packages/shared/src/utils/obj.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,21 @@ export function set<TObject, TPath extends Path<TObject>>(obj: TObject, path: TP
2525
current[keys.at(-1)!] = value
2626
}
2727

28-
export function pickNonSpecialProps<TItem extends Record<string, any>>(item: TItem): Pick<TItem, FilterNotStartingWith<keyof TItem, '$'>> {
28+
export function pickNonSpecialProps<TItem extends Record<string, any>>(item: TItem, clone = false): Pick<TItem, FilterNotStartingWith<keyof TItem, '$'>> {
2929
const result: any = {}
3030
for (const key in item) {
3131
if (!key.startsWith('$')) {
32-
result[key] = klona(item[key])
32+
result[key] = clone ? klona(item[key]) : item[key]
3333
}
3434
}
3535
return result
3636
}
3737

38-
export function pickSpecialProps<TItem extends Record<string, any>>(item: TItem): Pick<TItem, FilterStartsWith<keyof TItem, '$'>> {
38+
export function pickSpecialProps<TItem extends Record<string, any>>(item: TItem, clone = false): Pick<TItem, FilterStartsWith<keyof TItem, '$'>> {
3939
const result: any = {}
4040
for (const key in item) {
4141
if (key.startsWith('$')) {
42-
result[key] = klona(item[key])
42+
result[key] = clone ? klona(item[key]) : item[key]
4343
}
4444
}
4545
return result

packages/vue/src/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ export function createModelApi<
472472
throw new Error('Item not found')
473473
}
474474

475-
return pickNonSpecialProps(item)
475+
return pickNonSpecialProps(item, true)
476476
}
477477

478478
const initialData = await getFormData()

packages/vue/src/cache.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ export function createCache<
188188
writeItem({ model, key, item, marker, fromWriteItems }) {
189189
state.value[model.name] ??= {}
190190
const itemsForType = state.value[model.name]
191-
const rawData = pickNonSpecialProps(item)
191+
const rawData = pickNonSpecialProps(item, true)
192192

193193
// Handle relations
194194
const data = {} as Record<string, any>

packages/vue/src/form.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export function createFormObject<
6767
TSchema extends StandardSchemaV1 = StandardSchemaV1,
6868
const TAdditionalProps = Record<string, never>,
6969
>(options: CreateFormObjectOptions<TData, TSchema, TAdditionalProps>) {
70-
let initialData = pickNonSpecialProps(options.defaultValues?.() ?? {}) as Partial<TData>
70+
let initialData = pickNonSpecialProps(options.defaultValues?.() ?? {}, true) as Partial<TData>
7171

7272
const onSuccess = createEventHook()
7373
const onError = createEventHook<Error>()
@@ -88,18 +88,18 @@ export function createFormObject<
8888
}
8989
if (options.resetDefaultValues) {
9090
const values = await options.resetDefaultValues()
91-
initialData = pickNonSpecialProps(values) as Partial<TData>
91+
initialData = pickNonSpecialProps(values, true) as Partial<TData>
9292
}
9393
else if (options.defaultValues) {
94-
initialData = pickNonSpecialProps(options.defaultValues()) as Partial<TData>
94+
initialData = pickNonSpecialProps(options.defaultValues(), true) as Partial<TData>
9595
}
9696
Object.assign(form, initialData)
9797
},
9898
async $submit() {
9999
form.$loading = true
100100
form.$error = null
101101
try {
102-
const data = options?.transformData ? options.transformData(form as unknown as Partial<TData>) : pickNonSpecialProps(form) as Partial<TData>
102+
const data = options?.transformData ? options.transformData(form as unknown as Partial<TData>) : pickNonSpecialProps(form, true) as Partial<TData>
103103
const { issues } = await this.$schema['~standard'].validate(data)
104104
if (issues) {
105105
const error = new Error(issues.map(i => i.message).join(', '))

0 commit comments

Comments
 (0)