text: const {
    info,
    done
  } = require('@vue/cli-shared-utils')
  
  const updateComponents = require('./component')
  const updateApis = require('./api')
  
  class WebpackOptimizePlugin {
    apply (compiler) {
      let optimized = false
      compiler.hooks.beforeCompile.tapPromise('WebpackOptimizePlugin', compilation => {
        return new Promise((resolve, reject) => {
          if (!optimized) {
            updateComponents(new Set())
            updateApis(new Set(), new Set())
          }
          resolve()
        })
      })
      compiler.hooks.shouldEmit.tap('WebpackOptimizePlugin', compilation => {
        return optimized
      })
      compiler.hooks.done.tapPromise('WebpackOptimizePlugin', compilation => {
        return new Promise((resolve, reject) => {
          if (!optimized) {
            console.log()
            info('Build optimizing...')
            optimized = true
            updateComponents(process.UNI_TAGS || new Set())
            updateApis(process.UNI_APIS || new Set(), process.UNI_USER_APIS || new Set())
          } else {
            done('Build complete.')
            process.exit(0)
          }
          resolve()
        })
      })
    }
  }
  
  module.exports = WebpackOptimizePlugin
  