diff --git a/browser-sync/browser-sync-tests.ts b/browser-sync/browser-sync-tests.ts index 98151772f8..210a8cf1bb 100644 --- a/browser-sync/browser-sync-tests.ts +++ b/browser-sync/browser-sync-tests.ts @@ -1,6 +1,13 @@ /// import browserSync = require("browser-sync"); +(() => { + //make sure that the interfaces are correctly exposed + var bsInstance: browserSync.BrowserSyncInstance; + var bsStatic: browserSync.BrowserSyncStatic; + var opts: browserSync.Options; +})(); + browserSync({ server: { baseDir: "./" diff --git a/browser-sync/browser-sync.d.ts b/browser-sync/browser-sync.d.ts index 77ae2ce357..00c2429425 100644 --- a/browser-sync/browser-sync.d.ts +++ b/browser-sync/browser-sync.d.ts @@ -14,256 +14,257 @@ declare module "browser-sync" { namespace browserSync { interface Options { /** - * Browsersync includes a user-interface that is accessed via a separate port. The UI allows to controls - * all devices, push sync updates and much more. - * - * port - Default: 3001 - * weinre.port - Default: 8080 - * Note: requires at least version 2.0.0 - */ + * Browsersync includes a user-interface that is accessed via a separate port. The UI allows to controls + * all devices, push sync updates and much more. + * + * port - Default: 3001 + * weinre.port - Default: 8080 + * Note: requires at least version 2.0.0 + */ ui?: UIOptions; /** - * Browsersync can watch your files as you work. Changes you make will either be injected into the page (CSS - * & images) or will cause all browsers to do a full-page refresh. See anymatch for more information on glob - * patterns. - * Default: false - */ + * Browsersync can watch your files as you work. Changes you make will either be injected into the page (CSS + * & images) or will cause all browsers to do a full-page refresh. See anymatch for more information on glob + * patterns. + * Default: false + */ files?: string | string[]; /** - * File watching options that get passed along to Chokidar. Check their docs for available options - * Default: undefined - * Note: requires at least version 2.6.0 - */ + * File watching options that get passed along to Chokidar. Check their docs for available options + * Default: undefined + * Note: requires at least version 2.6.0 + */ watchOptions?: ChokidarOptions; /** - * Use the built-in static server for basic HTML/JS/CSS websites. - * Default: false - */ + * Use the built-in static server for basic HTML/JS/CSS websites. + * Default: false + */ server?: ServerOptions; /** - * Proxy an EXISTING vhost. Browsersync will wrap your vhost with a proxy URL to view your site. - * target - Default: undefined - * ws - Default: undefined - * middleware - Default: undefined - * reqHeaders - Default: undefined - * proxyRes - Default: undefined - */ + * Proxy an EXISTING vhost. Browsersync will wrap your vhost with a proxy URL to view your site. + * target - Default: undefined + * ws - Default: undefined + * middleware - Default: undefined + * reqHeaders - Default: undefined + * proxyRes - Default: undefined + */ proxy?: string | boolean | ProxyOptions; /** - * Use a specific port (instead of the one auto-detected by Browsersync) - * Default: 3000 - */ + * Use a specific port (instead of the one auto-detected by Browsersync) + * Default: 3000 + */ port?: number; /** - * Add additional directories from which static files should be served. - * Should only be used in proxy or snippet mode. - * Default: [] - * Note: requires at least version 2.8.0 - */ + * Add additional directories from which static files should be served. + * Should only be used in proxy or snippet mode. + * Default: [] + * Note: requires at least version 2.8.0 + */ serveStatic?: string[]; /** - * Enable https for localhost development. - * Note - this is not needed for proxy option as it will be inferred from your target url. - * Note: requires at least version 1.3.0 - */ + * Enable https for localhost development. + * Note - this is not needed for proxy option as it will be inferred from your target url. + * Note: requires at least version 1.3.0 + */ https?: boolean; /** - * Clicks, Scrolls & Form inputs on any device will be mirrored to all others. - * clicks - Default: true - * scroll - Default: true - * forms - Default: true - */ + * Clicks, Scrolls & Form inputs on any device will be mirrored to all others. + * clicks - Default: true + * scroll - Default: true + * forms - Default: true + */ ghostMode?: GhostOptions | boolean; /** - * Can be either "info", "debug", "warn", or "silent" - * Default: info - */ + * Can be either "info", "debug", "warn", or "silent" + * Default: info + */ logLevel?: string; /** - * Change the console logging prefix. Useful if you're creating your own project based on Browsersync - * Default: BS - * Note: requires at least version 1.5.1 - */ + * Change the console logging prefix. Useful if you're creating your own project based on Browsersync + * Default: BS + * Note: requires at least version 1.5.1 + */ logPrefix?: string; /** - * Whether or not to log connections - * Default: false - */ + * Whether or not to log connections + * Default: false + */ logConnections?: boolean; /** - * Whether or not to log information about changed files - * Default: false - */ + * Whether or not to log information about changed files + * Default: false + */ logFileChanges?: boolean; /** - * Log the snippet to the console when you're in snippet mode (no proxy/server) - * Default: true - * Note: requires at least version 1.5.2 - */ + * Log the snippet to the console when you're in snippet mode (no proxy/server) + * Default: true + * Note: requires at least version 1.5.2 + */ logSnippet?: boolean; /** - * You can control how the snippet is injected onto each page via a custom regex + function. - * You can also provide patterns for certain urls that should be ignored from the snippet injection. - * Note: requires at least version 2.0.0 - */ + * You can control how the snippet is injected onto each page via a custom regex + function. + * You can also provide patterns for certain urls that should be ignored from the snippet injection. + * Note: requires at least version 2.0.0 + */ snippetOptions?: SnippetOptions; /** - * Add additional HTML rewriting rules. - * Default: false - * Note: requires at least version 2.4.0 - */ + * Add additional HTML rewriting rules. + * Default: false + * Note: requires at least version 2.4.0 + */ rewriteRules?: boolean | RewriteRules[]; /** - * Tunnel the Browsersync server through a random Public URL - * Default: null - */ + * Tunnel the Browsersync server through a random Public URL + * Default: null + */ tunnel?: string | boolean; /** - * Some features of Browsersync (such as xip & tunnel) require an internet connection, but if you're - * working offline, you can reduce start-up time by setting this option to false - */ + * Some features of Browsersync (such as xip & tunnel) require an internet connection, but if you're + * working offline, you can reduce start-up time by setting this option to false + */ online?: boolean; /** - * Default: true - * Decide which URL to open automatically when Browsersync starts. Defaults to "local" if none set. - * Can be true, local, external, ui, ui-external, tunnel or false - */ + * Default: true + * Decide which URL to open automatically when Browsersync starts. Defaults to "local" if none set. + * Can be true, local, external, ui, ui-external, tunnel or false + */ open?: string | boolean; /** - * The browser(s) to open - * Default: default - */ + * The browser(s) to open + * Default: default + */ browser?: string | string[]; /** - * Requires an internet connection - useful for services such as Typekit as it allows you to configure - * domains such as *.xip.io in your kit settings - * Default: false - */ + * Requires an internet connection - useful for services such as Typekit as it allows you to configure + * domains such as *.xip.io in your kit settings + * Default: false + */ xip?: boolean; /** - * Reload each browser when Browsersync is restarted. - * Default: false - */ + * Reload each browser when Browsersync is restarted. + * Default: false + */ reloadOnRestart?: boolean; /** - * The small pop-over notifications in the browser are not always needed/wanted. - * Default: true - */ + * The small pop-over notifications in the browser are not always needed/wanted. + * Default: true + */ notify?: boolean; /** - * scrollProportionally: false // Sync viewports to TOP position - * Default: true - */ + * scrollProportionally: false // Sync viewports to TOP position + * Default: true + */ scrollProportionally?: boolean /** - * How often to send scroll events - * Default: 0 - */ + * How often to send scroll events + * Default: 0 + */ scrollThrottle?: number; /** - * Decide which technique should be used to restore scroll position following a reload. - * Can be window.name or cookie - * Default: 'window.name' - */ + * Decide which technique should be used to restore scroll position following a reload. + * Can be window.name or cookie + * Default: 'window.name' + */ scrollRestoreTechnique?: string; /** - * Sync the scroll position of any element on the page. Add any amount of CSS selectors - * Default: [] - * Note: requires at least version 2.9.0 - */ + * Sync the scroll position of any element on the page. Add any amount of CSS selectors + * Default: [] + * Note: requires at least version 2.9.0 + */ scrollElements?: string[]; /** - * Default: [] - * Note: requires at least version 2.9.0 - * Sync the scroll position of any element on the page - where any scrolled element will cause - * all others to match scroll position. This is helpful when a breakpoint alters which element - * is actually scrolling - */ + * Default: [] + * Note: requires at least version 2.9.0 + * Sync the scroll position of any element on the page - where any scrolled element will cause + * all others to match scroll position. This is helpful when a breakpoint alters which element + * is actually scrolling + */ scrollElementMapping?: string[]; /** - * Time, in milliseconds, to wait before instructing the browser to reload/inject following a file change event - * Default: 0 - */ + * Time, in milliseconds, to wait before instructing the browser to reload/inject following a file + * change event + * Default: 0 + */ reloadDelay?: number; /** - * Restrict the frequency in which browser:reload events can be emitted to connected clients - * Default: 0 - * Note: requires at least version 2.6.0 - */ + * Restrict the frequency in which browser:reload events can be emitted to connected clients + * Default: 0 + * Note: requires at least version 2.6.0 + */ reloadDebounce?: number; /** - * User provided plugins - * Default: [] - * Note: requires at least version 2.6.0 - */ + * User provided plugins + * Default: [] + * Note: requires at least version 2.6.0 + */ plugins?: any[]; /** - * Whether to inject changes (rather than a page refresh) - * Default: true - */ + * Whether to inject changes (rather than a page refresh) + * Default: true + */ injectChanges?: boolean; /** - * The initial path to load - */ + * The initial path to load + */ startPath?: string; /** - * Whether to minify the client script - * Default: true - */ + * Whether to minify the client script + * Default: true + */ minify?: boolean; /** - * Override host detection if you know the correct IP to use - */ + * Override host detection if you know the correct IP to use + */ host?: string; /** - * Send file-change events to the browser - * Default: true - */ + * Send file-change events to the browser + * Default: true + */ codeSync?: boolean; /** - * Append timestamps to injected files - * Default: true - */ + * Append timestamps to injected files + * Default: true + */ timestamps?: boolean; /** - * Alter the script path for complete control over where the Browsersync Javascript is served - * from. Whatever you return from this function will be used as the script path. - * Note: requires at least version 1.5.0 - */ + * Alter the script path for complete control over where the Browsersync Javascript is served + * from. Whatever you return from this function will be used as the script path. + * Note: requires at least version 1.5.0 + */ scriptPath?: (path: string) => string; /** - * Configure the Socket.IO path and namespace & domain to avoid collisions. - * path - Default: "/browser-sync/socket.io" - * clientPath - Default: "/browser-sync" - * namespace - Default: "/browser-sync" - * domain - Default: undefined - * port - Default: undefined - * clients.heartbeatTimeout - Default: 5000 - * Note: requires at least version 1.6.2 - */ + * Configure the Socket.IO path and namespace & domain to avoid collisions. + * path - Default: "/browser-sync/socket.io" + * clientPath - Default: "/browser-sync" + * namespace - Default: "/browser-sync" + * domain - Default: undefined + * port - Default: undefined + * clients.heartbeatTimeout - Default: 5000 + * Note: requires at least version 1.6.2 + */ socket?: SocketOptions; } - + interface Hash { [path: string]: T; } - + interface ChokidarOptions { interval?: number; debounceDelay?: number; mode?: string; cwd?: string; } - + interface UIOptions { /** set the default port */ port?: number; /** set the default weinre port */ - weinre?: { + weinre?: { port?: number; - }; + }; } - + interface ServerOptions { /** set base directory */ baseDir?: string | string[]; @@ -272,14 +273,14 @@ declare module "browser-sync" { /** set index filename */ index?: string; /** - * key-value object hash, where the key is the url to match, - * and the value is the folder to serve (relative to your working directory) - * */ + * key-value object hash, where the key is the url to match, + * and the value is the folder to serve (relative to your working directory) + */ routes?: Hash; /** configure custom middleware */ middleware?: MiddlewareHandler[]; } - + interface ProxyOptions { target?: string; middleware?: MiddlewareHandler; @@ -287,22 +288,22 @@ declare module "browser-sync" { reqHeaders: (config: any) => Hash; proxyRes: (res: http.ServerResponse, req: http.ServerRequest, next: Function) => any; } - + interface MiddlewareHandler { (req: http.ServerRequest, res: http.ServerResponse, next: Function): any; } - + interface GhostOptions { clicks?: boolean; scroll?: boolean; forms?: boolean; } - + interface SnippetOptions { ignorePaths?: string; - rule?: {match?: RegExp; fn?: (snippet: string, match: string) => any}; + rule?: { match?: RegExp; fn?: (snippet: string, match: string) => any }; } - + interface SocketOptions { path?: string; clientPath?: string; @@ -311,101 +312,101 @@ declare module "browser-sync" { port?: number; clients?: { heartbeatTimeout?: number; }; } - + interface RewriteRules { match: RegExp; fn: (match: string) => string; } - + interface BrowserSyncStatic extends BrowserSyncInstance { /** - * Start the Browsersync service. This will launch a server, proxy or start the snippet mode - * depending on your use-case. - */ + * Start the Browsersync service. This will launch a server, proxy or start the snippet mode + * depending on your use-case. + */ (config?: Options, callback?: (err: Error, bs: Object) => any): BrowserSyncInstance; /** - * Create a Browsersync instance - * @param name an identifier that can used for retrieval later - */ + * Create a Browsersync instance + * @param name an identifier that can used for retrieval later + */ create(name?: string): BrowserSyncInstance; /** - * Get a single instance by name. This is useful if you have your build scripts in separate files - * @param name the identifier used for retrieval - */ + * Get a single instance by name. This is useful if you have your build scripts in separate files + * @param name the identifier used for retrieval + */ get(name: string): BrowserSyncInstance; } - + interface BrowserSyncInstance { /** the name of this instance of browser-sync */ name: string; /** - * Start the Browsersync service. This will launch a server, proxy or start the snippet mode - * depending on your use-case. - */ + * Start the Browsersync service. This will launch a server, proxy or start the snippet mode + * depending on your use-case. + */ init(config?: Options, callback?: (err: Error, bs: Object) => any): BrowserSyncInstance; /** - * Reload the browser - * The reload method will inform all browsers about changed files and will either cause the browser - * to refresh, or inject the files where possible. - */ + * Reload the browser + * The reload method will inform all browsers about changed files and will either cause the browser + * to refresh, or inject the files where possible. + */ reload(): void; /** - * Reload a single file - * The reload method will inform all browsers about changed files and will either cause the browser - * to refresh, or inject the files where possible. - */ + * Reload a single file + * The reload method will inform all browsers about changed files and will either cause the browser + * to refresh, or inject the files where possible. + */ reload(file: string): void; /** - * Reload multiple files - * The reload method will inform all browsers about changed files and will either cause the browser - * to refresh, or inject the files where possible. - */ + * Reload multiple files + * The reload method will inform all browsers about changed files and will either cause the browser + * to refresh, or inject the files where possible. + */ reload(files: string[]): void; /** - * The reload method will inform all browsers about changed files and will either cause the browser - * to refresh, or inject the files where possible. - */ - reload(options: {stream: boolean}): NodeJS.ReadWriteStream; + * The reload method will inform all browsers about changed files and will either cause the browser + * to refresh, or inject the files where possible. + */ + reload(options: { stream: boolean }): NodeJS.ReadWriteStream; /** - * The stream method returns a transform stream and can act once or on many files. - * @param opts Configuration for the stream method - */ - stream(opts: {once: boolean}): NodeJS.ReadWriteStream; + * The stream method returns a transform stream and can act once or on many files. + * @param opts Configuration for the stream method + */ + stream(opts: { once: boolean }): NodeJS.ReadWriteStream; /** - * Helper method for browser notifications - * @param message Can be a simple message such as 'Connected' or HTML - * @param timeout How long the message will remain in the browser. @since 1.3.0 - */ + * Helper method for browser notifications + * @param message Can be a simple message such as 'Connected' or HTML + * @param timeout How long the message will remain in the browser. @since 1.3.0 + */ notify(message: string, timeout?: number): void; /** - * This method will close any running server, stop file watching & exit the current process. - */ + * This method will close any running server, stop file watching & exit the current process. + */ exit(): void; /** - * Stand alone file-watcher. Use this along with Browsersync to create your own, minimal build system - */ + * Stand alone file-watcher. Use this along with Browsersync to create your own, minimal build system + */ watch(patterns: string, opts?: chokidar.WatchOptions, fn?: (event: string, file: fs.Stats) => any) : NodeJS.EventEmitter; /** - * Method to pause file change events - */ + * Method to pause file change events + */ pause(): void; /** - * Method to resume paused watchers - */ + * Method to resume paused watchers + */ resume(): void; /** - * The internal Event Emitter used by the running Browsersync instance (if there is one). You can use - * this to emit your own events, such as changed files, logging etc. - */ + * The internal Event Emitter used by the running Browsersync instance (if there is one). You can use + * this to emit your own events, such as changed files, logging etc. + */ emitter: NodeJS.EventEmitter; /** - * A simple true/false flag that you can use to determine if there's a currently-running Browsersync instance. - */ + * A simple true/false flag that you can use to determine if there's a currently-running Browsersync instance. + */ active: boolean; /** - * A simple true/false flag to determine if the current instance is paused - */ + * A simple true/false flag to determine if the current instance is paused + */ paused: boolean; } }