constructor(serverless, options) {
    this.serverless = serverless
    this.options = options || {}
    this.provider = this.serverless.getProvider('aws')
    this.originalFunctionConfigs = {}

    Object.assign(this, validate)

    this.commands = {
      'dev-build': {
        groupName: 'main',
        options: {},
        usage: 'Runs Dev Mode invocation',
        lifecycleEvents: ['build'],
        serviceDependencyMode: 'required',
        hasAwsExtension: true,
        type: 'entrypoint',
      },
    }
    this.hooks = {}
    /**
     * We need to pack and deploy the dev mode shim only when running the dev command.
     * Since hooks are registered for all plugins regardless of the command, we need to
     * make sure we only overwrite the default packaging behavior in the case of dev mode
     */
    if (this.serverless.processedInput.commands.includes('dev')) {
      this.hooks['before:package:createDeploymentArtifacts'] = async () =>
        await this.pack()
    }

    /**
     * I haven't put too much thought into the hooks we want to expose, but this is good enough for now.
     */
    this.hooks['dev:dev'] = async () => await this.dev()
    this.hooks['dev-build:build'] = async () => {}
  }
Constructs an instance of the dev mode plugin, setting up initial properties
and configuring hooks based on command inputs.

@constructor
@param {Object} serverless - The serverless instance
@param {Object} [options={}] - The options passed to the plugin, with
defaults to an empty object if not provided.