This seems fragile, again you have an order required to using methods.  Why not make `options.source` a JS getter which does this automatically?