watcher and builder utility for component