From 5e9d3fc16acc51e6c1ab0085956801cfdfc3d489 Mon Sep 17 00:00:00 2001 From: Maxime LUCE Date: Thu, 22 Oct 2015 01:23:04 +0200 Subject: [PATCH 1/2] Add typings for connect-livereload --- connect-livereload/connect-livereload.d.ts | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 connect-livereload/connect-livereload.d.ts diff --git a/connect-livereload/connect-livereload.d.ts b/connect-livereload/connect-livereload.d.ts new file mode 100644 index 000000000..98e851fec --- /dev/null +++ b/connect-livereload/connect-livereload.d.ts @@ -0,0 +1,38 @@ +// Type definitions for connect-livereload v0.5.3 +// Project: https://github.com/intesso/connect-livereload +// Definitions by: Maxime LUCE +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module "connect-livereload" { + import { HandleFunction } from "connect"; + + function livereload(): HandleFunction; + function livereload(options: livereload.Options): HandleFunction; + + module livereload { + export type FileMatcher = string | RegExp; + + export interface Rule { + match: RegExp; + fn: (w: string, s: string) => string; + } + + export interface Options { + ignore?: FileMatcher[]; + excludeList?: FileMatcher[]; + + include?: FileMatcher[]; + html?: (val: string) => boolean; + rules?: Rule[]; + disableCompression?: boolean; + + hostname?: string; + port?: number; + src?: string; + } + } + + export = livereload; +} \ No newline at end of file From fae0af402b515798e1fbf5938b248a669c3d6992 Mon Sep 17 00:00:00 2001 From: Maxime LUCE Date: Thu, 22 Oct 2015 01:23:16 +0200 Subject: [PATCH 2/2] Add tests for connect-livereload --- .../connect-livereload-tests.ts | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 connect-livereload/connect-livereload-tests.ts diff --git a/connect-livereload/connect-livereload-tests.ts b/connect-livereload/connect-livereload-tests.ts new file mode 100644 index 000000000..2609871e9 --- /dev/null +++ b/connect-livereload/connect-livereload-tests.ts @@ -0,0 +1,69 @@ +/// + +import * as connect from "connect"; +import * as livereload from "connect-livereload"; + +const app = connect(); + +// With no options +app.use(livereload()); + +// With string options +app.use(livereload({ + port: 35729, + ignore: [".js", ".svg"] +})); + +// With RegExp options +app.use(livereload({ + port: 35729, + ignore: [/\.js(\?.*)?$/, /\.css(\?.*)?$/] +})); + +// With default options +app.use(livereload({ + ignore: [ + /\.js(\?.*)?$/, /\.css(\?.*)?$/, /\.svg(\?.*)?$/, /\.ico(\?.*)?$/, /\.woff(\?.*)?$/, + /\.png(\?.*)?$/, /\.jpg(\?.*)?$/, /\.jpeg(\?.*)?$/, /\.gif(\?.*)?$/, /\.pdf(\?.*)?$/ + ], + + // include all urls by default + include: [/.*/], + + // this function is used to determine if the content of `res.write` or `res.end` is html. + html: function (str) { + if (!str) return false; + return /<[:_-\w\s\!\/\=\"\']+>/i.test(str); + }, + + // rules are provided to find the place where the snippet should be inserted. + // the main problem is that on the server side it can be tricky to determine if a string will be valid html on the client. + // the function `fn` of the first `match` is executed like this `body.replace(rule.match, rule.fn);` + // the function `fn` has got the arguments `fn(w, s)` where `w` is the matches string and `s` is the snippet. + rules: [{ + match: /<\/body>(?![\s\S]*<\/body>)/i, + fn: prepend + }, { + match: /<\/html>(?![\s\S]*<\/html>)/i, + fn: prepend + }, { + match: /<\!DOCTYPE.+?>/i, + fn: append + }], + + // port where the script is loaded + port: 35729, + + // location where the script is provided (not by connect-livereload). Change this e.g. when serving livereload with a proxy. + src: "http://localhost:35729/livereload.js?snipver=1", + + // Set this option to `true` to set `req.headers['accept-encoding']` to 'identity' (disabling compression) + disableCompression: false +})); + +function prepend(w: string, s: string): string { + return s + w; +} +function append(w: string, s: string): string { + return w + s; +} \ No newline at end of file