Suppose we have the following list:

createInstance = {import:create-instance-plugin}

person
  name = [this.nameList]
  nameList
    Salman
    Manny
    Rhian
  age = {31-49}
  child = [this.child_obj]
  child_obj
    name = [this.nameList]
    nameList
      Anne
      Arram
      Amelia
    age = {3-17}

If we output:

[p = createInstance(person, "deep"), p.name] [p.age] [p.name] [p.age]

We can see that it has fixed the name and the age property on the instance. However, if we output:

[p = createInstance(person, "deep"), p.child.name] [p.child.age] [p.child.name] [p.child.age]

It would throw undefined. Now looking at similar list:

person
  name = {Salman|Manny|Rhian}
  age = {31-49}
  child = [this.child_obj]
  child_obj
    name = {Anne|Arram|Amelia}
    age = {3-17}

output
  [p = createInstance(person, "deep"), p.child.name] [p.child.age] [p.child.name] [p.child.age]

This would have the values fixed and working.

Looking at the code of the create-instance-plugin, it would only allow the ‘deep’ fixing of properties if there isn’t any items/lists in it. What that means is the following:

child_obj
  name = [this.nameList]
  nameList
    Anne
    Arram
    Amelia
  age = {3-17}

This object/list, has a list ( nameList) within it as well as properties (name and age), while:

child_obj
  name = {Anne|Arram|Amelia}
  age = {3-17}

Only has properties. and based on Line 22 of the create-instance-plugin:

...
} else if(propValue.getPropertyKeys && propValue.getPropertyKeys.length > 0 && propValue.getLength === 0) {
...

If the list to be fixed has a list within it other than the properties i.e. propValue.getLength is not zero, then it wouldn’t fix the properties within it.

The first child_obj has a nameList with it, and upon calling propValue.getLength it would have 1 while the second child_obj will return a propValue.getLength of 0 since it doesn’t have any lists.

Thus, the solution for the problem is just removing the propValue.getLength === 0 check OR create another check without it.


TLDR; propValue.getLength === 0 at Line 22 of the create-instance-plugin can be removed to allow properties that rely on same level lists to be fixed. Here is the demo of the problem with a ‘remixed’ create instance plugin with the fix.

  • VioneTOPM
    link
    English
    1
    edit-2
    6 months ago

    Okay, might be too crazy now but, if the list has a list propValue.getLength > 0, we can do a .selectOne to it, then re-apply the previous properties to it. Meaning, it would have one ‘list’ value, but it would still have the previous properties.

    You can check the code here: https://perchance.org/hxoknecflu

    But if that might break more generators, then probably a new instance plugin might be good XDDDDD.

    Edit: it might still be breaking generators, since if the item that was .selectOneed is a list, then it would still randomize and not be fixed: See the [p.child.testing] in this generator: https://perchance.org/vnm320e3k6#edit