commit d876ae99480890eff2604e4895f984cd7dc50e02 Author: tony.deng Date: Sat Nov 17 12:36:31 2018 +0800 初始化项目 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..885b713 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/node_modules +/logs +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..2c8606a --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ + +## 初始化 +```sh +npm install +``` + +## 运行 +```sh +node app +``` diff --git a/app.js b/app.js new file mode 100644 index 0000000..af91f34 --- /dev/null +++ b/app.js @@ -0,0 +1,50 @@ + +const express = require('express'); +const path = require('path'); +const bodyParser = require('body-parser'); +const app = express(); +const log4js = require('log4js'); + +const blog = require('./task/blog/blog'); +const webpage = require('./task/webpage/webpage'); +const glassplayer = require('./task/glassplayer/glassplayer'); + +log4js.configure('./logconfig.json'); + +const logger = log4js.getLogger(path.parse(__filename).name); + +app.use(bodyParser.json()); +app.use(require('body-parser').urlencoded({ extended: true })); + +const PORT = 8090; + +app.get('/', function (req, res) { + res.send('Hello World'); +}) + +try{ + blog.use(app,log4js); +} catch(err) { + logger.error(err); +} + +try{ + webpage.use(app,log4js); +} catch(err) { + logger.error(err); +} + +try{ + glassplayer.use(app,log4js); +} catch(err) { + logger.error(err); +} + +const server = app.listen(PORT, function () { + + //let host = server.address().address + //let port = server.address().port + + console.log("应用实例,访问地址为 http://localhost:" + PORT) + +}); \ No newline at end of file diff --git a/logconfig.json b/logconfig.json new file mode 100644 index 0000000..8e01642 --- /dev/null +++ b/logconfig.json @@ -0,0 +1,60 @@ +{ + "appenders": { + "console": { + "type": "console" + }, + "trace": { + "type": "file", + "filename": "logs/access.log", + "maxLogSize ": 31457280 + }, + "http": { + "type": "logLevelFilter", + "appender": "trace", + "level": "trace", + "maxLevel": "trace" + }, + "info": { + "type": "dateFile", + "filename": "logs/app-info.log", + "pattern": ".yyyy-MM-dd", + "layout": { + "type": "pattern", + "pattern": "[%d{ISO8601}][%5p %z %c] %m" + }, + "compress": true + }, + "maxInfo": { + "type": "logLevelFilter", + "appender": "info", + "level": "debug", + "maxLevel": "info" + }, + "error": { + "type": "dateFile", + "filename": "logs/app-error.log", + "pattern": ".yyyy-MM-dd", + "layout": { + "type": "pattern", + "pattern": "[%d{ISO8601}][%5p %z %c] %m" + }, + "compress": true + }, + "minError": { + "type": "logLevelFilter", + "appender": "error", + "level": "error" + } + }, + "categories": { + "default": { + "appenders": [ + "console", + "http", + "maxInfo", + "minError" + ], + "level": "all" + } + } + } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4b6d44f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2115 @@ +{ + "name": "webhook", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "addressparser": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/addressparser/download/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", + "optional": true + }, + "agent-base": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/agent-base/download/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "requires": { + "extend": "~3.0.0", + "semver": "~5.0.1" + }, + "dependencies": { + "semver": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" + } + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "optional": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "amqplib": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/amqplib/download/amqplib-0.5.2.tgz", + "integrity": "sha1-0tcxPH/6pNELzx5iUt5FkbbMe2M=", + "optional": true, + "requires": { + "bitsyntax": "~0.0.4", + "bluebird": "^3.4.6", + "buffer-more-ints": "0.0.2", + "readable-stream": "1.x >=1.1.9", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "optional": true + } + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "optional": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "optional": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "ast-types": { + "version": "0.11.3", + "resolved": "http://registry.npm.taobao.org/ast-types/download/ast-types-0.11.3.tgz", + "integrity": "sha1-wgdX/nLucSeOoP89h+XCyjDZ7fg=", + "optional": true + }, + "async": { + "version": "2.1.5", + "resolved": "http://registry.npm.taobao.org/async/download/async-2.1.5.tgz", + "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=", + "optional": true, + "requires": { + "lodash": "^4.14.0" + } + }, + "async-exec-cmd": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/async-exec-cmd/download/async-exec-cmd-2.0.2.tgz", + "integrity": "sha1-gu+5kEW07XmJWAvVtKB6SRkNIHA=", + "requires": { + "arr-union": "~2.0.1", + "cross-spawn": "~0.4.0", + "handle-arguments": "~3.0.1", + "handle-errors": "~1.0.0", + "is-empty-function": "~1.0.7", + "kind-of": "~1.1.0" + }, + "dependencies": { + "arr-union": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/arr-union/download/arr-union-2.0.1.tgz", + "integrity": "sha1-OgjLGKFKS1TQdl+8D9l2m6el+js=" + } + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "optional": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "optional": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.7.0.tgz", + "integrity": "sha1-1NDpudv8p3vwjusKikcVUP454ok=", + "optional": true + }, + "axios": { + "version": "0.15.3", + "resolved": "http://registry.npm.taobao.org/axios/download/axios-0.15.3.tgz", + "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", + "optional": true, + "requires": { + "follow-redirects": "1.0.0" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bitsyntax": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/bitsyntax/download/bitsyntax-0.0.4.tgz", + "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", + "optional": true, + "requires": { + "buffer-more-ints": "0.0.2" + } + }, + "bl": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/bl/download/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "optional": true, + "requires": { + "readable-stream": "~2.0.5" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "optional": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "optional": true + } + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz", + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=", + "optional": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + } + }, + "boom": { + "version": "4.3.1", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "optional": true, + "requires": { + "hoek": "4.x.x" + } + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.0.0.tgz", + "integrity": "sha1-TLiDLSNhJYmwQG6eKVbBfwb99TE=" + }, + "buffer-more-ints": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/buffer-more-ints/download/buffer-more-ints-0.0.2.tgz", + "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=" + }, + "buildmail": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/buildmail/download/buildmail-4.0.1.tgz", + "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", + "optional": true, + "requires": { + "addressparser": "1.0.1", + "libbase64": "0.1.0", + "libmime": "3.0.0", + "libqp": "1.1.0", + "nodemailer-fetch": "1.6.0", + "nodemailer-shared": "1.1.0", + "punycode": "1.4.1" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "optional": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "circular-json": { + "version": "0.5.3", + "resolved": "http://registry.npm.taobao.org/circular-json/download/circular-json-0.5.3.tgz", + "integrity": "sha1-6xt4MzO7EleEZH0adjd8rxSZ77E=" + }, + "cleanup-coverage-code": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/cleanup-coverage-code/download/cleanup-coverage-code-1.0.3.tgz", + "integrity": "sha1-D3p/orvyyhjeQikH89KsJ8ReFj4=", + "requires": { + "coverage-code-regex": "~1.0.2" + } + }, + "co": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "optional": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.15.1.tgz", + "integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8=", + "optional": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "coverage-code-regex": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/coverage-code-regex/download/coverage-code-regex-1.0.2.tgz", + "integrity": "sha1-KMv/LT6XFZnKjvv+Q2B91YjHUw8=" + }, + "cross-spawn": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-0.4.1.tgz", + "integrity": "sha1-BbLBb8p2E1C0kq1FWALqG+o/ra4=", + "requires": { + "lru-cache": "^2.5.0", + "spawn-sync": "^1.0.6" + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/cryptiles/download/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "optional": true, + "requires": { + "boom": "5.x.x" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-5.2.0.tgz", + "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", + "optional": true, + "requires": { + "hoek": "4.x.x" + } + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/data-uri-to-buffer/download/data-uri-to-buffer-1.2.0.tgz", + "integrity": "sha1-dxY+qcINhkG0cH6PGKvfmnjzSDU=", + "optional": true + }, + "date-format": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/date-format/download/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=" + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "optional": true + }, + "degenerator": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/degenerator/download/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "optional": true, + "requires": { + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "http://registry.npm.taobao.org/double-ended-queue/download/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "optional": true + }, + "escodegen": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.9.1.tgz", + "integrity": "sha1-264X75bI5L7bE1b0UE+kzC98t+I=", + "optional": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "estraverse": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "optional": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "optional": true + }, + "etag": { + "version": "1.8.1", + "resolved": "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "exec-cmd": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/exec-cmd/download/exec-cmd-2.0.1.tgz", + "integrity": "sha1-IBLRzsD+V1LVZs2RtPDLZFt7iaI=", + "requires": { + "async-exec-cmd": "~2.0.2", + "hybridify": "~1.0.9" + } + }, + "express": { + "version": "4.16.3", + "resolved": "http://registry.npm.taobao.org/express/download/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.3", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "optional": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "optional": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "optional": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "optional": true + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.1.tgz", + "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, + "follow-redirects": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.0.0.tgz", + "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "optional": true, + "requires": { + "debug": "^2.2.0" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "optional": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-6.0.1.tgz", + "integrity": "sha1-irwSj3lG4xATXdyTuYvdtBDno0s=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "ftp": { + "version": "0.3.10", + "resolved": "http://registry.npm.taobao.org/ftp/download/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "optional": true, + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "optional": true + } + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/generate-function/download/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "optional": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/generate-object-property/download/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "optional": true, + "requires": { + "is-property": "^1.0.0" + } + }, + "get-uri": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/get-uri/download/get-uri-2.0.1.tgz", + "integrity": "sha1-29ysrNjGCKODFoaTaBF2l6FjHFk=", + "optional": true, + "requires": { + "data-uri-to-buffer": "1", + "debug": "2", + "extend": "3", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "2" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "handle-arguments": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/handle-arguments/download/handle-arguments-3.0.4.tgz", + "integrity": "sha1-IEq1x4ILznXQQReR3KD4Rrfjy/Y=", + "requires": { + "is-arguments": "^1.0.1", + "sliced": "^1.0.1" + } + }, + "handle-errors": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/handle-errors/download/handle-errors-1.0.0.tgz", + "integrity": "sha1-Nx8VlGoKEx2JaIRWUUiBqaOo4tQ=" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "optional": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "optional": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-6.0.2.tgz", + "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=", + "optional": true, + "requires": { + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" + } + }, + "hipchat-notifier": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/hipchat-notifier/download/hipchat-notifier-1.1.0.tgz", + "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", + "optional": true, + "requires": { + "lodash": "^4.0.0", + "request": "^2.0.0" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-4.2.1.tgz", + "integrity": "sha1-ljRQKqEsRF3Vp8VzS1cruHOKrLs=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-proxy-agent": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-1.0.0.tgz", + "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", + "requires": { + "agent-base": "2", + "debug": "2", + "extend": "3" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "httpntlm": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/httpntlm/download/httpntlm-1.6.1.tgz", + "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", + "requires": { + "httpreq": ">=0.4.22", + "underscore": "~1.7.0" + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "http://registry.npm.taobao.org/httpreq/download/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" + }, + "https-proxy-agent": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "requires": { + "agent-base": "2", + "debug": "2", + "extend": "3" + } + }, + "hybridify": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/hybridify/download/hybridify-1.0.9.tgz", + "integrity": "sha1-7l8d5dH7wGOUunjMO9JUWPshtP8=", + "requires": { + "bluebird": "~2.9.25", + "handle-arguments": "~3.0.1" + }, + "dependencies": { + "bluebird": { + "version": "2.9.34", + "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-2.9.34.tgz", + "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=" + } + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" + }, + "inflection": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.10.0.tgz", + "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=", + "optional": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ip": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/ip/download/ip-1.0.1.tgz", + "integrity": "sha1-x+NWzeoiWucbNtcPLnGpK6TkJZA=", + "optional": true + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + }, + "is-arguments": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.2.tgz", + "integrity": "sha1-B+MK15UxhEF5tkLS2DmUNRgshyc=" + }, + "is-empty-function": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/is-empty-function/download/is-empty-function-1.0.7.tgz", + "integrity": "sha1-vQ+GJ5D89AVKmkGevYsLlBxqS0U=", + "requires": { + "balanced-match": "~0.2.0", + "cleanup-coverage-code": "~1.0.3" + }, + "dependencies": { + "balanced-match": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-0.2.1.tgz", + "integrity": "sha1-e8ZYtL7WHu5CStdPdfXD4sTfPMc=" + } + } + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-my-ip-valid/download/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha1-ezUbjo7dTTmV1NBmaA5mTZRpaCQ=", + "optional": true + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "http://registry.npm.taobao.org/is-my-json-valid/download/is-my-json-valid-2.17.2.tgz", + "integrity": "sha1-ayEDoojpTvPeXPFdKd2F/Et41lw=", + "optional": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-property/download/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "optional": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "optional": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "optional": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "optional": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/jsonpointer/download/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "optional": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" + }, + "levn": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "optional": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "libbase64": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/libbase64/download/libbase64-0.1.0.tgz", + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=" + }, + "libmime": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/libmime/download/libmime-3.0.0.tgz", + "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", + "requires": { + "iconv-lite": "0.4.15", + "libbase64": "0.1.0", + "libqp": "1.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.15", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" + } + } + }, + "libqp": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/libqp/download/libqp-1.1.0.tgz", + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=" + }, + "lodash": { + "version": "4.17.10", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz", + "integrity": "sha1-G3eTz3JZ6jj7NmHU04syYK+K5Oc=", + "optional": true + }, + "log4js": { + "version": "2.5.3", + "resolved": "http://registry.npm.taobao.org/log4js/download/log4js-2.5.3.tgz", + "integrity": "sha1-OLt73l6cHBgb116LwSjFzQQJyvE=", + "requires": { + "amqplib": "^0.5.2", + "axios": "^0.15.3", + "circular-json": "^0.5.1", + "date-format": "^1.2.0", + "debug": "^3.1.0", + "hipchat-notifier": "^1.1.0", + "loggly": "^1.1.0", + "mailgun-js": "^0.7.0", + "nodemailer": "^2.5.0", + "redis": "^2.7.1", + "semver": "^5.3.0", + "slack-node": "~0.2.0", + "streamroller": "^0.7.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "loggly": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/loggly/download/loggly-1.1.1.tgz", + "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", + "optional": true, + "requires": { + "json-stringify-safe": "5.0.x", + "request": "2.75.x", + "timespan": "2.3.x" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "optional": true + }, + "boom": { + "version": "2.10.1", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.x.x" + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "optional": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "http://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "optional": true, + "requires": { + "boom": "2.x.x" + } + }, + "form-data": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.0.0.tgz", + "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.11" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "optional": true, + "requires": { + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "http-signature": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "http://registry.npm.taobao.org/node-uuid/download/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "optional": true + }, + "qs": { + "version": "6.2.3", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "optional": true + }, + "request": { + "version": "2.75.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.75.0.tgz", + "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "bl": "~1.1.2", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.0.0", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "node-uuid": "~1.4.7", + "oauth-sign": "~0.8.1", + "qs": "~6.2.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "optional": true + } + } + }, + "lru-cache": { + "version": "2.6.5", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-2.6.5.tgz", + "integrity": "sha1-5W1jVBSO3o13B7WNFDIg/QjfD9U=" + }, + "mailcomposer": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/mailcomposer/download/mailcomposer-4.0.1.tgz", + "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", + "optional": true, + "requires": { + "buildmail": "4.0.1", + "libmime": "3.0.0" + } + }, + "mailgun-js": { + "version": "0.7.15", + "resolved": "http://registry.npm.taobao.org/mailgun-js/download/mailgun-js-0.7.15.tgz", + "integrity": "sha1-7jZqINrGTDwVwD1sGz4O15UlKrs=", + "optional": true, + "requires": { + "async": "~2.1.2", + "debug": "~2.2.0", + "form-data": "~2.1.1", + "inflection": "~1.10.0", + "is-stream": "^1.1.0", + "path-proxy": "~1.0.0", + "proxy-agent": "~2.0.0", + "q": "~1.4.0", + "tsscmp": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "optional": true + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz", + "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.33.0.tgz", + "integrity": "sha1-o0kgUKXLm2NFBUHjnZeI0icng9s=" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.18.tgz", + "integrity": "sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g=", + "requires": { + "mime-db": "~1.33.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "netmask": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/netmask/download/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", + "optional": true + }, + "nodemailer": { + "version": "2.7.2", + "resolved": "http://registry.npm.taobao.org/nodemailer/download/nodemailer-2.7.2.tgz", + "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", + "optional": true, + "requires": { + "libmime": "3.0.0", + "mailcomposer": "4.0.1", + "nodemailer-direct-transport": "3.3.2", + "nodemailer-shared": "1.1.0", + "nodemailer-smtp-pool": "2.8.2", + "nodemailer-smtp-transport": "2.7.2", + "socks": "1.1.9" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "optional": true + }, + "socks": { + "version": "1.1.9", + "resolved": "http://registry.npm.taobao.org/socks/download/socks-1.1.9.tgz", + "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", + "optional": true, + "requires": { + "ip": "^1.1.2", + "smart-buffer": "^1.0.4" + } + } + } + }, + "nodemailer-direct-transport": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/nodemailer-direct-transport/download/nodemailer-direct-transport-3.3.2.tgz", + "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/nodemailer-fetch/download/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=" + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/nodemailer-shared/download/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, + "nodemailer-smtp-pool": { + "version": "2.8.2", + "resolved": "http://registry.npm.taobao.org/nodemailer-smtp-pool/download/nodemailer-smtp-pool-2.8.2.tgz", + "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-smtp-transport": { + "version": "2.7.2", + "resolved": "http://registry.npm.taobao.org/nodemailer-smtp-transport/download/nodemailer-smtp-transport-2.7.2.tgz", + "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "http://registry.npm.taobao.org/nodemailer-wellknown/download/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "optional": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "optional": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-shim": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/os-shim/download/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=" + }, + "pac-proxy-agent": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/pac-proxy-agent/download/pac-proxy-agent-1.1.0.tgz", + "integrity": "sha1-NKOF399h0vDsrOCIWMdF0+eR/U0=", + "optional": true, + "requires": { + "agent-base": "2", + "debug": "2", + "extend": "3", + "get-uri": "2", + "http-proxy-agent": "1", + "https-proxy-agent": "1", + "pac-resolver": "~2.0.0", + "raw-body": "2", + "socks-proxy-agent": "2" + } + }, + "pac-resolver": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/pac-resolver/download/pac-resolver-2.0.0.tgz", + "integrity": "sha1-mbiNLxk/ve78HJpSnB8yYKtSd80=", + "optional": true, + "requires": { + "co": "~3.0.6", + "degenerator": "~1.0.2", + "ip": "1.0.1", + "netmask": "~1.0.4", + "thunkify": "~2.1.1" + }, + "dependencies": { + "co": { + "version": "3.0.6", + "resolved": "http://registry.npm.taobao.org/co/download/co-3.0.6.tgz", + "integrity": "sha1-FEXyJsXrlWE45oyawwFn6n0ua9o=", + "optional": true + } + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-proxy": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/path-proxy/download/path-proxy-1.0.0.tgz", + "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", + "optional": true, + "requires": { + "inflection": "~1.3.0" + }, + "dependencies": { + "inflection": { + "version": "1.3.8", + "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.3.8.tgz", + "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", + "optional": true + } + } + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "optional": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "optional": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "optional": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.3.tgz", + "integrity": "sha1-NV8mJQWmIWRrMTCnKOtkfiIFU0E=", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "proxy-agent": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/proxy-agent/download/proxy-agent-2.0.0.tgz", + "integrity": "sha1-V+tTR6qAXXTsaByyVknbo5yTNJk=", + "optional": true, + "requires": { + "agent-base": "2", + "debug": "2", + "extend": "3", + "http-proxy-agent": "1", + "https-proxy-agent": "1", + "lru-cache": "~2.6.5", + "pac-proxy-agent": "1", + "socks-proxy-agent": "2" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "optional": true + }, + "q": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/q/download/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "optional": true + }, + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "redis": { + "version": "2.8.0", + "resolved": "http://registry.npm.taobao.org/redis/download/redis-2.8.0.tgz", + "integrity": "sha1-ICKI4/WMSfYHnZevehDhMDrhSwI=", + "optional": true, + "requires": { + "double-ended-queue": "^2.1.0-0", + "redis-commands": "^1.2.0", + "redis-parser": "^2.6.0" + } + }, + "redis-commands": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/redis-commands/download/redis-commands-1.3.5.tgz", + "integrity": "sha1-RJWIlBTx6IYmEYCxRC5ylWAtg6I=", + "optional": true + }, + "redis-parser": { + "version": "2.6.0", + "resolved": "http://registry.npm.taobao.org/redis-parser/download/redis-parser-2.6.0.tgz", + "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", + "optional": true + }, + "request": { + "version": "2.85.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.85.0.tgz", + "integrity": "sha1-WgNhWkfGFCCz65m326IE+DYD4fo=", + "optional": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "requestretry": { + "version": "1.13.0", + "resolved": "http://registry.npm.taobao.org/requestretry/download/requestretry-1.13.0.tgz", + "integrity": "sha1-IT7BAG7rdQ6LjOVBdig9FajVXZQ=", + "optional": true, + "requires": { + "extend": "^3.0.0", + "lodash": "^4.15.0", + "request": "^2.74.0", + "when": "^3.7.7" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "semver": { + "version": "5.5.0", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz", + "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=" + }, + "send": { + "version": "0.16.2", + "resolved": "http://registry.npm.taobao.org/send/download/send-0.16.2.tgz", + "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "http://registry.npm.taobao.org/serve-static/download/serve-static-1.13.2.tgz", + "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=" + }, + "slack-node": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/slack-node/download/slack-node-0.2.0.tgz", + "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", + "optional": true, + "requires": { + "requestretry": "^1.2.2" + } + }, + "sliced": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "smart-buffer": { + "version": "1.1.15", + "resolved": "http://registry.npm.taobao.org/smart-buffer/download/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=" + }, + "smtp-connection": { + "version": "2.12.0", + "resolved": "http://registry.npm.taobao.org/smtp-connection/download/smtp-connection-2.12.0.tgz", + "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", + "requires": { + "httpntlm": "1.6.1", + "nodemailer-shared": "1.1.0" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-2.1.0.tgz", + "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=", + "optional": true, + "requires": { + "hoek": "4.x.x" + } + }, + "socks": { + "version": "1.1.10", + "resolved": "http://registry.npm.taobao.org/socks/download/socks-1.1.10.tgz", + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + } + } + }, + "socks-proxy-agent": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-2.1.1.tgz", + "integrity": "sha1-huuwcZMlhjeHDhO3vZnybGY989M=", + "requires": { + "agent-base": "2", + "extend": "3", + "socks": "~1.1.5" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "optional": true + }, + "spawn-sync": { + "version": "1.0.15", + "resolved": "http://registry.npm.taobao.org/spawn-sync/download/spawn-sync-1.0.15.tgz", + "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", + "requires": { + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" + } + }, + "sshpk": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "optional": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz", + "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=" + }, + "streamroller": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/streamroller/download/streamroller-0.7.0.tgz", + "integrity": "sha1-odG3z4PTmvsNYwSaWsv5NJO99ks=", + "requires": { + "date-format": "^1.2.0", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "readable-stream": "^2.3.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "optional": true + }, + "thunkify": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/thunkify/download/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", + "optional": true + }, + "timespan": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/timespan/download/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", + "optional": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.4.tgz", + "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=", + "optional": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "tsscmp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/tsscmp/download/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", + "optional": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz", + "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "underscore": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/underscore/download/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + }, + "universalify": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/universalify/download/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.2.1.tgz", + "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=", + "optional": true + }, + "vary": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "when": { + "version": "3.7.8", + "resolved": "http://registry.npm.taobao.org/when/download/when-3.7.8.tgz", + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", + "optional": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "optional": true + }, + "xregexp": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "optional": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "optional": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f174a1c --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "webhook", + "version": "1.0.0", + "description": "webhook service", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node app.js" + }, + "keywords": [ + "webhook" + ], + "author": "tonydeng", + "license": "ISC", + "devDependencies": {}, + "dependencies": { + "exec-cmd": "^2.0.1", + "express": "^4.16.3", + "fs-extra": "^6.0.1", + "log4js": "^2.5.3" + } +} diff --git a/task/blog/blog-old.js b/task/blog/blog-old.js new file mode 100644 index 0000000..51c0416 --- /dev/null +++ b/task/blog/blog-old.js @@ -0,0 +1,80 @@ + +const cpFile = require('cp-file'); +const del = require('delete'); +const path = require('path'); + +//const srcPath = '/Users/dengtongyu/code/webpage/build/pages/test/'; +//const targetPath = '/data/wwwroot/blog/'; +const srcPath = '/Users/dengtongyu/code/webpage/build/pages/test/'; +const targetPath = '/Users/dengtongyu/code/webpage/build/pages/ceshi/'; + +exports.use = function(app,logger) { + app.post('/blog', function (req, res) { + let data = req.body; + let str = ''; + //console.log(data.commits, data.commits.length); + if(data && data.commits) { + for (let i = 0; i < data.commits.length; i++) { + let add = data.commits[i].added; + let rm = data.commits[i].removed; + let mdf = data.commits[i].modified; + + if(add.length > 0) { + for (let index = 0; index < add.length; index++) { + //let target = targetPath + path.parse(add[index]).dir; + let target = targetPath + add[index]; + let src = srcPath + add[index]; + try{ + cpFile(src, target).then(() => { + str = str + ('

