@@ -20,7 +20,7 @@ const WaveSchemaSettingsFileName = "schema/settings.json"
2020const WaveSchemaConnectionsFileName = "schema/connections.json"
2121const WaveSchemaAiPresetsFileName = "schema/aipresets.json"
2222const WaveSchemaWidgetsFileName = "schema/widgets.json"
23- const WaveSchemaBgPresetsFileName = "schema/bgpresets .json"
23+ const WaveSchemaBackgroundsFileName = "schema/backgrounds .json"
2424const WaveSchemaWaveAIFileName = "schema/waveai.json"
2525
2626// ViewNameType is a string type whose JSON Schema offers enum suggestions for the most
@@ -105,8 +105,26 @@ type WidgetsMetaSchemaHints struct {
105105 TermDurable * bool `json:"term:durable,omitempty"`
106106}
107107
108- func generateSchema (template any , dir string ) error {
108+ // allowNullValues wraps the top-level additionalProperties of a map schema with
109+ // anyOf: [originalSchema, {type: "null"}] so that setting a key to null is valid
110+ // (e.g. "bg@foo": null to remove a default entry).
111+ func allowNullValues (schema * jsonschema.Schema ) {
112+ if schema .AdditionalProperties != nil && schema .AdditionalProperties != jsonschema .TrueSchema && schema .AdditionalProperties != jsonschema .FalseSchema {
113+ original := schema .AdditionalProperties
114+ schema .AdditionalProperties = & jsonschema.Schema {
115+ AnyOf : []* jsonschema.Schema {
116+ original ,
117+ {Type : "null" },
118+ },
119+ }
120+ }
121+ }
122+
123+ func generateSchema (template any , dir string , allowNull bool ) error {
109124 settingsSchema := jsonschema .Reflect (template )
125+ if allowNull {
126+ allowNullValues (settingsSchema )
127+ }
110128
111129 jsonSettingsSchema , err := json .MarshalIndent (settingsSchema , "" , " " )
112130 if err != nil {
@@ -147,6 +165,7 @@ func generateWidgetsSchema(dir string) error {
147165
148166 widgetsTemplate := make (map [string ]wconfig.WidgetConfigType )
149167 widgetsSchema := r .Reflect (& widgetsTemplate )
168+ allowNullValues (widgetsSchema )
150169
151170 jsonWidgetsSchema , err := json .MarshalIndent (widgetsSchema , "" , " " )
152171 if err != nil {
@@ -163,19 +182,19 @@ func generateWidgetsSchema(dir string) error {
163182}
164183
165184func main () {
166- err := generateSchema (& wconfig.SettingsType {}, WaveSchemaSettingsFileName )
185+ err := generateSchema (& wconfig.SettingsType {}, WaveSchemaSettingsFileName , false )
167186 if err != nil {
168187 log .Fatalf ("settings schema error: %v" , err )
169188 }
170189
171190 connectionTemplate := make (map [string ]wconfig.ConnKeywords )
172- err = generateSchema (& connectionTemplate , WaveSchemaConnectionsFileName )
191+ err = generateSchema (& connectionTemplate , WaveSchemaConnectionsFileName , false )
173192 if err != nil {
174193 log .Fatalf ("connections schema error: %v" , err )
175194 }
176195
177196 aiPresetsTemplate := make (map [string ]wconfig.AiSettingsType )
178- err = generateSchema (& aiPresetsTemplate , WaveSchemaAiPresetsFileName )
197+ err = generateSchema (& aiPresetsTemplate , WaveSchemaAiPresetsFileName , false )
179198 if err != nil {
180199 log .Fatalf ("ai presets schema error: %v" , err )
181200 }
@@ -185,14 +204,14 @@ func main() {
185204 log .Fatalf ("widgets schema error: %v" , err )
186205 }
187206
188- bgPresetsTemplate := make (map [string ]wconfig.BgPresetsType )
189- err = generateSchema (& bgPresetsTemplate , WaveSchemaBgPresetsFileName )
207+ backgroundsTemplate := make (map [string ]wconfig.BackgroundConfigType )
208+ err = generateSchema (& backgroundsTemplate , WaveSchemaBackgroundsFileName , true )
190209 if err != nil {
191- log .Fatalf ("bg presets schema error: %v" , err )
210+ log .Fatalf ("backgrounds schema error: %v" , err )
192211 }
193212
194213 waveAITemplate := make (map [string ]wconfig.AIModeConfigType )
195- err = generateSchema (& waveAITemplate , WaveSchemaWaveAIFileName )
214+ err = generateSchema (& waveAITemplate , WaveSchemaWaveAIFileName , false )
196215 if err != nil {
197216 log .Fatalf ("waveai schema error: %v" , err )
198217 }
0 commit comments