// flow-typed signature: f905b3d333ecfc2f63f26be6398f5726
// flow-typed version: <<STUB>>/weex-vdom-tester_v^0.2.0/flow_v0.42.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'weex-vdom-tester'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'weex-vdom-tester' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'weex-vdom-tester/lib/document' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/env/default' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/instance' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/modules/dom' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/modules/index' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/modules/modal' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/modules/storage' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/modules/stream' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/modules/timer' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/runtime' {
  declare module.exports: any;
}

declare module 'weex-vdom-tester/lib/util' {
  declare module.exports: any;
}

// Filename aliases
declare module 'weex-vdom-tester/index' {
  declare module.exports: $Exports<'weex-vdom-tester'>;
}
declare module 'weex-vdom-tester/index.js' {
  declare module.exports: $Exports<'weex-vdom-tester'>;
}
declare module 'weex-vdom-tester/lib/document.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/document'>;
}
declare module 'weex-vdom-tester/lib/env/default.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/env/default'>;
}
declare module 'weex-vdom-tester/lib/instance.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/instance'>;
}
declare module 'weex-vdom-tester/lib/modules/dom.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/dom'>;
}
declare module 'weex-vdom-tester/lib/modules/index.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/index'>;
}
declare module 'weex-vdom-tester/lib/modules/modal.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/modal'>;
}
declare module 'weex-vdom-tester/lib/modules/storage.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/storage'>;
}
declare module 'weex-vdom-tester/lib/modules/stream.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/stream'>;
}
declare module 'weex-vdom-tester/lib/modules/timer.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/timer'>;
}
declare module 'weex-vdom-tester/lib/runtime.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/runtime'>;
}
declare module 'weex-vdom-tester/lib/util.js' {
  declare module.exports: $Exports<'weex-vdom-tester/lib/util'>;
}
