@cratis/scene.engine 4.18.1 → 4.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -126,7 +126,7 @@ function validateObject(descriptor: PropertyDescriptor, value: unknown): string
126
126
  if (descriptor.properties === undefined) return isRecord(value) || Array.isArray(value) ? undefined : 'expected a structured value';
127
127
  if (!isRecord(value)) return 'expected a structured value';
128
128
 
129
- const problem = validateFields(descriptor.properties, value, 'this object').at(0);
129
+ const problem = validateFields(descriptor.properties, value, 'this object', descriptor.open === true).at(0);
130
130
  return problem ? `${problem.field} ${problem.problem}` : undefined;
131
131
  }
132
132
 
@@ -166,16 +166,16 @@ export interface ItemFieldProblem {
166
166
  * @returns Every field that is unknown or has an unacceptable value.
167
167
  */
168
168
  export function validateItemValues(itemDescriptor: CollectionItemDescriptor | undefined, values: Record<string, unknown>): ItemFieldProblem[] {
169
- return validateFields(itemDescriptor?.properties ?? [], values, 'this collection\'s items');
169
+ return validateFields(itemDescriptor?.properties ?? [], values, 'this collection\'s items', itemDescriptor?.open === true);
170
170
  }
171
171
 
172
- function validateFields(fields: PropertyDescriptor[], values: Record<string, unknown>, owner: string): ItemFieldProblem[] {
172
+ function validateFields(fields: PropertyDescriptor[], values: Record<string, unknown>, owner: string, open: boolean): ItemFieldProblem[] {
173
173
  const problems: ItemFieldProblem[] = [];
174
174
 
175
175
  for (const [field, fieldValue] of Object.entries(values)) {
176
176
  const fieldDescriptor = fields.find(candidate => candidate.path === field);
177
177
  if (!fieldDescriptor) {
178
- problems.push({ field, problem: `is not a field of ${owner}` });
178
+ if (!open) problems.push({ field, problem: `is not a field of ${owner}` });
179
179
  continue;
180
180
  }
181
181
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/scene.engine",
3
- "version": "4.18.1",
3
+ "version": "4.20.0",
4
4
  "description": "The Scene runtime: walks a Scene element tree and drives whichever renderer is plugged in. Does not know React, or any other rendering platform, exists.",
5
5
  "keywords": [
6
6
  "cratis",
@@ -48,9 +48,9 @@
48
48
  "up": "yarn g:up"
49
49
  },
50
50
  "dependencies": {
51
- "@cratis/scene.model": "4.18.1"
51
+ "@cratis/scene.model": "4.20.0"
52
52
  },
53
53
  "devDependencies": {
54
- "@cratis/scene.model": "4.18.1"
54
+ "@cratis/scene.model": "4.20.0"
55
55
  }
56
56
  }