If plasmoid.nativeInterface.source != "", we copy it to plasmoid.configuration.source + same
with all other properties besides needsToBeSquare which is a "session" variable that updated
right after the migration code.
The selected weather services StringList is not a nativeInterface property, so it needs to be copied differently.
We could also copy the other properties the using the configValues().services pattern if you want the code consistent.
This is a pure QML solution. Ideally, the final patch will have a few more C++ functions/enums exposed to the QML. The DisplayUnits.qml properties could be turned into functions. Eg:
Utils.parseTemperatureUnitId(plasmoid.configuration.temperatureUnitId)
That way we don't have magic numbers (6001 // Celcius) littered throughout DisplayUnits.qml.
Ideally, we'll only keep the nativeInterface + migration code until Plasma 5.19 assuming Plasma 5.18 is the next Plasma LTS version. We could remove the migration code earlier, as having the user re-setup their weather widget isn't terribly cumbersome for the user.
Once it no longer depends on the nativeInterface, users can easily fork the default weather widget.
Immendiate benefits are that we no longer have to install the widget to .../share/plasma/plasmoids/ to test the widget's QML. We can now use plasmoidviewer -a package. Note that we still need to install to ~/.local/share/plasma/plasmoids/ to test the nativeInterface migration code as mentioned in the test plan.