This commit is contained in:
Chris Dias 2015-09-24 16:40:33 -07:00
Родитель 16a720ced2
Коммит 43a02fd1e2
77 изменённых файлов: 7850 добавлений и 2 удалений

30
.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,30 @@
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
node_modules
# Debug log from npm
npm-debug.log

Просмотреть файл

@ -1,2 +0,0 @@
# vscode-samples
VS Code Samples

30
node-express-javascript/.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,30 @@
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
node_modules
# Debug log from npm
npm-debug.log

51
node-express-javascript/.vscode/launch.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,51 @@
{
"version": "0.1.0",
// List of configurations. Add new configurations or edit existing ones.
// ONLY "node" and "mono" are supported, change "type" to switch.
"configurations": [
{
// Name of configuration; appears in the launch configuration drop down menu.
"name": "Launch ./bin/www",
// Type of configuration. Possible values: "node", "mono".
"type": "node",
// Workspace relative or absolute path to the program.
"program": "./bin/www",
// Automatically stop program after launch.
"stopOnEntry": false,
// Command line arguments passed to the program.
"args": [],
// Workspace relative or absolute path to the working directory of the program being debugged. Default is the current workspace.
"cwd": ".",
// Workspace relative or absolute path to the runtime executable to be used. Default is the runtime executable on the PATH.
"runtimeExecutable": null,
// Optional arguments passed to the runtime executable.
"runtimeArgs": [],
// Environment variables passed to the program.
"env": { },
// Use JavaScript source maps (if they exist).
"sourceMaps": false,
// If JavaScript source maps are enabled, the generated code is expected in this directory.
"outDir": null
},
{
"name": "Debug Tests",
"type": "node",
// Notice, we bypass the launcher and start the test runner directly
"program": "node_modules/mocha/bin/_mocha",
"stopOnEntry": true,
// run the tests in the tests folder
"args": ["tests"],
"cwd": ".",
"runtimeExecutable": null,
"env": { }
},
{
"name": "Attach to running instance",
"type": "node",
// VS Code only supports 'localhost' at this time
"address": "localhost",
// Port to attach to, must match port in gulpfile.js
"port": 5858
}
]
}

9
node-express-javascript/.vscode/settings.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,9 @@
// Place your settings in this file to overwrite default and user settings.
{
// Configure glob patterns for excluding files and folders.
"files.exclude": {
"**/.git": true,
"**/.DS_Store": true
}
}

21
node-express-javascript/.vscode/tasks.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,21 @@
{
"version": "0.1.0",
"command": "gulp",
"isShellCommand": true,
"args": [
"--no-color"
],
"tasks": [
{
"taskName": "test",
"args": [],
"isTestCommand": true
},
{
"taskName": "less",
"isBuildCommand": true,
"problemMatcher": "$lessCompile"
}
]
}

Просмотреть файл

@ -0,0 +1,14 @@
# README
## This the readme for your application "node-express-javascript"
-------------------
### Visual Studio Code has *awesome* Markdown support!
* Split the editor (`Cmd+\` on OSX or `Ctrl+\` on Windows and Linux)
* Toggle preview (`Shift+CMD+V` on OSX or `Shift+Ctrl+V` on Windows and Linux)
* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (OSX) to see a list of Markdown snippets
### For more information
* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
* [Markdown Syntax Reference](http://daringfireball.net)
** Enjoy!**

Просмотреть файл

@ -0,0 +1,61 @@
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
return null;
});
module.exports = app;

Просмотреть файл

@ -0,0 +1,90 @@
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('node-express-javascript:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
console.log('Listening on ' + bind);
}

Просмотреть файл

@ -0,0 +1,73 @@
var gulp = require('gulp');
var less = require('gulp-less');
var path = require('path');
var mocha = require('gulp-mocha');
var browserSync = require('browser-sync');
var nodemon = require('gulp-nodemon');
/**
* watch for any LESS file changes
* if a file change is detected, run the LESS compile gulp task
*/
gulp.task('watch', function() {
gulp.watch('styles/**/*.less', ['less']);
});
/**
* compile less files from the ./styles folder
* into css files to the ./public/stylesheets folder
*/
gulp.task('less', function () {
return gulp.src('./styles/**/*.less')
.pipe(less({
paths: [path.join(__dirname, 'less', 'includes')]
}))
.pipe(gulp.dest('./public/stylesheets'));
});
/**
* run mocha tests in the ./tests folder
*/
gulp.task('test', function () {
return gulp.src('./tests/test*.js', { read: false })
// gulp-mocha needs filepaths so you can't have any plugins before it
.pipe(mocha());
});
/**
* run browser-sync on for client changes
*/
gulp.task('browser-sync', ['nodemon', 'watch'], function () {
browserSync.init(null, {
proxy: "http://localhost:3000",
files: ["public/**/*.*", "views/**/*.*"],
browser: "google chrome",
port: 7000,
});
});
/**
* run nodemon on server file changes
*/
gulp.task('nodemon', function (cb) {
var started = false;
return nodemon({
script: 'bin/www',
watch: ['bin/www', '*.js']
}).on('start', function () {
if (!started) {
cb();
started = true;
}
}).on('restart', function onRestart() {
setTimeout(function reload() {
browserSync.reload({
stream: false
});
}, 500); // browserSync reload delay
});
});
gulp.task('default', ['browser-sync']);

Просмотреть файл

@ -0,0 +1,6 @@
{
"compilerOptions": {
"target": "ES5",
"module": "commonjs"
}
}

Просмотреть файл

@ -0,0 +1,30 @@
{
"name": "node-express-javascript",
"description": "node-express-javascript Sample Application (JavaScript)",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www",
"test": "mocha ./tests/test.js"
},
"dependencies": {
"body-parser": "~1.12.0",
"cookie-parser": "~1.3.4",
"debug": "~2.1.1",
"express": "~4.12.2",
"jade": "~1.9.2",
"less-middleware": "1.0.x",
"morgan": "~1.5.1",
"serve-favicon": "~2.2.0"
},
"devDependencies": {
"browser-sync": "^2.8.2",
"gulp": "^3.9.0",
"gulp-less": "^3.0.3",
"gulp-mocha": "^2.1.2",
"gulp-nodemon": "^2.0.3",
"marked": "^0.3.5",
"mocha": "^2.2.5",
"nodemon": "^1.4.0"
}
}

Просмотреть файл

@ -0,0 +1,10 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}
a {
color: #00b7ff;
}
.blocktext {
font-family: Courier New, Courier, monospace;
}

Просмотреть файл

@ -0,0 +1,14 @@
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Visual Studio Code!' });
});
/* GET Quick Start. */
router.get('/quickstart', function(req, res, next) {
res.render('quickstart');
});
module.exports = router;

Просмотреть файл

@ -0,0 +1,9 @@
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;

Просмотреть файл

@ -0,0 +1,14 @@
@linkcolor: #00B7FF;
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}
a {
color: @linkcolor
}
.blocktext {
font-family: Courier New, Courier, monospace;
}

Просмотреть файл

@ -0,0 +1,10 @@
var assert = require("assert");
describe('Array', function(){
describe('#indexOf()', function(){
it('should return -1 when the value is not present', function(){
assert.equal(-1, [1,2,3].indexOf(5));
assert.equal(-1, [1,2,3].indexOf(0));
});
});
});

Просмотреть файл

@ -0,0 +1,36 @@
{
"version": "v4",
"repo": "borisyankov/DefinitelyTyped",
"ref": "master",
"path": "typings",
"bundle": "typings/tsd.d.ts",
"installed": {
"express/express.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"node/node.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"serve-favicon/serve-favicon.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"morgan/morgan.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"cookie-parser/cookie-parser.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"body-parser/body-parser.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"debug/debug.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"mocha/mocha.d.ts": {
"commit": "983126e131a2b81739053d60e4bbdbb46d6577b7"
},
"gulp/gulp.d.ts": {
"commit": "3d2916191781fe400176a030c03722ac4b87f1c1"
}
}
}

138
node-express-javascript/typings/body-parser/body-parser.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,138 @@
// Type definitions for body-parser
// Project: http://expressjs.com
// Definitions by: Santi Albo <https://github.com/santialbo/>, VILIC VANE <https://vilic.info>, Jonathan Häberle <https://github.com/dreampulse/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../express/express.d.ts" />
declare module "body-parser" {
import express = require('express');
/**
* bodyParser: use individual json/urlencoded middlewares
* @deprecated
*/
function bodyParser(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
/**
* only parse objects and arrays. (default: true)
*/
strict?: boolean;
/**
* passed to JSON.parse().
*/
receiver?: (key: string, value: any) => any;
/**
* parse extended syntax with the qs module. (default: true)
*/
extended?: boolean;
}): express.RequestHandler;
module bodyParser {
export function json(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* request content-type to parse, passed directly to the type-is library. (default: 'json')
*/
type?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
/**
* only parse objects and arrays. (default: true)
*/
strict?: boolean;
/**
* passed to JSON.parse().
*/
receiver?: (key: string, value: any) => any;
}): express.RequestHandler;
export function raw(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* request content-type to parse, passed directly to the type-is library. (default: 'application/octet-stream')
*/
type?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
}): express.RequestHandler;
export function text(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* request content-type to parse, passed directly to the type-is library. (default: 'text/plain')
*/
type?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
/**
* the default charset to parse as, if not specified in content-type. (default: 'utf-8')
*/
defaultCharset?: string;
}): express.RequestHandler;
export function urlencoded(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* request content-type to parse, passed directly to the type-is library. (default: 'urlencoded')
*/
type?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
/**
* parse extended syntax with the qs module. (default: true)
*/
extended?: boolean;
}): express.RequestHandler;
}
export = bodyParser;
}

Просмотреть файл

@ -0,0 +1,12 @@
// Type definitions for cookie-parser
// Project: https://github.com/expressjs/cookie-parser
// Definitions by: Santi Albo <https://github.com/santialbo/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../express/express.d.ts" />
declare module "cookie-parser" {
import express = require('express');
function e(secret?: string, options?: any): express.RequestHandler;
export = e;
}

30
node-express-javascript/typings/debug/debug.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,30 @@
// Type definitions for debug
// Project: https://github.com/visionmedia/debug
// Definitions by: Seon-Wook Park <https://github.com/swook>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare module "debug" {
function d(namespace: string): d.Debugger;
module d {
export var log: Function;
function enable(namespaces: string): void;
function disable(): void;
function enabled(namespace: string): boolean;
export interface Debugger {
(formatter: any, ...args: any[]): void;
enabled: boolean;
log: Function;
namespace: string;
}
}
export = d;
}

1093
node-express-javascript/typings/express/express.d.ts поставляемый Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

264
node-express-javascript/typings/gulp/gulp.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,264 @@
// Type definitions for Gulp v3.8.x
// Project: http://gulpjs.com
// Definitions by: Drew Noakes <https://drewnoakes.com>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../node/node.d.ts" />
declare module gulp {
/**
* Options to pass to node-glob through glob-stream.
* Specifies two options in addition to those used by node-glob:
* https://github.com/isaacs/node-glob#options
*/
interface ISrcOptions {
/**
* Setting this to <code>false</code> will return <code>file.contents</code> as <code>null</code>
* and not read the file at all.
* Default: <code>true</code>.
*/
read?: boolean;
/**
* Setting this to false will return <code>file.contents</code> as a stream and not buffer files.
* This is useful when working with large files.
* Note: Plugins might not implement support for streams.
* Default: <code>true</code>.
*/
buffer?: boolean;
/**
* The current working directory in which to search.
* Defaults to process.cwd().
*/
cwd?: string;
/**
* The place where patterns starting with / will be mounted onto.
* Defaults to path.resolve(options.cwd, "/") (/ on Unix systems, and C:\ or some such on Windows.)
*/
root?: string;
/**
* Include .dot files in normal matches and globstar matches.
* Note that an explicit dot in a portion of the pattern will always match dot files.
*/
dot?: boolean;
/**
* By default, a pattern starting with a forward-slash will be "mounted" onto the root setting, so that a valid
* filesystem path is returned. Set this flag to disable that behavior.
*/
nomount?: boolean;
/**
* Add a / character to directory matches. Note that this requires additional stat calls.
*/
mark?: boolean;
/**
* Don't sort the results.
*/
nosort?: boolean;
/**
* Set to true to stat all results. This reduces performance somewhat, and is completely unnecessary, unless
* readdir is presumed to be an untrustworthy indicator of file existence. It will cause ELOOP to be triggered one
* level sooner in the case of cyclical symbolic links.
*/
stat?: boolean;
/**
* When an unusual error is encountered when attempting to read a directory, a warning will be printed to stderr.
* Set the silent option to true to suppress these warnings.
*/
silent?: boolean;
/**
* When an unusual error is encountered when attempting to read a directory, the process will just continue on in
* search of other matches. Set the strict option to raise an error in these cases.
*/
strict?: boolean;
/**
* See cache property above. Pass in a previously generated cache object to save some fs calls.
*/
cache?: boolean;
/**
* A cache of results of filesystem information, to prevent unnecessary stat calls.
* While it should not normally be necessary to set this, you may pass the statCache from one glob() call to the
* options object of another, if you know that the filesystem will not change between calls.
*/
statCache?: boolean;
/**
* Perform a synchronous glob search.
*/
sync?: boolean;
/**
* In some cases, brace-expanded patterns can result in the same file showing up multiple times in the result set.
* By default, this implementation prevents duplicates in the result set. Set this flag to disable that behavior.
*/
nounique?: boolean;
/**
* Set to never return an empty set, instead returning a set containing the pattern itself.
* This is the default in glob(3).
*/
nonull?: boolean;
/**
* Perform a case-insensitive match. Note that case-insensitive filesystems will sometimes result in glob returning
* results that are case-insensitively matched anyway, since readdir and stat will not raise an error.
*/
nocase?: boolean;
/**
* Set to enable debug logging in minimatch and glob.
*/
debug?: boolean;
/**
* Set to enable debug logging in glob, but not minimatch.
*/
globDebug?: boolean;
}
interface IDestOptions {
/**
* The output folder. Only has an effect if provided output folder is relative.
* Default: process.cwd()
*/
cwd?: string;
/**
* Octal permission string specifying mode for any folders that need to be created for output folder.
* Default: 0777.
*/
mode?: string;
}
/**
* Options that are passed to <code>gaze</code>.
* https://github.com/shama/gaze
*/
interface IWatchOptions {
/** Interval to pass to fs.watchFile. */
interval?: number;
/** Delay for events called in succession for the same file/event. */
debounceDelay?: number;
/** Force the watch mode. Either 'auto' (default), 'watch' (force native events), or 'poll' (force stat polling). */
mode?: string;
/** The current working directory to base file patterns from. Default is process.cwd().. */
cwd?: string;
}
interface IWatchEvent {
/** The type of change that occurred, either added, changed or deleted. */
type: string;
/** The path to the file that triggered the event. */
path: string;
}
/**
* Callback to be called on each watched file change.
*/
interface IWatchCallback {
(event:IWatchEvent): void;
}
interface ITaskCallback {
/**
* Defines a task.
* Tasks may be made asynchronous if they are passing a callback or return a promise or a stream.
* @param cb callback used to signal asynchronous completion. Caller includes <code>err</code> in case of error.
*/
(cb?:(err?:any)=>void): any;
}
interface EventEmitter {
any: any;
}
interface Gulp {
/**
* Define a task.
*
* @param name the name of the task. Tasks that you want to run from the command line should not have spaces in them.
* @param fn the function that performs the task's operations. Generally this takes the form of gulp.src().pipe(someplugin()).
*/
task(name:string, fn:ITaskCallback): any;
/**
* Define a task.
*
* @param name the name of the task. Tasks that you want to run from the command line should not have spaces in them.
* @param dep an array of tasks to be executed and completed before your task will run.
* @param fn the function that performs the task's operations. Generally this takes the form of gulp.src().pipe(someplugin()).
*/
task(name:string, dep:string[], fn?:ITaskCallback): any;
/**
* Takes a glob and represents a file structure. Can be piped to plugins.
* @param glob a glob string, using node-glob syntax
* @param opt an optional option object
*/
src(glob:string, opt?:ISrcOptions): NodeJS.ReadWriteStream;
/**
* Takes a glob and represents a file structure. Can be piped to plugins.
* @param glob an array of glob strings, using node-glob syntax
* @param opt an optional option object
*/
src(glob:string[], opt?:ISrcOptions): NodeJS.ReadWriteStream;
/**
* Can be piped to and it will write files. Re-emits all data passed to it so you can pipe to multiple folders.
* Folders that don't exist will be created.
*
* @param outFolder the path (output folder) to write files to.
* @param opt
*/
dest(outFolder:string, opt?:IDestOptions): NodeJS.ReadWriteStream;
/**
* Can be piped to and it will write files. Re-emits all data passed to it so you can pipe to multiple folders.
* Folders that don't exist will be created.
*
* @param outFolder a function that converts a vinyl File instance into an output path
* @param opt
*/
dest(outFolder:(file:string)=>string, opt?:IDestOptions): NodeJS.ReadWriteStream;
/**
* Watch files and do something when a file changes. This always returns an EventEmitter that emits change events.
*
* @param glob a single glob or array of globs that indicate which files to watch for changes.
* @param opt options, that are passed to the gaze library.
* @param fn a callback or array of callbacks to be called on each change, or names of task(s) to run when a file changes, added with gulp.task().
*/
watch(glob:string, fn:(IWatchCallback|string)): EventEmitter;
watch(glob:string, fn:(IWatchCallback|string)[]): EventEmitter;
watch(glob:string, opt:IWatchOptions, fn:(IWatchCallback|string)): EventEmitter;
watch(glob:string, opt:IWatchOptions, fn:(IWatchCallback|string)[]): EventEmitter;
watch(glob:string[], fn:(IWatchCallback|string)): EventEmitter;
watch(glob:string[], fn:(IWatchCallback|string)[]): EventEmitter;
watch(glob:string[], opt:IWatchOptions, fn:(IWatchCallback|string)): EventEmitter;
watch(glob:string[], opt:IWatchOptions, fn:(IWatchCallback|string)[]): EventEmitter;
}
}
declare module "gulp" {
var _tmp:gulp.Gulp;
export = _tmp;
}
interface IGulpPlugin {
(...args: any[]): NodeJS.ReadWriteStream;
}

214
node-express-javascript/typings/mocha/mocha.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,214 @@
// Type definitions for mocha 2.2.5
// Project: http://mochajs.org/
// Definitions by: Kazi Manzur Rashid <https://github.com/kazimanzurrashid/>, otiai10 <https://github.com/otiai10>, jt000 <https://github.com/jt000>, Vadim Macagon <https://github.com/enlight>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
interface MochaSetupOptions {
//milliseconds to wait before considering a test slow
slow?: number;
// timeout in milliseconds
timeout?: number;
// ui name "bdd", "tdd", "exports" etc
ui?: string;
//array of accepted globals
globals?: any[];
// reporter instance (function or string), defaults to `mocha.reporters.Spec`
reporter?: any;
// bail on the first test failure
bail?: boolean;
// ignore global leaks
ignoreLeaks?: boolean;
// grep string or regexp to filter tests with
grep?: any;
}
interface MochaDone {
(error?: Error): void;
}
declare var mocha: Mocha;
declare var describe: Mocha.IContextDefinition;
declare var xdescribe: Mocha.IContextDefinition;
// alias for `describe`
declare var context: Mocha.IContextDefinition;
// alias for `describe`
declare var suite: Mocha.IContextDefinition;
declare var it: Mocha.ITestDefinition;
declare var xit: Mocha.ITestDefinition;
// alias for `it`
declare var test: Mocha.ITestDefinition;
declare function before(action: () => void): void;
declare function before(action: (done: MochaDone) => void): void;
declare function setup(action: () => void): void;
declare function setup(action: (done: MochaDone) => void): void;
declare function after(action: () => void): void;
declare function after(action: (done: MochaDone) => void): void;
declare function teardown(action: () => void): void;
declare function teardown(action: (done: MochaDone) => void): void;
declare function beforeEach(action: () => void): void;
declare function beforeEach(action: (done: MochaDone) => void): void;
declare function suiteSetup(action: () => void): void;
declare function suiteSetup(action: (done: MochaDone) => void): void;
declare function afterEach(action: () => void): void;
declare function afterEach(action: (done: MochaDone) => void): void;
declare function suiteTeardown(action: () => void): void;
declare function suiteTeardown(action: (done: MochaDone) => void): void;
declare class Mocha {
constructor(options?: {
grep?: RegExp;
ui?: string;
reporter?: string;
timeout?: number;
bail?: boolean;
});
/** Setup mocha with the given options. */
setup(options: MochaSetupOptions): Mocha;
bail(value?: boolean): Mocha;
addFile(file: string): Mocha;
/** Sets reporter by name, defaults to "spec". */
reporter(name: string): Mocha;
/** Sets reporter constructor, defaults to mocha.reporters.Spec. */
reporter(reporter: (runner: Mocha.IRunner, options: any) => any): Mocha;
ui(value: string): Mocha;
grep(value: string): Mocha;
grep(value: RegExp): Mocha;
invert(): Mocha;
ignoreLeaks(value: boolean): Mocha;
checkLeaks(): Mocha;
/** Enables growl support. */
growl(): Mocha;
globals(value: string): Mocha;
globals(values: string[]): Mocha;
useColors(value: boolean): Mocha;
useInlineDiffs(value: boolean): Mocha;
timeout(value: number): Mocha;
slow(value: number): Mocha;
enableTimeouts(value: boolean): Mocha;
asyncOnly(value: boolean): Mocha;
noHighlighting(value: boolean): Mocha;
/** Runs tests and invokes `onComplete()` when finished. */
run(onComplete?: (failures: number) => void): Mocha.IRunner;
}
// merge the Mocha class declaration with a module
declare module Mocha {
/** Partial interface for Mocha's `Runnable` class. */
interface IRunnable {
title: string;
fn: Function;
async: boolean;
sync: boolean;
timedOut: boolean;
}
/** Partial interface for Mocha's `Suite` class. */
interface ISuite {
parent: ISuite;
title: string;
fullTitle(): string;
}
/** Partial interface for Mocha's `Test` class. */
interface ITest extends IRunnable {
parent: ISuite;
pending: boolean;
fullTitle(): string;
}
/** Partial interface for Mocha's `Runner` class. */
interface IRunner {}
interface IContextDefinition {
(description: string, spec: () => void): ISuite;
only(description: string, spec: () => void): ISuite;
skip(description: string, spec: () => void): void;
timeout(ms: number): void;
}
interface ITestDefinition {
(expectation: string, assertion?: () => void): ITest;
(expectation: string, assertion?: (done: MochaDone) => void): ITest;
only(expectation: string, assertion?: () => void): ITest;
only(expectation: string, assertion?: (done: MochaDone) => void): ITest;
skip(expectation: string, assertion?: () => void): void;
skip(expectation: string, assertion?: (done: MochaDone) => void): void;
timeout(ms: number): void;
}
export module reporters {
export class Base {
stats: {
suites: number;
tests: number;
passes: number;
pending: number;
failures: number;
};
constructor(runner: IRunner);
}
export class Doc extends Base {}
export class Dot extends Base {}
export class HTML extends Base {}
export class HTMLCov extends Base {}
export class JSON extends Base {}
export class JSONCov extends Base {}
export class JSONStream extends Base {}
export class Landing extends Base {}
export class List extends Base {}
export class Markdown extends Base {}
export class Min extends Base {}
export class Nyan extends Base {}
export class Progress extends Base {
/**
* @param options.open String used to indicate the start of the progress bar.
* @param options.complete String used to indicate a complete test on the progress bar.
* @param options.incomplete String used to indicate an incomplete test on the progress bar.
* @param options.close String used to indicate the end of the progress bar.
*/
constructor(runner: IRunner, options?: {
open?: string;
complete?: string;
incomplete?: string;
close?: string;
});
}
export class Spec extends Base {}
export class TAP extends Base {}
export class XUnit extends Base {
constructor(runner: IRunner, options?: any);
}
}
}
declare module "mocha" {
export = Mocha;
}

93
node-express-javascript/typings/morgan/morgan.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,93 @@
// Type definitions for morgan 1.2.2
// Project: https://github.com/expressjs/morgan
// Definitions by: James Roland Cabresos <https://github.com/staticfunction>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../express/express.d.ts" />
declare module "morgan" {
import express = require('express');
module morgan {
export function token<T>(name: string, callback: (req: express.Request, res: express.Response) => T): express.RequestHandler;
/***
* Morgan accepts these properties in the options object.
*/
export interface Options {
/***
* Buffer duration before writing logs to the stream, defaults to false. When set to true, defaults to 1000 ms.
*/
buffer?: boolean;
/***
* Write log line on request instead of response. This means that a requests will be logged even if the server crashes, but data from the response cannot be logged (like the response code).
*/
immediate?: boolean;
/***
* Function to determine if logging is skipped, defaults to false. This function will be called as skip(req, res).
*/
skip?: (req: express.Request, res: express.Response) => boolean;
/***
* Output stream for writing log lines, defaults to process.stdout.
* @param str
*/
stream?: (str: string) => void;
}
}
/***
* Create a new morgan logger middleware function using the given format and options. The format argument may be a string of a predefined name (see below for the names), a string of a format string, or a function that will produce a log entry.
* @param format
* @param options
*/
function morgan(format: string, options?: morgan.Options): express.RequestHandler;
/***
* Standard Apache combined log output.
* :remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
* @param format
* @param options
*/
function morgan(format: 'combined', options?: morgan.Options): express.RequestHandler;
/***
* Standard Apache common log output.
* :remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length]
* @param format
* @param options
*/
function morgan(format: 'common', options?: morgan.Options): express.RequestHandler;
/***
* Concise output colored by response status for development use. The :status token will be colored red for server error codes, yellow for client error codes, cyan for redirection codes, and uncolored for all other codes.
* :method :url :status :response-time ms - :res[content-length]
* @param format
* @param options
*/
function morgan(format: 'dev', options?: morgan.Options): express.RequestHandler;
/***
* Shorter than default, also including response time.
* :remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] - :response-time ms
* @param format
* @param options
*/
function morgan(format: 'short', options?: morgan.Options): express.RequestHandler;
/***
* The minimal output.
* :method :url :status :res[content-length] - :response-time ms
* @param format
* @param options
*/
function morgan(format: 'tiny', options?: morgan.Options): express.RequestHandler;
function morgan(custom: (req: express.Request, res: express.Response) => string): express.RequestHandler
export = morgan;
}

1409
node-express-javascript/typings/node/node.d.ts поставляемый Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,29 @@
// Type definitions for serve-favicon 2.1.6
// Project: https://github.com/expressjs/serve-favicon
// Definitions by: Uros Smolnik <https://github.com/urossmolnik/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/* =================== USAGE ===================
import serveFavicon = require('serve-favicon');
app.use(serveFavicon(__dirname + '/public/favicon.ico'));
=============================================== */
/// <reference path="../express/express.d.ts" />
declare module "serve-favicon" {
import express = require('express');
/**
* Node.js middleware for serving a favicon.
*/
function serveFavicon(path: string, options?: {
/**
* The cache-control max-age directive in ms, defaulting to 1 day. This can also be a string accepted by the ms module.
*/
maxAge?: number;
}): express.RequestHandler;
export = serveFavicon;
}

9
node-express-javascript/typings/tsd.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,9 @@
/// <reference path="body-parser/body-parser.d.ts" />
/// <reference path="cookie-parser/cookie-parser.d.ts" />
/// <reference path="debug/debug.d.ts" />
/// <reference path="express/express.d.ts" />
/// <reference path="morgan/morgan.d.ts" />
/// <reference path="node/node.d.ts" />
/// <reference path="serve-favicon/serve-favicon.d.ts" />
/// <reference path="mocha/mocha.d.ts" />
/// <reference path="gulp/gulp.d.ts" />

Просмотреть файл

@ -0,0 +1,6 @@
extends layout
block content
h1= message
h2= error.status
pre #{error.stack}

Просмотреть файл

@ -0,0 +1,9 @@
extends layout
block content
h1 Visual Studio Code - Starter Express Application (JavaScript)
p Welcome to #{title}
| For more information, please see the
a(href='/quickstart') Quick Start
|.

Просмотреть файл

@ -0,0 +1,7 @@
doctype html
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
body
block content

Просмотреть файл

@ -0,0 +1,4 @@
extends layout
block content
include:md ../vscodequickstart.md

Просмотреть файл

@ -0,0 +1,21 @@
<!--
Press Ctrl+Shift+V (Windows, Linux) or Cmd+Shift+V (OSX) to preview this document!
-->
# Getting Started with Node, Express and Visual Studio Code
This is an [express-generator](http://expressjs.com/starter/generator.html) generated sample customized for development using [Visual Studio Code](http://code.visualstudio.com).
This example illustrates:
- **Great IntelliSense**: [TypeScript definition files](https://github.com/borisyankov/DefinitelyTyped) provide IntelliSense for Node, Express, Mocha, and Gulp. Use [tsd](http://definitelytyped.org/tsd/) to install additional typings.
- **Iterative Development**: Use [BrowserSync](http://www.browsersync.io/) and [NodeMon](http://nodemon.io/) to automatically recycle your client and server while developing in Visual Studio Code. Run `gulp browser-sync` from the Terminal.
- **Test**: [Mocha](http://mochajs.org/) is a popular test framework for Node applications. Press `Ctrl+Shift+T` (Windows, Linux) or `Cmd+Shift+T` (OS X) to run the tests.
- **StyleSheets**: [LESS](http://lesscss.org/) is a CSS pre-processor that extends CSS to allow for typical programming construcs such as variables, mixins, and functions. To compile your .less file to .css press `Ctrl+Shift+B` (Windows, Linux) or `Cmd+Shift+B` (OS X).
- **Debugging**: [Launch Configurations](https://code.visualstudio.com/Docs/debugging) are used for running your application under the debugger as well as launching the Mocha tests under the debugger. Open the Debug viewlet, select `Launch ./bin/www` and press `F5` to run the application.
- **Integration with existing tools**: [Task Configurations](https://code.visualstudio.com/Docs/tasks) allow for control over how individual [Gulp](http://gulpjs.com/) tasks are launched. Run individual tasks from the Command Palette by pressing `Ctrl+P` (Windows, Linux) or `Cmd+P` (OS X), type in `task` and then press `space` to see all of the tasks in the provided `gulpfile.js`.
For more information, please visit us at [code.visualstudio.com](http://code.visualstudio.com), read the [documentation](http://code.visualstudio.com/docs) and follow us on twitter [@code](https://twitter.com/code).

30
node-express-typescript/.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,30 @@
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
node_modules
# Debug log from npm
npm-debug.log

53
node-express-typescript/.vscode/launch.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,53 @@
{
"version": "0.1.0",
// List of configurations. Add new configurations or edit existing ones.
// ONLY "node" and "mono" are supported, change "type" to switch.
"configurations": [
{
// Name of configuration; appears in the launch configuration drop down menu.
"name": "Launch ./src/www.js",
// Type of configuration. Possible values: "node", "mono".
"type": "node",
// Workspace relative or absolute path to the program.
"program": "./src/www.js",
// Automatically stop program after launch.
"stopOnEntry": false,
// Command line arguments passed to the program.
"args": [],
// Workspace relative or absolute path to the working directory of the program being debugged. Default is the current workspace.
"cwd": ".",
// Workspace relative or absolute path to the runtime executable to be used. Default is the runtime executable on the PATH.
"runtimeExecutable": null,
// Optional arguments passed to the runtime executable.
"runtimeArgs": [],
// Environment variables passed to the program.
"env": { },
// Use JavaScript source maps (if they exist).
"sourceMaps": true,
// If JavaScript source maps are enabled, the generated code is expected in this directory.
"outDir": "./src"
},
{
"name": "Debug Tests",
"type": "node",
// Notice, we bypass the launcher and start the test runner directly
"program": "node_modules/mocha/bin/_mocha",
"stopOnEntry": false,
// run the tests in the tests folder
"args": ["tests"],
"cwd": ".",
"runtimeExecutable": null,
"env": { },
"sourceMaps": true,
"outDir": "./tests"
},
{
"name": "Attach to running instance",
"type": "node",
// VS Code only supports 'localhost' at this time
"address": "localhost",
// Port to attach to, must match port in gulpfile.js
"port": 5858
}
]
}

11
node-express-typescript/.vscode/settings.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,11 @@
// Place your settings in this file to overwrite default and user settings.
{
// Configure glob patterns for excluding files and folders.
"files.exclude": {
"**/.git": true,
"**/.DS_Store": true,
"**/*.js.map": true,
"**/*.js": {"when": "$(basename).ts"}
}
}

37
node-express-typescript/.vscode/tasks.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,37 @@
{
"version": "0.1.0",
"command": "gulp",
"isShellCommand": true,
"args": [
"--no-color"
],
"tasks": [
{
"taskName": "build",
"isBuildCommand": true,
"problemMatcher": "$tsc"
},
{
"taskName": "less",
"problemMatcher": "$lessCompile"
},
{
"taskName": "test",
"args": [],
"isTestCommand": true
},
{
"taskName": "buildTests",
"problemMatcher": "$tsc"
},
{
"taskName": "buildAll",
"problemMatcher": ["$tsc", "$lessCompile"]
},
{
"taskName": "watch",
"problemMatcher": ["$tsc", "$lessCompile"]
}
]
}

Просмотреть файл

@ -0,0 +1,14 @@
# README
## This the readme for your application "node-express-typescript"
-------------------
### Visual Studio Code has *awesome* Markdown support!
* Split the editor (`Cmd+\` on OSX or `Ctrl+\` on Windows and Linux)
* Toggle preview (`Shift+CMD+V` on OSX or `Shift+Ctrl+V` on Windows and Linux)
* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (OSX) to see a list of Markdown snippets
### For more information
* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
* [Markdown Syntax Reference](http://daringfireball.net)
** Enjoy!**

Просмотреть файл

@ -0,0 +1,88 @@
var gulp = require('gulp');
var less = require('gulp-less');
var path = require('path');
var mocha = require('gulp-mocha');
var browserSync = require('browser-sync');
var nodemon = require('gulp-nodemon');
var cp = require('child_process');
var tsb = require('gulp-tsb');
// compile less files from the ./styles folder
// into css files to the ./public/stylesheets folder
gulp.task('less', function () {
return gulp.src('./src/styles/**/*.less')
.pipe(less({
paths: [path.join(__dirname, 'less', 'includes')]
}))
.pipe(gulp.dest('./src/public/stylesheets'));
});
// run mocha tests in the ./tests folder
gulp.task('test', function () {
return gulp.src('./tests/test*.js', { read: false })
// gulp-mocha needs filepaths so you can't have any plugins before it
.pipe(mocha());
});
// run browser-sync on for client changes
gulp.task('browser-sync', ['nodemon', 'watch'], function () {
browserSync.init(null, {
proxy: "http://localhost:3000",
files: ["src/public/**/*.*", "src/views/**/*.*"],
browser: "google chrome",
port: 7000,
});
});
// run nodemon on server file changes
gulp.task('nodemon', function (cb) {
var started = false;
return nodemon({
script: 'src/www.js',
watch: ['src/*.js']
}).on('start', function () {
if (!started) {
cb();
started = true;
}
}).on('restart', function onRestart() {
setTimeout(function reload() {
browserSync.reload({
stream: false
});
}, 500); // browserSync reload delay
});
});
// TypeScript build for /src folder, pipes in .d.ts files from typings folder
var tsConfigSrc = tsb.create('src/tsconfig.json');
gulp.task('build', function () {
return gulp.src(['typings/**/*.ts', 'src/**/*.ts'])
.pipe(tsConfigSrc())
.pipe(gulp.dest('src'));
});
// TypeScript build for /tests folder, pipes in .d.ts files from typings folder
// as well as the src/tsd.d.ts which is referenced by tests/tsd.d.ts
var tsConfigTests = tsb.create('tests/tsconfig.json');
gulp.task('buildTests', function () {
// pipe in all necessary files
return gulp.src(['typings/**/*.ts', 'tests/**/*.ts', 'src/tsd.d.ts'])
.pipe(tsConfigTests())
.pipe(gulp.dest('tests'));
});
// watch for any TypeScript or LESS file changes
// if a file change is detected, run the TypeScript or LESS compile gulp tasks
gulp.task('watch', function () {
gulp.watch('src/**/*.ts', ['build']);
gulp.watch('tests/**/*.ts', ['buildTests']);
gulp.watch('src/styles/**/*.less', ['less']);
});
gulp.task('buildAll', ['build', 'buildTests', 'less']);
gulp.task('default', ['browser-sync']);

Просмотреть файл

@ -0,0 +1,31 @@
{
"name": "node-express-typescript",
"description": "node-express-typescript Sample Application (TypeScript)",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./src/www.js",
"test": "mocha ./tests/test.js"
},
"dependencies": {
"body-parser": "~1.12.0",
"cookie-parser": "~1.3.4",
"debug": "~2.1.1",
"express": "~4.12.2",
"jade": "~1.9.2",
"less-middleware": "1.0.x",
"morgan": "~1.5.1",
"serve-favicon": "~2.2.0"
},
"devDependencies": {
"browser-sync": "^2.8.2",
"gulp": "^3.9.0",
"gulp-less": "^3.0.3",
"gulp-mocha": "^2.1.2",
"gulp-nodemon": "^2.0.3",
"gulp-tsb": "^1.4.4",
"marked": "^0.3.5",
"mocha": "^2.2.5",
"nodemon": "^1.4.0"
}
}

Двоичные данные
node-express-typescript/src/.DS_Store поставляемый Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,51 @@
var express = require('express');
var logger = require('morgan');
var bodyParser = require('body-parser');
var path_1 = require('path');
var index_1 = require('./routes/index');
var users_1 = require('./routes/users');
var cookieParser = require('cookie-parser'); // this module doesn't use the ES6 default export yet
var app = express();
// view engine setup
app.set('views', path_1.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path_1.join(__dirname, 'public')));
app.use('/', index_1.default);
app.use('/users', users_1.default);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
var err = new Error('Not Found');
err['status'] = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function (error, req, res, next) {
res.status(error['status'] || 500);
res.render('error', {
message: error.message,
error: error
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function (error, req, res, next) {
res.status(error['status'] || 500);
res.render('error', {
message: error.message,
error: {}
});
return null;
});
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = app;
//# sourceMappingURL=app.js.map

Просмотреть файл

@ -0,0 +1 @@
{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"AAAA,IAAY,OAAO,WAAM,SAAS,CAAC,CAAA;AACnC,IAAY,MAAM,WAAM,QAAQ,CAAC,CAAA;AACjC,IAAY,UAAU,WAAM,aAAa,CAAC,CAAA;AAC1C,qBAAmB,MAAM,CAAC,CAAA;AAC1B,sBAAkB,gBAAgB,CAAC,CAAA;AACnC,sBAAkB,gBAAgB,CAAC,CAAA;AACnC,IAAO,YAAY,WAAW,eAAe,CAAC,CAAC,CAAC,qDAAqD;AAErG,IAAM,GAAG,GAAoB,OAAO,EAAE,CAAC;AAEvC,oBAAoB;AACpB,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,WAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3C,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAE/B,kDAAkD;AAClD,sDAAsD;AACtD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3B,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACpD,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AACxB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEnD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,eAAK,CAAC,CAAC;AACpB,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAK,CAAC,CAAC;AAEzB,yCAAyC;AACzC,GAAG,CAAC,GAAG,CAAC,UAAC,GAAG,EAAE,GAAG,EAAE,IAAI;IACrB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IACjC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,iBAAiB;AAEjB,4BAA4B;AAC5B,wBAAwB;AACxB,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC;IAErC,GAAG,CAAC,GAAG,CAAC,UAAC,KAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;QACjC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;QACnC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAA,KAAK;SACN,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,2BAA2B;AAC3B,gCAAgC;AAChC,GAAG,CAAC,GAAG,CAAC,UAAC,KAAU,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;IACjC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IACnC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,EAAE;KACV,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC;AACd,CAAC,CAAC,CAAC;AAGH;kBAAe,GAAG,CAAC"}

Просмотреть файл

@ -0,0 +1,60 @@
import * as express from 'express';
import * as logger from 'morgan';
import * as bodyParser from 'body-parser';
import {join} from 'path';
import index from './routes/index';
import users from './routes/users';
import cookieParser = require('cookie-parser'); // this module doesn't use the ES6 default export yet
const app: express.Express = express();
// view engine setup
app.set('views', join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(join(__dirname, 'public')));
app.use('/', index);
app.use('/users', users);
// catch 404 and forward to error handler
app.use((req, res, next) => {
var err = new Error('Not Found');
err['status'] = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use((error: any, req, res, next) => {
res.status(error['status'] || 500);
res.render('error', {
message: error.message,
error
});
});
}
// production error handler
// no stacktraces leaked to user
app.use((error: any, req, res, next) => {
res.status(error['status'] || 500);
res.render('error', {
message: error.message,
error: {}
});
return null;
});
export default app;

Просмотреть файл

@ -0,0 +1,10 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}
a {
color: blue;
}
.blocktext {
font-family: Courier New, Courier, monospace;
}

Просмотреть файл

@ -0,0 +1,13 @@
var express_1 = require('express');
var index = express_1.Router();
/* GET home page. */
index.get('/', function (req, res, next) {
res.render('index', { title: 'Visual Studio Code!' });
});
/* GET Quick Start. */
index.get('/quickstart', function (req, res, next) {
res.render('quickstart');
});
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = index;
//# sourceMappingURL=index.js.map

Просмотреть файл

@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,wBAAqB,SAAS,CAAC,CAAA;AAE/B,IAAM,KAAK,GAAG,gBAAM,EAAE,CAAC;AAEvB,oBAAoB;AACpB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAS,GAAG,EAAE,GAAG,EAAE,IAAI;IACpC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,sBAAsB;AACtB,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,UAAS,GAAG,EAAE,GAAG,EAAE,IAAI;IAC9C,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH;kBAAe,KAAK,CAAC"}

Просмотреть файл

@ -0,0 +1,15 @@
import {Router} from 'express';
const index = Router();
/* GET home page. */
index.get('/', function(req, res, next) {
res.render('index', { title: 'Visual Studio Code!' });
});
/* GET Quick Start. */
index.get('/quickstart', function(req, res, next) {
res.render('quickstart');
});
export default index;

Просмотреть файл

@ -0,0 +1,9 @@
var express_1 = require('express');
var users = express_1.Router();
/* GET users listing. */
users.get('/', function (req, res, next) {
res.send('respond with a resource');
});
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = users;
//# sourceMappingURL=users.js.map

Просмотреть файл

@ -0,0 +1 @@
{"version":3,"file":"users.js","sourceRoot":"","sources":["users.ts"],"names":[],"mappings":"AAAA,wBAAqB,SAAS,CAAC,CAAA;AAE/B,IAAM,KAAK,GAAG,gBAAM,EAAE,CAAC;AAEvB,wBAAwB;AACxB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAS,GAAG,EAAE,GAAG,EAAE,IAAI;IACpC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH;kBAAe,KAAK,CAAC"}

Просмотреть файл

@ -0,0 +1,10 @@
import {Router} from 'express';
const users = Router();
/* GET users listing. */
users.get('/', function(req, res, next) {
res.send('respond with a resource');
});
export default users;

Просмотреть файл

@ -0,0 +1,14 @@
@linkcolor: blue;
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}
a {
color: @linkcolor
}
.blocktext {
font-family: Courier New, Courier, monospace;
}

Просмотреть файл

@ -0,0 +1,10 @@
{
"compilerOptions": {
"target": "ES5",
"module": "commonjs",
"sourceMap": true,
"noImplicitAny": false,
"removeComments": false,
"preserveConstEnums": true
}
}

9
node-express-typescript/src/tsd.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,9 @@
/// <reference path="../typings/body-parser/body-parser.d.ts" />
/// <reference path="../typings/cookie-parser/cookie-parser.d.ts" />
/// <reference path="../typings/debug/debug.d.ts" />
/// <reference path="../typings/express/express.d.ts" />
/// <reference path="../typings/morgan/morgan.d.ts" />
/// <reference path="../typings/node/node.d.ts" />
/// <reference path="../typings/serve-favicon/serve-favicon.d.ts" />
/// <reference path="../typings/mocha/mocha.d.ts" />
/// <reference path="../typings/gulp/gulp.d.ts" />

Просмотреть файл

@ -0,0 +1,6 @@
extends layout
block content
h1= message
h2= error.status
pre #{error.stack}

Просмотреть файл

@ -0,0 +1,9 @@
extends layout
block content
h1 Visual Studio Code - Starter Express Application (TypeScript)
p Welcome to #{title}
| For more information, please see the
a(href='/quickstart') Quick Start
|.

Просмотреть файл

@ -0,0 +1,7 @@
doctype html
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
body
block content

Просмотреть файл

@ -0,0 +1,4 @@
extends layout
block content
include:md ../../vscodequickstart.md

Просмотреть файл

@ -0,0 +1,62 @@
var app_1 = require('./app');
var debugModule = require('debug');
var http = require('http');
var debug = debugModule('node-express-typescript:server');
// Get port from environment and store in Express.
var port = normalizePort(process.env.PORT || '3000');
app_1.default.set('port', port);
// create server and listen on provided port (on all network interfaces).
var server = http.createServer(app_1.default);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
//# sourceMappingURL=www.js.map

Просмотреть файл

@ -0,0 +1 @@
{"version":3,"file":"www.js","sourceRoot":"","sources":["www.ts"],"names":["normalizePort","onError","onListening"],"mappings":"AAAA,oBAAgB,OAAO,CAAC,CAAA;AACxB,IAAO,WAAW,WAAW,OAAO,CAAC,CAAC;AACtC,IAAO,IAAI,WAAW,MAAM,CAAC,CAAC;AAE9B,IAAM,KAAK,GAAG,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAE5D,kDAAkD;AAClD,IAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;AACvD,aAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAEtB,yEAAyE;AACzE,IAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,aAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5B,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAEpC;;GAEG;AACH,uBAAuB,GAAQ;IAC7BA,IAAIA,IAAIA,GAAGA,QAAQA,CAACA,GAAGA,EAAEA,EAAEA,CAACA,CAACA;IAE7BA,EAAEA,CAACA,CAACA,KAAKA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;QAChBA,aAAaA;QACbA,MAAMA,CAACA,GAAGA,CAACA;IACbA,CAACA;IAEDA,EAAEA,CAACA,CAACA,IAAIA,IAAIA,CAACA,CAACA,CAACA,CAACA;QACdA,cAAcA;QACdA,MAAMA,CAACA,IAAIA,CAACA;IACdA,CAACA;IAEDA,MAAMA,CAACA,KAAKA,CAACA;AACfA,CAACA;AAED;;GAEG;AACH,iBAAiB,KAAK;IACpBC,EAAEA,CAACA,CAACA,KAAKA,CAACA,OAAOA,KAAKA,QAAQA,CAACA,CAACA,CAACA;QAC/BA,MAAMA,KAAKA,CAACA;IACdA,CAACA;IAEDA,IAAIA,IAAIA,GAAGA,OAAOA,IAAIA,KAAKA,QAAQA;UAC/BA,OAAOA,GAAGA,IAAIA;UACdA,OAAOA,GAAGA,IAAIA,CAAAA;IAElBA,uDAAuDA;IACvDA,MAAMA,CAACA,CAACA,KAAKA,CAACA,IAAIA,CAACA,CAACA,CAACA;QACnBA,KAAKA,QAAQA;YACXA,OAAOA,CAACA,KAAKA,CAACA,IAAIA,GAAGA,+BAA+BA,CAACA,CAACA;YACtDA,OAAOA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;YAChBA,KAAKA,CAACA;QACRA,KAAKA,YAAYA;YACfA,OAAOA,CAACA,KAAKA,CAACA,IAAIA,GAAGA,oBAAoBA,CAACA,CAACA;YAC3CA,OAAOA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;YAChBA,KAAKA,CAACA;QACRA;YACEA,MAAMA,KAAKA,CAACA;IAChBA,CAACA;AACHA,CAACA;AAED;;GAEG;AACH;IACEC,IAAIA,IAAIA,GAAGA,MAAMA,CAACA,OAAOA,EAAEA,CAACA;IAC5BA,IAAIA,IAAIA,GAAGA,OAAOA,IAAIA,KAAKA,QAAQA;UAC/BA,OAAOA,GAAGA,IAAIA;UACdA,OAAOA,GAAGA,IAAIA,CAACA,IAAIA,CAACA;IAExBA,KAAKA,CAACA,eAAeA,GAAGA,IAAIA,CAACA,CAACA;AAChCA,CAACA"}

Просмотреть файл

@ -0,0 +1,73 @@
import app from './app';
import debugModule = require('debug');
import http = require('http');
const debug = debugModule('node-express-typescript:server');
// Get port from environment and store in Express.
const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
// create server and listen on provided port (on all network interfaces).
const server = http.createServer(app);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val: any): number|string|boolean {
let port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
let bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
let addr = server.address();
let bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}

Просмотреть файл

@ -0,0 +1,10 @@
var assert = require('assert');
describe('Array', function () {
describe('#indexOf()', function () {
it('should return -1 when the value is not present', function () {
assert.equal(-1, [1, 2, 3].indexOf(5));
assert.equal(-1, [1, 2, 3].indexOf(0));
});
});
});
//# sourceMappingURL=test.js.map

Просмотреть файл

@ -0,0 +1 @@
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"AACA,IAAO,MAAM,WAAW,QAAQ,CAAC,CAAC;AAElC,QAAQ,CAAC,OAAO,EAAE;IAChB,QAAQ,CAAC,YAAY,EAAE;QACrB,EAAE,CAAC,gDAAgD,EAAE;YACnD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}

Просмотреть файл

@ -0,0 +1,11 @@
import assert = require('assert');
describe('Array', function(){
describe('#indexOf()', function(){
it('should return -1 when the value is not present', function(){
assert.equal(-1, [1,2,3].indexOf(5));
assert.equal(-1, [1,2,3].indexOf(0));
});
});
});

Просмотреть файл

@ -0,0 +1,10 @@
{
"compilerOptions": {
"target": "ES5",
"module": "commonjs",
"sourceMap": true,
"noImplicitAny": false,
"removeComments": false,
"preserveConstEnums": true
}
}

1
node-express-typescript/tests/tsd.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1 @@
/// <reference path="../src/tsd.d.ts" />

Просмотреть файл

@ -0,0 +1,36 @@
{
"version": "v4",
"repo": "borisyankov/DefinitelyTyped",
"ref": "master",
"path": "typings",
"bundle": "src/tsd.d.ts",
"installed": {
"express/express.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"node/node.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"serve-favicon/serve-favicon.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"morgan/morgan.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"cookie-parser/cookie-parser.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"body-parser/body-parser.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"debug/debug.d.ts": {
"commit": "32f0a90dab26f70b206407ac24d4d622d0f0f408"
},
"mocha/mocha.d.ts": {
"commit": "983126e131a2b81739053d60e4bbdbb46d6577b7"
},
"gulp/gulp.d.ts": {
"commit": "3d2916191781fe400176a030c03722ac4b87f1c1"
}
}
}

138
node-express-typescript/typings/body-parser/body-parser.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,138 @@
// Type definitions for body-parser
// Project: http://expressjs.com
// Definitions by: Santi Albo <https://github.com/santialbo/>, VILIC VANE <https://vilic.info>, Jonathan Häberle <https://github.com/dreampulse/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../express/express.d.ts" />
declare module "body-parser" {
import express = require('express');
/**
* bodyParser: use individual json/urlencoded middlewares
* @deprecated
*/
function bodyParser(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
/**
* only parse objects and arrays. (default: true)
*/
strict?: boolean;
/**
* passed to JSON.parse().
*/
receiver?: (key: string, value: any) => any;
/**
* parse extended syntax with the qs module. (default: true)
*/
extended?: boolean;
}): express.RequestHandler;
module bodyParser {
export function json(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* request content-type to parse, passed directly to the type-is library. (default: 'json')
*/
type?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
/**
* only parse objects and arrays. (default: true)
*/
strict?: boolean;
/**
* passed to JSON.parse().
*/
receiver?: (key: string, value: any) => any;
}): express.RequestHandler;
export function raw(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* request content-type to parse, passed directly to the type-is library. (default: 'application/octet-stream')
*/
type?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
}): express.RequestHandler;
export function text(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* request content-type to parse, passed directly to the type-is library. (default: 'text/plain')
*/
type?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
/**
* the default charset to parse as, if not specified in content-type. (default: 'utf-8')
*/
defaultCharset?: string;
}): express.RequestHandler;
export function urlencoded(options?: {
/**
* if deflated bodies will be inflated. (default: true)
*/
inflate?: boolean;
/**
* maximum request body size. (default: '100kb')
*/
limit?: any;
/**
* request content-type to parse, passed directly to the type-is library. (default: 'urlencoded')
*/
type?: any;
/**
* function to verify body content, the parsing can be aborted by throwing an error.
*/
verify?: (req: express.Request, res: express.Response, buf: Buffer, encoding: string) => void;
/**
* parse extended syntax with the qs module. (default: true)
*/
extended?: boolean;
}): express.RequestHandler;
}
export = bodyParser;
}

Просмотреть файл

@ -0,0 +1,12 @@
// Type definitions for cookie-parser
// Project: https://github.com/expressjs/cookie-parser
// Definitions by: Santi Albo <https://github.com/santialbo/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../express/express.d.ts" />
declare module "cookie-parser" {
import express = require('express');
function e(secret?: string, options?: any): express.RequestHandler;
export = e;
}

30
node-express-typescript/typings/debug/debug.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,30 @@
// Type definitions for debug
// Project: https://github.com/visionmedia/debug
// Definitions by: Seon-Wook Park <https://github.com/swook>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare module "debug" {
function d(namespace: string): d.Debugger;
module d {
export var log: Function;
function enable(namespaces: string): void;
function disable(): void;
function enabled(namespace: string): boolean;
export interface Debugger {
(formatter: any, ...args: any[]): void;
enabled: boolean;
log: Function;
namespace: string;
}
}
export = d;
}

1093
node-express-typescript/typings/express/express.d.ts поставляемый Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

264
node-express-typescript/typings/gulp/gulp.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,264 @@
// Type definitions for Gulp v3.8.x
// Project: http://gulpjs.com
// Definitions by: Drew Noakes <https://drewnoakes.com>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../node/node.d.ts" />
declare module gulp {
/**
* Options to pass to node-glob through glob-stream.
* Specifies two options in addition to those used by node-glob:
* https://github.com/isaacs/node-glob#options
*/
interface ISrcOptions {
/**
* Setting this to <code>false</code> will return <code>file.contents</code> as <code>null</code>
* and not read the file at all.
* Default: <code>true</code>.
*/
read?: boolean;
/**
* Setting this to false will return <code>file.contents</code> as a stream and not buffer files.
* This is useful when working with large files.
* Note: Plugins might not implement support for streams.
* Default: <code>true</code>.
*/
buffer?: boolean;
/**
* The current working directory in which to search.
* Defaults to process.cwd().
*/
cwd?: string;
/**
* The place where patterns starting with / will be mounted onto.
* Defaults to path.resolve(options.cwd, "/") (/ on Unix systems, and C:\ or some such on Windows.)
*/
root?: string;
/**
* Include .dot files in normal matches and globstar matches.
* Note that an explicit dot in a portion of the pattern will always match dot files.
*/
dot?: boolean;
/**
* By default, a pattern starting with a forward-slash will be "mounted" onto the root setting, so that a valid
* filesystem path is returned. Set this flag to disable that behavior.
*/
nomount?: boolean;
/**
* Add a / character to directory matches. Note that this requires additional stat calls.
*/
mark?: boolean;
/**
* Don't sort the results.
*/
nosort?: boolean;
/**
* Set to true to stat all results. This reduces performance somewhat, and is completely unnecessary, unless
* readdir is presumed to be an untrustworthy indicator of file existence. It will cause ELOOP to be triggered one
* level sooner in the case of cyclical symbolic links.
*/
stat?: boolean;
/**
* When an unusual error is encountered when attempting to read a directory, a warning will be printed to stderr.
* Set the silent option to true to suppress these warnings.
*/
silent?: boolean;
/**
* When an unusual error is encountered when attempting to read a directory, the process will just continue on in
* search of other matches. Set the strict option to raise an error in these cases.
*/
strict?: boolean;
/**
* See cache property above. Pass in a previously generated cache object to save some fs calls.
*/
cache?: boolean;
/**
* A cache of results of filesystem information, to prevent unnecessary stat calls.
* While it should not normally be necessary to set this, you may pass the statCache from one glob() call to the
* options object of another, if you know that the filesystem will not change between calls.
*/
statCache?: boolean;
/**
* Perform a synchronous glob search.
*/
sync?: boolean;
/**
* In some cases, brace-expanded patterns can result in the same file showing up multiple times in the result set.
* By default, this implementation prevents duplicates in the result set. Set this flag to disable that behavior.
*/
nounique?: boolean;
/**
* Set to never return an empty set, instead returning a set containing the pattern itself.
* This is the default in glob(3).
*/
nonull?: boolean;
/**
* Perform a case-insensitive match. Note that case-insensitive filesystems will sometimes result in glob returning
* results that are case-insensitively matched anyway, since readdir and stat will not raise an error.
*/
nocase?: boolean;
/**
* Set to enable debug logging in minimatch and glob.
*/
debug?: boolean;
/**
* Set to enable debug logging in glob, but not minimatch.
*/
globDebug?: boolean;
}
interface IDestOptions {
/**
* The output folder. Only has an effect if provided output folder is relative.
* Default: process.cwd()
*/
cwd?: string;
/**
* Octal permission string specifying mode for any folders that need to be created for output folder.
* Default: 0777.
*/
mode?: string;
}
/**
* Options that are passed to <code>gaze</code>.
* https://github.com/shama/gaze
*/
interface IWatchOptions {
/** Interval to pass to fs.watchFile. */
interval?: number;
/** Delay for events called in succession for the same file/event. */
debounceDelay?: number;
/** Force the watch mode. Either 'auto' (default), 'watch' (force native events), or 'poll' (force stat polling). */
mode?: string;
/** The current working directory to base file patterns from. Default is process.cwd().. */
cwd?: string;
}
interface IWatchEvent {
/** The type of change that occurred, either added, changed or deleted. */
type: string;
/** The path to the file that triggered the event. */
path: string;
}
/**
* Callback to be called on each watched file change.
*/
interface IWatchCallback {
(event:IWatchEvent): void;
}
interface ITaskCallback {
/**
* Defines a task.
* Tasks may be made asynchronous if they are passing a callback or return a promise or a stream.
* @param cb callback used to signal asynchronous completion. Caller includes <code>err</code> in case of error.
*/
(cb?:(err?:any)=>void): any;
}
interface EventEmitter {
any: any;
}
interface Gulp {
/**
* Define a task.
*
* @param name the name of the task. Tasks that you want to run from the command line should not have spaces in them.
* @param fn the function that performs the task's operations. Generally this takes the form of gulp.src().pipe(someplugin()).
*/
task(name:string, fn:ITaskCallback): any;
/**
* Define a task.
*
* @param name the name of the task. Tasks that you want to run from the command line should not have spaces in them.
* @param dep an array of tasks to be executed and completed before your task will run.
* @param fn the function that performs the task's operations. Generally this takes the form of gulp.src().pipe(someplugin()).
*/
task(name:string, dep:string[], fn?:ITaskCallback): any;
/**
* Takes a glob and represents a file structure. Can be piped to plugins.
* @param glob a glob string, using node-glob syntax
* @param opt an optional option object
*/
src(glob:string, opt?:ISrcOptions): NodeJS.ReadWriteStream;
/**
* Takes a glob and represents a file structure. Can be piped to plugins.
* @param glob an array of glob strings, using node-glob syntax
* @param opt an optional option object
*/
src(glob:string[], opt?:ISrcOptions): NodeJS.ReadWriteStream;
/**
* Can be piped to and it will write files. Re-emits all data passed to it so you can pipe to multiple folders.
* Folders that don't exist will be created.
*
* @param outFolder the path (output folder) to write files to.
* @param opt
*/
dest(outFolder:string, opt?:IDestOptions): NodeJS.ReadWriteStream;
/**
* Can be piped to and it will write files. Re-emits all data passed to it so you can pipe to multiple folders.
* Folders that don't exist will be created.
*
* @param outFolder a function that converts a vinyl File instance into an output path
* @param opt
*/
dest(outFolder:(file:string)=>string, opt?:IDestOptions): NodeJS.ReadWriteStream;
/**
* Watch files and do something when a file changes. This always returns an EventEmitter that emits change events.
*
* @param glob a single glob or array of globs that indicate which files to watch for changes.
* @param opt options, that are passed to the gaze library.
* @param fn a callback or array of callbacks to be called on each change, or names of task(s) to run when a file changes, added with gulp.task().
*/
watch(glob:string, fn:(IWatchCallback|string)): EventEmitter;
watch(glob:string, fn:(IWatchCallback|string)[]): EventEmitter;
watch(glob:string, opt:IWatchOptions, fn:(IWatchCallback|string)): EventEmitter;
watch(glob:string, opt:IWatchOptions, fn:(IWatchCallback|string)[]): EventEmitter;
watch(glob:string[], fn:(IWatchCallback|string)): EventEmitter;
watch(glob:string[], fn:(IWatchCallback|string)[]): EventEmitter;
watch(glob:string[], opt:IWatchOptions, fn:(IWatchCallback|string)): EventEmitter;
watch(glob:string[], opt:IWatchOptions, fn:(IWatchCallback|string)[]): EventEmitter;
}
}
declare module "gulp" {
var _tmp:gulp.Gulp;
export = _tmp;
}
interface IGulpPlugin {
(...args: any[]): NodeJS.ReadWriteStream;
}

214
node-express-typescript/typings/mocha/mocha.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,214 @@
// Type definitions for mocha 2.2.5
// Project: http://mochajs.org/
// Definitions by: Kazi Manzur Rashid <https://github.com/kazimanzurrashid/>, otiai10 <https://github.com/otiai10>, jt000 <https://github.com/jt000>, Vadim Macagon <https://github.com/enlight>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
interface MochaSetupOptions {
//milliseconds to wait before considering a test slow
slow?: number;
// timeout in milliseconds
timeout?: number;
// ui name "bdd", "tdd", "exports" etc
ui?: string;
//array of accepted globals
globals?: any[];
// reporter instance (function or string), defaults to `mocha.reporters.Spec`
reporter?: any;
// bail on the first test failure
bail?: boolean;
// ignore global leaks
ignoreLeaks?: boolean;
// grep string or regexp to filter tests with
grep?: any;
}
interface MochaDone {
(error?: Error): void;
}
declare var mocha: Mocha;
declare var describe: Mocha.IContextDefinition;
declare var xdescribe: Mocha.IContextDefinition;
// alias for `describe`
declare var context: Mocha.IContextDefinition;
// alias for `describe`
declare var suite: Mocha.IContextDefinition;
declare var it: Mocha.ITestDefinition;
declare var xit: Mocha.ITestDefinition;
// alias for `it`
declare var test: Mocha.ITestDefinition;
declare function before(action: () => void): void;
declare function before(action: (done: MochaDone) => void): void;
declare function setup(action: () => void): void;
declare function setup(action: (done: MochaDone) => void): void;
declare function after(action: () => void): void;
declare function after(action: (done: MochaDone) => void): void;
declare function teardown(action: () => void): void;
declare function teardown(action: (done: MochaDone) => void): void;
declare function beforeEach(action: () => void): void;
declare function beforeEach(action: (done: MochaDone) => void): void;
declare function suiteSetup(action: () => void): void;
declare function suiteSetup(action: (done: MochaDone) => void): void;
declare function afterEach(action: () => void): void;
declare function afterEach(action: (done: MochaDone) => void): void;
declare function suiteTeardown(action: () => void): void;
declare function suiteTeardown(action: (done: MochaDone) => void): void;
declare class Mocha {
constructor(options?: {
grep?: RegExp;
ui?: string;
reporter?: string;
timeout?: number;
bail?: boolean;
});
/** Setup mocha with the given options. */
setup(options: MochaSetupOptions): Mocha;
bail(value?: boolean): Mocha;
addFile(file: string): Mocha;
/** Sets reporter by name, defaults to "spec". */
reporter(name: string): Mocha;
/** Sets reporter constructor, defaults to mocha.reporters.Spec. */
reporter(reporter: (runner: Mocha.IRunner, options: any) => any): Mocha;
ui(value: string): Mocha;
grep(value: string): Mocha;
grep(value: RegExp): Mocha;
invert(): Mocha;
ignoreLeaks(value: boolean): Mocha;
checkLeaks(): Mocha;
/** Enables growl support. */
growl(): Mocha;
globals(value: string): Mocha;
globals(values: string[]): Mocha;
useColors(value: boolean): Mocha;
useInlineDiffs(value: boolean): Mocha;
timeout(value: number): Mocha;
slow(value: number): Mocha;
enableTimeouts(value: boolean): Mocha;
asyncOnly(value: boolean): Mocha;
noHighlighting(value: boolean): Mocha;
/** Runs tests and invokes `onComplete()` when finished. */
run(onComplete?: (failures: number) => void): Mocha.IRunner;
}
// merge the Mocha class declaration with a module
declare module Mocha {
/** Partial interface for Mocha's `Runnable` class. */
interface IRunnable {
title: string;
fn: Function;
async: boolean;
sync: boolean;
timedOut: boolean;
}
/** Partial interface for Mocha's `Suite` class. */
interface ISuite {
parent: ISuite;
title: string;
fullTitle(): string;
}
/** Partial interface for Mocha's `Test` class. */
interface ITest extends IRunnable {
parent: ISuite;
pending: boolean;
fullTitle(): string;
}
/** Partial interface for Mocha's `Runner` class. */
interface IRunner {}
interface IContextDefinition {
(description: string, spec: () => void): ISuite;
only(description: string, spec: () => void): ISuite;
skip(description: string, spec: () => void): void;
timeout(ms: number): void;
}
interface ITestDefinition {
(expectation: string, assertion?: () => void): ITest;
(expectation: string, assertion?: (done: MochaDone) => void): ITest;
only(expectation: string, assertion?: () => void): ITest;
only(expectation: string, assertion?: (done: MochaDone) => void): ITest;
skip(expectation: string, assertion?: () => void): void;
skip(expectation: string, assertion?: (done: MochaDone) => void): void;
timeout(ms: number): void;
}
export module reporters {
export class Base {
stats: {
suites: number;
tests: number;
passes: number;
pending: number;
failures: number;
};
constructor(runner: IRunner);
}
export class Doc extends Base {}
export class Dot extends Base {}
export class HTML extends Base {}
export class HTMLCov extends Base {}
export class JSON extends Base {}
export class JSONCov extends Base {}
export class JSONStream extends Base {}
export class Landing extends Base {}
export class List extends Base {}
export class Markdown extends Base {}
export class Min extends Base {}
export class Nyan extends Base {}
export class Progress extends Base {
/**
* @param options.open String used to indicate the start of the progress bar.
* @param options.complete String used to indicate a complete test on the progress bar.
* @param options.incomplete String used to indicate an incomplete test on the progress bar.
* @param options.close String used to indicate the end of the progress bar.
*/
constructor(runner: IRunner, options?: {
open?: string;
complete?: string;
incomplete?: string;
close?: string;
});
}
export class Spec extends Base {}
export class TAP extends Base {}
export class XUnit extends Base {
constructor(runner: IRunner, options?: any);
}
}
}
declare module "mocha" {
export = Mocha;
}

93
node-express-typescript/typings/morgan/morgan.d.ts поставляемый Normal file
Просмотреть файл

@ -0,0 +1,93 @@
// Type definitions for morgan 1.2.2
// Project: https://github.com/expressjs/morgan
// Definitions by: James Roland Cabresos <https://github.com/staticfunction>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../express/express.d.ts" />
declare module "morgan" {
import express = require('express');
module morgan {
export function token<T>(name: string, callback: (req: express.Request, res: express.Response) => T): express.RequestHandler;
/***
* Morgan accepts these properties in the options object.
*/
export interface Options {
/***
* Buffer duration before writing logs to the stream, defaults to false. When set to true, defaults to 1000 ms.
*/
buffer?: boolean;
/***
* Write log line on request instead of response. This means that a requests will be logged even if the server crashes, but data from the response cannot be logged (like the response code).
*/
immediate?: boolean;
/***
* Function to determine if logging is skipped, defaults to false. This function will be called as skip(req, res).
*/
skip?: (req: express.Request, res: express.Response) => boolean;
/***
* Output stream for writing log lines, defaults to process.stdout.
* @param str
*/
stream?: (str: string) => void;
}
}
/***
* Create a new morgan logger middleware function using the given format and options. The format argument may be a string of a predefined name (see below for the names), a string of a format string, or a function that will produce a log entry.
* @param format
* @param options
*/
function morgan(format: string, options?: morgan.Options): express.RequestHandler;
/***
* Standard Apache combined log output.
* :remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
* @param format
* @param options
*/
function morgan(format: 'combined', options?: morgan.Options): express.RequestHandler;
/***
* Standard Apache common log output.
* :remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length]
* @param format
* @param options
*/
function morgan(format: 'common', options?: morgan.Options): express.RequestHandler;
/***
* Concise output colored by response status for development use. The :status token will be colored red for server error codes, yellow for client error codes, cyan for redirection codes, and uncolored for all other codes.
* :method :url :status :response-time ms - :res[content-length]
* @param format
* @param options
*/
function morgan(format: 'dev', options?: morgan.Options): express.RequestHandler;
/***
* Shorter than default, also including response time.
* :remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] - :response-time ms
* @param format
* @param options
*/
function morgan(format: 'short', options?: morgan.Options): express.RequestHandler;
/***
* The minimal output.
* :method :url :status :res[content-length] - :response-time ms
* @param format
* @param options
*/
function morgan(format: 'tiny', options?: morgan.Options): express.RequestHandler;
function morgan(custom: (req: express.Request, res: express.Response) => string): express.RequestHandler
export = morgan;
}

1409
node-express-typescript/typings/node/node.d.ts поставляемый Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,29 @@
// Type definitions for serve-favicon 2.1.6
// Project: https://github.com/expressjs/serve-favicon
// Definitions by: Uros Smolnik <https://github.com/urossmolnik/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/* =================== USAGE ===================
import serveFavicon = require('serve-favicon');
app.use(serveFavicon(__dirname + '/public/favicon.ico'));
=============================================== */
/// <reference path="../express/express.d.ts" />
declare module "serve-favicon" {
import express = require('express');
/**
* Node.js middleware for serving a favicon.
*/
function serveFavicon(path: string, options?: {
/**
* The cache-control max-age directive in ms, defaulting to 1 day. This can also be a string accepted by the ms module.
*/
maxAge?: number;
}): express.RequestHandler;
export = serveFavicon;
}

Просмотреть файл

@ -0,0 +1,23 @@
<!--
Press Ctrl+Shift+V (Windows, Linux) or Cmd+Shift+V (OSX) to preview this document!
-->
# Getting Started with Node, Express and Visual Studio Code
This is an [express-generator](http://expressjs.com/starter/generator.html) generated sample customized for development using [Visual Studio Code](http://code.visualstudio.com) and [TypeScript](http://www.typescriptlang.org/).
This example illustrates:
- **Great IntelliSense**: [TypeScript definition files](https://github.com/borisyankov/DefinitelyTyped) provide IntelliSense for Node, Express, Mocha, and Gulp. Use [tsd](http://definitelytyped.org/tsd/) to install additional typings.
- **Iterative Development**: Use [BrowserSync](http://www.browsersync.io/) and [NodeMon](http://nodemon.io/) to automatically recycle your client and server while developing in Visual Studio Code. Run `gulp browser-sync` from the Terminal.
- **Build**: Compile your [TypeScript](http://typescriptlang.org/) files to JavaScript by pressing `Ctrl+Shift+B` (Windows, Linux) or `Cmd+Shift+B` (OS X). You can also let gulp watch for file changes and automatically build by running `gulp watch` from the terminal.
- **StyleSheets**: [LESS](http://lesscss.org/) is a CSS pre-processor that extends CSS to allow for typical programming construcs such as variables, mixins, and functions. To compile your .less file to .css press `Ctrl+P` (Windows, Linux) or `Cmd+P` (OS X) to bring up the Command Palette, and then type in `task less`.
- **Test**: [Mocha](http://mochajs.org/) is a popular test framework for Node applications. Press `Ctrl+Shift+T` (Windows, Linux) or `Cmd+Shift+T` (OS X) to run the tests.
- **Debugging**: [Launch Configurations](https://code.visualstudio.com/Docs/debugging) are used for running your application under the debugger as well as launching the Mocha tests under the debugger. Open the Debug viewlet, select `Launch ./src/www` and press `F5` to run the application.
- **Integration with existing tools**: [Task Configurations](https://code.visualstudio.com/Docs/tasks) allow for control over how individual [Gulp](http://gulpjs.com/) tasks are launched. Run individual tasks from the Command Palette by pressing `Ctrl+P` (Windows, Linux) or `Cmd+P` (OS X), type in `task` and then press `space` to see all of the tasks in the provided `gulpfile.js`.
For more information, please visit us at [code.visualstudio.com](http://code.visualstudio.com), read the [documentation](http://code.visualstudio.com/docs) and follow us on twitter [@code](https://twitter.com/code).