diff --git a/Test/shadow.test.js b/Test/init.test.js similarity index 88% rename from Test/shadow.test.js rename to Test/init.test.js index 0cc9f70..a699bf1 100644 --- a/Test/shadow.test.js +++ b/Test/init.test.js @@ -1,4 +1,4 @@ -window.testSuites.push( class testShadow { +window.testSuites.push( class testInit { ObjectAsStateField() { class File extends Shadow { @@ -207,6 +207,32 @@ window.testSuites.push( class testShadow { } } + ErrorIfNotObservedObject() { + window.register(class ChildSpace extends Shadow { + $$form + $name + + render = () => { + + } + + constructor() { + super() + this.name = this.form.path.split("/").pop() + } + }, randomName("space-")) + + try { + let space = ChildSpace({path: "/asd"}) + return "no error thrown!" + } catch(e) { + if(e.message.includes("Observed Object")) { + } else { + throw e + } + } + } + FieldsInCorrectOrder() { window.register(class ChildSpace extends Shadow { $$form @@ -221,9 +247,13 @@ window.testSuites.push( class testShadow { this.name = this.form.path.split("/").pop() } }, randomName("space-")) + + class Form extends ObservedObject { + $path + } try { - let space = ChildSpace({path: "/asd"}) + let space = ChildSpace(Form.decode({path: "/asd"})) } catch(e) { if(e.message.includes("Cannot read properties of undefined (reading 'path')")) { return "Form did not get initialized!" diff --git a/Test/test.js b/Test/test.js index dac3514..c3c95ce 100644 --- a/Test/test.js +++ b/Test/test.js @@ -2,7 +2,7 @@ console.log("Tests initializing.") window.testSuites = []; await import ("./parse.test.js") -await import ("./shadow.test.js") +await import ("./init.test.js") await import ("./observedobject.test.js") await import ("./render.test.js") diff --git a/index.js b/index.js index 4525d93..b11b5bb 100644 --- a/index.js +++ b/index.js @@ -419,21 +419,22 @@ window.Registry = class Registry { makeState(elem, stateNames, params) makeObservedObjects(elem, observedObjectNames, params) - let allNamesCleaned = allNames - .filter(key => typeof elem[key] !== 'function' && key !== "_observers" && key !== "_observedObjects") - .map(key => key.replace(/^(\$\$|\$)/, '')); - let i = -1 for (let param of params) { i++ - if(i > allNamesCleaned.length) { + if(i > allNames.length) { console.error(`${el.prototype.constructor.name}: too many parameters for field!`) return } - if(elem[allNamesCleaned[i]] === undefined) { - elem[allNamesCleaned[i]] = param + let bareName = allNames[i].replace(/^(\$\$|\$)/, ''); + + if(elem[bareName] === undefined) { + if(allNames[i].startsWith("$$") && !(param instanceof ObservedObject)) { + throw new Error(`Field ${allNames[i]} must be an Observed Object!`) + } + elem[bareName] = param } } }