增加:'+ target +'

'); + }); + } catch(e) { + logger.error(e); + } + } + }else{ + str = str + '

增加:无

'; + } + + if(rm.length > 0) { + for (let index = 0; index < rm.length; index++) { + let target = targetPath + rm[index]; + del([target], {force: true}, function(err, deleted) { + if(err) { + logger.error(err); + }else{ + str = str + ('

删除:'+ deleted +'

'); + } + console.log(deleted); + }); + } + + }else{ + str = str + '

删除:无

'; + } + + if(mdf.length > 0) { + for (let index = 0; index < mdf.length; index++) { + let target = targetPath + mdf[index]; + let src = srcPath + mdf[index]; + try{ + cpFile(src, target).then(() => { + str = str + ('

修改:'+ target +'

'); + }); + } catch(e) { + logger.error(e); + } + } + + }else{ + str = str + '

修改:无

'; + } + } + }else{ + str = '

post参数缺失!

' + } + res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" }); + res.end(str); + logger.info(JSON.stringify(data)); + }) +} \ No newline at end of file diff --git a/task/blog/blog.js b/task/blog/blog.js new file mode 100644 index 0000000..fcd909f --- /dev/null +++ b/task/blog/blog.js @@ -0,0 +1,60 @@ +/** + * + * @authors Tony.Deng (dengtongyu123@163.com) + * @date 2018-05-03 17:11:02 + * @version 0.0.1 + */ + +const run = require('exec-cmd'); +const path = require('path'); +const blogUpdate = require('./updatefile'); + +const gitPath = '/var/local/githook/blog/'; + +exports.use = (app, log4js) => { + + const logger = log4js.getLogger(path.parse(__filename).name); + + app.post('/blog', (req, res) => { + + let data = req.body; + + if(data.ref != 'refs/heads/master') return; + + let updateCode = async () => { + let str = ''; + if (data && data.commits && data.commits.length > 0) { + let cmd = await run('git pull origin master', { + cwd: gitPath + }) + .then((arr) => { + let res = arr[0]; + let code = arr[1]; + let buffer = arr[2]; + logger.info(res, code); + + return arr; //return run(targetPath + ' git remote show', {stdio: 'inherit'}) + }) + .catch((err) => { + logger.error(err); + }); + if(cmd && cmd[1] == 0) { + let updateString = await blogUpdate.use(data, log4js); + str += updateString; + } + } else { + str += '

post数据缺失!

'; + } + + return str; + } + + updateCode().then((html) => { + res.writeHead(200, { + "Content-Type": "text/html;charset=utf-8" + }); + res.end(html); + logger.info(JSON.stringify(data)); + }) + }); +} \ No newline at end of file diff --git a/task/blog/updatefile.js b/task/blog/updatefile.js new file mode 100644 index 0000000..46097b6 --- /dev/null +++ b/task/blog/updatefile.js @@ -0,0 +1,91 @@ +/** + * + * @authors Tony.Deng (dengtongyu123@163.com) + * @date 2018-05-05 14:36:53 + * @version 0.0.1 + */ + +const path = require('path'); +const fs = require('fs-extra'); + +//const srcPath = '/Users/dengtongyu/code/webpage/build/pages/test/'; +//const targetPath = '/Users/dengtongyu/code/webpage/build/pages/ceshi/'; +const srcPath = '/var/local/githook/blog/'; +const targetPath = '/data/wwwroot/blog/'; + + +exports.use = async (data, log4js) => { + const logger = log4js.getLogger(path.parse(__filename).name); + + let str = ''; + + for (let i = 0; i < data.commits.length; i++) { + let add = data.commits[i].added; + let rm = data.commits[i].removed; + let mdf = data.commits[i].modified; + + if (add.length > 0) { + for (let index = 0; index < add.length; index++) { + let target = targetPath + add[index]; + let src = srcPath + add[index]; + + let addflie = await fs.copy(src, target) + .then(() => { + return '

增加:' + target + '

'; + }) + .catch((err) => { + logger.error(err); + return ''; + }); + + str += addflie; + } + } else { + str = str + '

增加:无

'; + } + + if (rm.length > 0) { + for (let index = 0; index < rm.length; index++) { + let target = targetPath + rm[index]; + + let rmfile = await fs.remove(target) + .then(() => { + return '

删除:' + target + '

'; + }) + .catch((err) => { + logger.error(err); + return ''; + }); + str += rmfile; + + } + + } else { + str += '

删除:无

'; + } + + if (mdf.length > 0) { + for (let index = 0; index < mdf.length; index++) { + let target = targetPath + mdf[index]; + let src = srcPath + mdf[index]; + + let mdffile = await fs.copy(src, target) + .then(() => { + return '

修改:' + target + '

'; + }) + .catch((err) => { + logger.error(err); + return ''; + }); + + str += mdffile; + } + + } else { + str += '

修改:无

'; + } + + } + + return str; +} \ No newline at end of file diff --git a/task/glassplayer/build.js b/task/glassplayer/build.js new file mode 100644 index 0000000..3d3f210 --- /dev/null +++ b/task/glassplayer/build.js @@ -0,0 +1,97 @@ +/** + * + * @authors Tony.Deng (dengtongyu123@163.com) + * @date 2018-05-17 11:18:41 + * @version $Id$ + */ + +const run = require('exec-cmd'); +const path = require('path'); + +let cmdPath = ''; + +exports.use = async (data, log4js, debug) => { + if(debug) { + cmdPath = '/Users/dengtongyu/www/glass-player'; + }else{ + cmdPath = '/var/local/githook/glass-player/'; + } + + const logger = log4js.getLogger(path.parse(__filename).name); + + let build = false; + let str = ''; + + for (let i = 0; i < data.commits.length; i++) { + let add = data.commits[i].added; + let rm = data.commits[i].removed; + let mdf = data.commits[i].modified; + + if (add.length > 0) { + for (let index = 0; index < add.length; index++) { + + build = checkPath(add[index]); + + if(build) { + str = await buildPlayer(build, logger); + return {str:str, build:build}; + } + } + } + + if (mdf.length > 0) { + for (let index = 0; index < mdf.length; index++) { + + build = checkPath(mdf[index]); + + if(build) { + str = await buildPlayer(build, logger); + return {str:str, build:build}; + } + } + } + + if (rm.length > 0) { + for (let index = 0; index < rm.length; index++) { + + build = checkPath(rm[index]); + + if(build) { + str = await buildPlayer(build, logger); + return {str:str, build:build}; + } + } + } + } + + str = '

本次提交没有src、public更新

'; + return {str:str, build:build}; +} + +checkPath = (path) => { + let src = new RegExp('src/').test(path); + let pub = new RegExp('public/').test(path); + return (src || pub); +} + +buildPlayer = async (build, logger) => { + + let str = ''; + + let cmd = await run('npm run build', { + cwd: cmdPath + }); + + if(cmd && cmd.length && cmd.length > 0) { + let desc = cmd[0]; + let code = cmd[1]; + let buffer = cmd[2]; + logger.info(desc, code); + str = '

glassplayer构建完成!

'; + }else{ + str = '

glassplayer构建失败!

'; + logger.info(str); + } + + return str; +} \ No newline at end of file diff --git a/task/glassplayer/glassplayer.js b/task/glassplayer/glassplayer.js new file mode 100644 index 0000000..a2dbd73 --- /dev/null +++ b/task/glassplayer/glassplayer.js @@ -0,0 +1,111 @@ +/** + * + * @authors Tony.Deng (dengtongyu123@163.com) + * @date 2018-07-12 15:42:53 + * @version $Id$ + */ + +const run = require('exec-cmd'); +const path = require('path'); +const build = require('./build'); +const filesUpdate = require('./updatefile'); + +const debug = true; + +let gitPath = ''; + +if(debug) { + gitPath = '/Users/dengtongyu/www/glass-player'; +}else{ + gitPath = '/var/local/githook/glass-player/'; +} + +exports.use = (app, log4js) => { + const logger = log4js.getLogger(path.parse(__filename).name); + + app.post('/glassplayer', (req, res) => { + let data = req.body; + logger.info(JSON.stringify(data)); + + let str = ''; + + res.writeHead(200, { + "Content-Type": "text/html;charset=utf-8" + }); + + if(data.ref != 'refs/heads/master') { + str = '

非master分支推送!

'; + logger.info(str); + res.write(str); + res.end(); + } + + + if (data && data.commits && data.commits.length > 0) { + str = '

有效推送,正在拉取git更新···

'; + logger.info(str); + res.write('

有效推送,正在拉取git更新···

'); + + buildFunction(log4js, res, data) + .then(() => { + res.end(); + }) + .catch(() => { + res.end(); + }); + + }else{ + str = '

本次提交无效!commits为空!

'; + res.write(str); + res.end(); + } + + }); +} + +let buildFunction = async (log4js,res,data) => { + const logger = log4js.getLogger('buildFunction'); + + let str = ''; + + let cmd = await run('git pull origin master', { + cwd: gitPath + }); + + logger.info(cmd); + + if(cmd && cmd.length && cmd.length > 0) { + let desc = cmd[0]; + let code = cmd[1]; + let buffer = cmd[2]; + logger.info(desc, code); + str = '

拉取git更新完成!开始编译···

'; + logger.info(str); + res.write(str); + }else{ + str = '

拉取git代码出错!

'; + logger.info(str); + res.write(str); + res.end(); + return; + } + + let buildResult = null; + + if(cmd && cmd[1] == 0) { + buildResult = await build.use(data, log4js, debug); + logger.info(buildResult); + str = buildResult.str; + logger.info(str); + res.write(str); + } + if(buildResult.build) { + updateString = await filesUpdate.use(buildResult.data, log4js, debug); + logger.info(updateString); + str = updateString; + //logger.info(str); + res.write(str); + } + + //res.end(); +} \ No newline at end of file diff --git a/task/glassplayer/updatefile.js b/task/glassplayer/updatefile.js new file mode 100644 index 0000000..20d2be1 --- /dev/null +++ b/task/glassplayer/updatefile.js @@ -0,0 +1,40 @@ +/** + * + * @authors Tony.Deng (dengtongyu123@163.com) + * @date 2018-05-17 10:42:03 + * @version $Id$ + */ + +const path = require('path'); +const fs = require('fs-extra'); + +let srcPath = ''; +let targetPath = ''; + +exports.use = async (data, log4js, debug) => { + if(debug) { + srcPath = '/Users/dengtongyu/www/glass-player/build/'; + targetPath = '/Users/dengtongyu/www/build/'; + }else{ + srcPath = '/var/local/githook/glass-player/build/'; + targetPath = '/data/wwwroot/glassplayer/'; + } + + const logger = log4js.getLogger(path.parse(__filename).name); + + let str = ''; + + let target = targetPath; + let src = srcPath; + + let flie = await fs.copy(src, target) + .then(() => { + str = '

部署:glassplayer完成!

'; + }) + .catch((err) => { + logger.error(err); + str = '

部署:glassplayer出错!

'; + }); + + return str; +} \ No newline at end of file diff --git a/task/webpage/build.js b/task/webpage/build.js new file mode 100644 index 0000000..93f4d62 --- /dev/null +++ b/task/webpage/build.js @@ -0,0 +1,80 @@ +/** + * + * @authors Tony.Deng (dengtongyu123@163.com) + * @date 2018-05-17 11:18:41 + * @version $Id$ + */ + +const run = require('exec-cmd'); +const path = require('path'); + +//const cmdPath = '/Users/dengtongyu/code/webpage/'; +const cmdPath = '/var/local/githook/webpage/'; +const rootPath = 'src/pages'; + +exports.use = async (data, log4js) => { + const logger = log4js.getLogger(path.parse(__filename).name); + + let buildPath = {}; + + for (let i = 0; i < data.commits.length; i++) { + let add = data.commits[i].added; + let rm = data.commits[i].removed; + let mdf = data.commits[i].modified; + + if (add.length > 0) { + for (let index = 0; index < add.length; index++) { + let name = path.relative(rootPath, add[index]); + logger.info(name); + let re = /^\./ + let result = re.test(name); + logger.info(result); + if (!result) { + name = name.split('/')[0]; + buildPath[name] = true; + } + + } + } + + if (mdf.length > 0) { + for (let index = 0; index < mdf.length; index++) { + let name = path.relative(rootPath, mdf[index]); + logger.info(name); + let re = /^\./ + let result = re.test(name); + logger.info(result); + if (!result) { + name = name.split('/')[0]; + buildPath[name] = true; + } + } + } + } + + let str = ''; + + if (JSON.stringify(buildPath) == '{}') { + str = '

