MCPcopy Create free account
hub / github.com/Bloom-Engine/engine / validate

Function validate

tools/build-materials-from-json.ts:68–101  ·  view source on GitHub ↗
(name: string, desc: unknown)

Source from the content-addressed store, hash-verified

66}
67
68function validate(name: string, desc: unknown): MaterialJson {
69 if (typeof desc !== 'object' || desc === null) {
70 throw new Error(`${name}: expected an object, got ${typeof desc}`);
71 }
72 const d = desc as Record<string, unknown>;
73 if (typeof d.shader !== 'string' || d.shader.length === 0) {
74 throw new Error(`${name}: missing or empty "shader" field`);
75 }
76 if (typeof d.bucket !== 'string' || !VALID_BUCKETS.includes(d.bucket as Bucket)) {
77 throw new Error(
78 `${name}: "bucket" must be one of ${VALID_BUCKETS.join(', ')} (got ${JSON.stringify(d.bucket)})`,
79 );
80 }
81 if (d.params !== undefined) {
82 if (!Array.isArray(d.params)) {
83 throw new Error(`${name}: "params" must be an array of numbers if present`);
84 }
85 for (const v of d.params) {
86 if (typeof v !== 'number' || Number.isNaN(v)) {
87 throw new Error(`${name}: "params" must contain only finite numbers`);
88 }
89 }
90 if (d.params.length > 64) {
91 throw new Error(
92 `${name}: "params" length ${d.params.length} exceeds the 64-float (256-byte) ABI cap`,
93 );
94 }
95 }
96 return {
97 shader: d.shader,
98 bucket: d.bucket as Bucket,
99 params: d.params as number[] | undefined,
100 };
101}
102
103function emitParams(params: number[] | undefined): string {
104 if (!params || params.length === 0) return '';

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected