Skip to content

Commit 985b1ce

Browse files
committed
[core, form] Simplify Merger type
1 parent 17b11e1 commit 985b1ce

25 files changed

+176
-119
lines changed

.changeset/cyan-panthers-refuse.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@sjsf/form": patch
3+
"docs": patch
4+
---
5+
6+
Simplify `Merger` type

apps/docs/src/content/docs/advanced/state-transformation.mdx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,27 @@ It will be replaced with `@sjsf/form/omit-extra-data` import in the major releas
2525

2626
```svelte
2727
<script lang="ts">
28-
import { Form, DefaultMerger } from "@sjsf/form";
28+
import { defaultMerger } from '@sjsf/form/core'
29+
import { Form } from "@sjsf/form";
2930
import { translation } from "@sjsf/form/translations/en";
3031
import { theme } from "@sjsf/form/basic-theme";
3132
import { omitExtraData2 } from "@sjsf/form/legacy-omit-extra-data";
3233
3334
import { schema, uiSchema, initialData } from "./schema";
3435
import { validator } from "./validator";
3536
import { transform } from "./transform";
36-
37-
const merger = new DefaultMerger(validator, schema);
37+
3838
let value = $state();
3939
</script>
4040
4141
<Form
4242
bind:value
4343
{...theme}
44-
{merger}
4544
{schema}
4645
{uiSchema}
4746
{validator}
4847
{translation}
49-
getSnapshot={() => omitExtraData2(validator, merger, schema, $state.snapshot(value))}
48+
getSnapshot={() => omitExtraData2(validator, defaultMerger, schema, $state.snapshot(value))}
5049
onSubmit={(value) => {
5150
console.log("transformed", value);
5251
}}

apps/docs/src/content/docs/api-reference/merger.mdx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ sidebar:
55
---
66

77
```typescript
8-
export interface Merger {
8+
interface Merger2 {
99
/**
1010
* Merges schema and its `allOf` schemas into a single schema
1111
*/
1212
mergeAllOf(schema: Schema): Schema;
13+
}
14+
15+
interface FormMerger extends Merger2 {
1316
/**
1417
* Merges defaults of `schema` into `formData`
1518
*/

packages/form/src/core/default-merger.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
1-
import mergeAllOf, { type Options } from "json-schema-merge-allof";
2-
3-
import type { Merger } from "./merger.js";
1+
import { defaultMerger, type Merger } from "./merger.js";
42
import type { Schema, SchemaValue } from "./schema.js";
53
import type { Validator } from "./validator.js";
64
import { getDefaultFormState2 } from "./default-state.js";
75

6+
/**
7+
* @deprecated use `DefaultFormMerger` from `@sjsf/form`
8+
*/
89
export class DefaultMerger implements Merger {
910
constructor(
1011
protected readonly validator: Validator,
1112
protected readonly rootSchema: Schema
1213
) {}
1314

1415
mergeAllOf(schema: Schema): Schema {
15-
return mergeAllOf(schema, {
16-
deep: false,
17-
} as Options) as Schema;
16+
return defaultMerger.mergeAllOf(schema);
1817
}
1918

2019
mergeFormDataAndSchemaDefaults(

packages/form/src/core/default-state.test.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,12 @@ import { RECURSIVE_REF, RECURSIVE_REF_ALLOF } from "./fixtures/test-data.js";
2222
import type { Validator } from "./validator.js";
2323
import type { Schema } from "./schema.js";
2424
import { makeTestValidator } from "./test-validator.js";
25-
import { DefaultMerger } from './default-merger.js';
26-
import type { Merger } from './merger.js';
25+
import { defaultMerger } from './merger.js';
2726

2827
let testValidator: Validator;
29-
let defaultMerger: Merger
3028

3129
beforeEach(() => {
3230
testValidator = makeTestValidator();
33-
defaultMerger = new DefaultMerger(testValidator, {});
3431
});
3532

3633
describe("getDefaultFormState2()", () => {

packages/form/src/core/default-state.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import {
2525
import { getSimpleSchemaType } from "./type.js";
2626
import { isMultiSelect2 } from "./is-select.js";
2727
import { getClosestMatchingOption2 } from "./matching.js";
28-
import { DefaultMerger } from './default-merger.js';
29-
import type { Merger } from './merger.js';
28+
import { defaultMerger } from './merger.js';
29+
import type { Merger2 } from './merger.js';
3030

3131
export function getDefaultValueForType(type: SchemaType) {
3232
switch (type) {
@@ -59,7 +59,7 @@ export function getDefaultFormState(
5959
rootSchema?: Schema,
6060
includeUndefinedValues: boolean | "excludeObjectChildren" = false,
6161
experimental_defaultFormStateBehavior?: Experimental_DefaultFormStateBehavior,
62-
merger: Merger = new DefaultMerger(validator, rootSchema ?? theSchema)
62+
merger: Merger2 = defaultMerger
6363
): SchemaValue | undefined {
6464
return getDefaultFormState2(
6565
validator,
@@ -74,7 +74,7 @@ export function getDefaultFormState(
7474

7575
export function getDefaultFormState2(
7676
validator: Validator,
77-
merger: Merger,
77+
merger: Merger2,
7878
theSchema: Schema,
7979
formData?: SchemaValue,
8080
rootSchema?: Schema,
@@ -188,7 +188,7 @@ export function computeDefaults<T extends SchemaValue>(
188188
validator: Validator,
189189
rawSchema: Schema,
190190
computeDefaultsProps?: ComputeDefaultsProps,
191-
merger: Merger = new DefaultMerger(validator, rawSchema)
191+
merger = defaultMerger
192192
): SchemaValue | undefined {
193193
return computeDefaults2<T>(
194194
validator,
@@ -200,7 +200,7 @@ export function computeDefaults<T extends SchemaValue>(
200200

201201
export function computeDefaults2<T extends SchemaValue>(
202202
validator: Validator,
203-
merger: Merger,
203+
merger: Merger2,
204204
rawSchema: Schema,
205205
{
206206
parentDefaults,

packages/form/src/core/is-file-schema.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// Licensed under the Apache License, Version 2.0.
33
// Modifications made by Roman Krasilnikov.
44

5-
import { DefaultMerger } from './default-merger.js';
6-
import type { Merger } from './merger.js';
5+
import { defaultMerger } from './merger.js';
6+
import type { Merger2 } from './merger.js';
77
import { retrieveSchema2 } from "./resolve.js";
88
import { DATA_URL_FORMAT, isNormalArrayItems, type Schema } from "./schema.js";
99
import type { Validator } from "./validator.js";
@@ -19,14 +19,14 @@ export function isFilesArray(
1919
validator: Validator,
2020
schema: Schema,
2121
rootSchema?: Schema,
22-
merger: Merger = new DefaultMerger(validator, rootSchema ?? schema)
22+
merger = defaultMerger,
2323
) {
2424
return isFilesArray2(validator, merger, schema, rootSchema);
2525
}
2626

2727
export function isFilesArray2(
2828
validator: Validator,
29-
merger: Merger,
29+
merger: Merger2,
3030
schema: Schema,
3131
rootSchema?: Schema
3232
) {

packages/form/src/core/is-select.test.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,12 @@ import type { Schema } from "./schema.js";
88
import type { Validator } from "./validator.js";
99
import { isMultiSelect2, isSelect2 } from "./is-select.js";
1010
import { makeTestValidator } from "./test-validator.js";
11-
import { DefaultMerger } from './default-merger.js';
12-
import type { Merger } from './merger.js';
11+
import { defaultMerger } from './merger.js';
1312

1413
let testValidator: Validator;
15-
let defaultMerger: Merger
1614

1715
beforeEach(() => {
1816
testValidator = makeTestValidator();
19-
defaultMerger = new DefaultMerger(testValidator, {});
2017
});
2118

2219
describe("isSelect2()", () => {

packages/form/src/core/is-select.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import type { Schema } from "./schema.js";
66
import type { Validator } from "./validator.js";
77
import { retrieveSchema2 } from "./resolve.js";
88
import { isSchemaOfConstantValue } from "./constant-schema.js";
9-
import type { Merger } from "./merger.js";
10-
import { DefaultMerger } from "./default-merger.js";
9+
import { defaultMerger, type Merger2 } from "./merger.js";
1110

1211
/**
1312
* @deprecated use `isSelect2`
@@ -16,14 +15,14 @@ export function isSelect(
1615
validator: Validator,
1716
theSchema: Schema,
1817
rootSchema: Schema,
19-
merger: Merger = new DefaultMerger(validator, rootSchema)
18+
merger = defaultMerger
2019
) {
2120
return isSelect2(validator, merger, theSchema, rootSchema);
2221
}
2322

2423
export function isSelect2(
2524
validator: Validator,
26-
merger: Merger,
25+
merger: Merger2,
2726
theSchema: Schema,
2827
rootSchema: Schema
2928
) {
@@ -48,14 +47,14 @@ export function isMultiSelect(
4847
validator: Validator,
4948
schema: Schema,
5049
rootSchema: Schema,
51-
merger: Merger = new DefaultMerger(validator, rootSchema)
50+
merger = defaultMerger
5251
) {
5352
return isMultiSelect2(validator, merger, schema, rootSchema);
5453
}
5554

5655
export function isMultiSelect2(
5756
validator: Validator,
58-
merger: Merger,
57+
merger: Merger2,
5958
schema: Schema,
6059
rootSchema: Schema
6160
) {

packages/form/src/core/matching.test.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,15 @@ import { calculateIndexScore2, getClosestMatchingOption2 } from "./matching.js";
1717
import { beforeEach, describe, expect, it } from "vitest";
1818
import type { Validator } from "./validator.js";
1919
import { makeTestValidator } from "./test-validator.js";
20-
import { DefaultMerger } from "./default-merger.js";
21-
import type { Merger } from './merger.js';
20+
import { defaultMerger } from './merger.js';
2221

2322
const firstOption = oneOfSchema.definitions!.first_option_def as Schema;
2423
const secondOption = oneOfSchema.definitions!.second_option_def as Schema;
2524

2625
let testValidator: Validator;
27-
let defaultMerger: Merger
2826

2927
beforeEach(() => {
3028
testValidator = makeTestValidator();
31-
defaultMerger = new DefaultMerger(testValidator, oneOfSchema);
3229
});
3330

3431
describe("calculateIndexScore", () => {

0 commit comments

Comments
 (0)