本次提交没有pages更新

' + } else { + for (let key in buildPath) { + let cmd = await run('node app pack -n ' + key, { + cwd: cmdPath + }) + .then((arr) => { + let res = arr[0]; + let code = arr[1]; + let buffer = arr[2]; + logger.info(res, code); + + str += '

' + key + '构建完成!

'; + }) + .catch((err) => { + logger.error(err); + str += '

' + key + '构建失败!

'; + }); + } + } + + return {str:str,data:buildPath}; +} \ No newline at end of file diff --git a/task/webpage/updatefile.js b/task/webpage/updatefile.js new file mode 100644 index 0000000..4a316fe --- /dev/null +++ b/task/webpage/updatefile.js @@ -0,0 +1,34 @@ +/** + * + * @authors Tony.Deng (dengtongyu123@163.com) + * @date 2018-05-17 10:42:03 + * @version $Id$ + */ + +const path = require('path'); +const fs = require('fs-extra'); + +const srcPath = '/var/local/githook/webpage/build/pages/'; +const targetPath = '/data/wwwroot/node/pages/'; + + +exports.use = async (data, log4js) => { + const logger = log4js.getLogger(path.parse(__filename).name); + + let str = ''; + + for (let key in data) { + let target = targetPath + key; + let src = srcPath + key; + let flie = await fs.copy(src, target) + .then(() => { + str += '

部署:' + key + '完成!

'; + }) + .catch((err) => { + logger.error(err); + str += '

部署:' + key + '出错!

'; + }); + } + + return str; +} \ No newline at end of file diff --git a/task/webpage/webpage.js b/task/webpage/webpage.js new file mode 100644 index 0000000..687d31c --- /dev/null +++ b/task/webpage/webpage.js @@ -0,0 +1,69 @@ +/** + * + * @authors Tony.Deng (dengtongyu123@163.com) + * @date 2018-05-17 10:07:16 + * @version $Id$ + */ + +const run = require('exec-cmd'); +const path = require('path'); +const build = require('./build'); +const filesUpdate = require('./updatefile'); + +//const gitPath = '/Users/dengtongyu/code/webpage/'; +const gitPath = '/var/local/githook/webpage/'; + +exports.use = (app, log4js) => { + const logger = log4js.getLogger(path.parse(__filename).name); + + app.post('/webpage', (req, res) => { + let data = req.body; + + if(data.ref != 'refs/heads/master') return; + + let updateCode = async () => { + let str = ''; + if (data && data.commits && data.commits.length > 0) { + let cmd = await run('git pull origin master', { + cwd: gitPath + }) + .then((arr) => { + let res = arr[0]; + let code = arr[1]; + let buffer = arr[2]; + logger.info(res, code); + + return arr; + }) + .catch((err) => { + logger.error(err); + }); + + let buildObj = null; + + if(cmd && cmd[1] == 0) { + buildObj = await build.use(data, log4js); + logger.info(buildObj); + str += buildObj.str; + } + + if(JSON.stringify(buildObj.data) != '{}') { + updateString = await filesUpdate.use(buildObj.data, log4js); + str += updateString; + } + } else { + str += '

post数据缺失!

'; + } + + return str; + } + + updateCode().then((html) => { + res.writeHead(200, { + "Content-Type": "text/html;charset=utf-8" + }); + res.end(html); + logger.info(JSON.stringify(data)); + }) + }); +} \ No newline at end of file