    def run(self):
        if not self.should_run():
            print("bower dependencies up to date")
            return
        
        if self.should_run_npm():
            print("installing build dependencies with npm")
            run(['npm', 'install'], cwd=repo_root)
            os.utime(self.node_modules, None)
        
        env = os.environ.copy()
        env['PATH'] = npm_path
        
        try:
            run(
                ['bower', 'install', '--allow-root', '--config.interactive=false'],
                cwd=repo_root,
                env=env
            )
        except OSError as e:
            print("Failed to run bower: %s" % e, file=sys.stderr)
            print("You can install js dependencies with `npm install`", file=sys.stderr)
            raise
        # self.npm_components()
        if not os.path.exists(self.sanitizer_dir):
            run(['npm', 'run', 'build:webpack'], cwd=repo_root, env=env)
        os.utime(self.bower_dir, None)
        # update package data in case this created new files
        update_package_data(self.distribution)
The software does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.