diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..f59ec20aabf5842d237244ece8c81ab184faeac1 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/.gitignore b/.gitignore index 39e650f361e617ad040bcca9744e9c01af0caafe..16d16353f5adac177ce99c6a3ac87765a2f29e75 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ /dist /public /data -/site \ No newline at end of file +/site +/coverage \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..5fe199c8f2aa87f076e5c7e524e27cc51a1b024f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM library/node:8-alpine +MAINTAINER Ulf Seltmann <ulf.seltmann@uni-leipzig.de> +VOLUME ["/data"] +EXPOSE 3000 +ENV npm_config_registry=https://docker.ub.intern.uni-leipzig.de/npm \ + data_dir=/data +RUN npm install -g dacap +CMD chown node:node -R ${data_dir} && su node -c dacap \ No newline at end of file diff --git a/bin/dacap b/bin/dacap index 3d31f4d3cfe7adc04c035093f11a11019fa69b4b..f89923b82fe70bdc0eb56fa66056c7b8dddb00a3 100755 --- a/bin/dacap +++ b/bin/dacap @@ -16,7 +16,17 @@ const defaultObjectValueSize = parseInt(process.env.object_value_size) || 80; const autosaveInterval = parseInt(process.env.autosave_interval) || 60; const registerName = process.env.register_name || 'api-cache'; -const server = new Server(storagePath, proxyPath, proxyUrl, defaultTtl, defaultCheckPeriod, defaultArrayValueSize, defaultObjectValueSize, autosaveInterval, registerName); +const server = new Server({ + storagePath: storagePath, + proxyPath: proxyPath, + proxyUrl: proxyUrl, + defaultTtl: defaultTtl, + defaultCheckPeriod: defaultCheckPeriod, + defaultArrayValueSize: defaultArrayValueSize, + defaultObjectValueSize: defaultObjectValueSize, + autosaveInterval: autosaveInterval, + registerName: registerName +}); server.listen(proxyPort, () => { debug('server up and running'); diff --git a/docker-compose.yml b/docker-compose.yml index 6fa502fbca60fbb05fde6752283ff27fa4243f3f..74d856687f7dfdd01ee0d7d9d82c785abcc824a8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,7 +20,7 @@ services: - APP_TMP_DIR=/tmp - DEBUG=* command: - - npm run inspect + - npm run inspect-watch hostname: api.ub.uni-leipzig.de volumes: diff --git a/package-lock.json b/package-lock.json index 61e2dda1a578c73d32cb5f29021890b8d16f96b4..4c040f2a0266d5ded65b66d8c2fb1dbc036dd7a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,65 +5,65 @@ "requires": true, "dependencies": { "@angular/common": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.3.5.tgz", - "integrity": "sha1-X2sRNH6uHfw0YjzP1MBsj0xIji0=", + "version": "4.3.6", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@angular%2fcommon/-/common-4.3.6.tgz", + "integrity": "sha1-7TfpMHx1Bt2DR5fBps9nXlK1tu4=", "requires": { "tslib": "1.7.1" } }, "@angular/compiler": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.3.5.tgz", - "integrity": "sha1-UNPJhmV77/H+9Pbdmj+ljiSr1Ug=", + "version": "4.3.6", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@angular%2fcompiler/-/compiler-4.3.6.tgz", + "integrity": "sha1-vhcN8Ji3HoNczt8WjV+3sj5QRbg=", "requires": { "tslib": "1.7.1" } }, "@angular/core": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.3.5.tgz", - "integrity": "sha1-vR79vx68+5wnojjiqkxIFZsIlbs=", + "version": "4.3.6", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@angular%2fcore/-/core-4.3.6.tgz", + "integrity": "sha1-u6xj1o0Pe8s4nRKzQghlK+MofpY=", "requires": { "tslib": "1.7.1" } }, "@angular/forms": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.3.5.tgz", - "integrity": "sha1-UZqtCtgqG4cBmTf6k/wUdzRzd4c=", + "version": "4.3.6", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@angular%2fforms/-/forms-4.3.6.tgz", + "integrity": "sha1-DyDEWXwWoVJ0XXzZVVmFWgpcZoc=", "requires": { "tslib": "1.7.1" } }, "@angular/http": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-4.3.5.tgz", - "integrity": "sha1-gdSwdhyO8DXLC3NjAMI382KG8fA=", + "version": "4.3.6", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@angular%2fhttp/-/http-4.3.6.tgz", + "integrity": "sha1-Vjgn0afV6J47fYa3f7vTZ7LAhZE=", "requires": { "tslib": "1.7.1" } }, "@angular/platform-browser": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.3.5.tgz", - "integrity": "sha1-wNA0CUmcwp+BZ3qrYjyQhnYNhO8=", + "version": "4.3.6", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@angular%2fplatform-browser/-/platform-browser-4.3.6.tgz", + "integrity": "sha1-YVKx87eNAkb8XhUOL3ue1DN+O6Y=", "requires": { "tslib": "1.7.1" } }, "@angular/platform-browser-dynamic": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.3.5.tgz", - "integrity": "sha1-Sml7OwrsgFsziE/UqbNHMGW6seA=", + "version": "4.3.6", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@angular%2fplatform-browser-dynamic/-/platform-browser-dynamic-4.3.6.tgz", + "integrity": "sha1-nqv4JvEZyY+Fwqlu3LGKsAtO+xw=", "requires": { "tslib": "1.7.1" } }, "@angular/router": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-4.3.5.tgz", - "integrity": "sha1-GICCdHvJtpdPnUs/VVe0NGRdI80=", + "version": "4.3.6", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@angular%2frouter/-/router-4.3.6.tgz", + "integrity": "sha1-ZAM+20/NoIoyPnUztKGCDA8o0TA=", "requires": { "tslib": "1.7.1" } @@ -74,8 +74,8 @@ "integrity": "sha512-iGYVwwFznpBzqwS3QOoaop3mEbW8vAuqnPN2/pi2/HTREHeFTT+xX4hp5OImpQ7q4bE3a96JsDgBUccsx0fL/A==", "dev": true, "requires": { - "@types/express": "4.0.36", - "@types/node": "8.0.20" + "@types/express": "4.0.37", + "@types/node": "8.0.25" } }, "@types/compression": { @@ -84,7 +84,7 @@ "integrity": "sha1-ldxzOiM5qoRjgdfxN3eS0lU9wn0=", "dev": true, "requires": { - "@types/express": "4.0.36" + "@types/express": "4.0.37" } }, "@types/debug": { @@ -94,22 +94,22 @@ "dev": true }, "@types/express": { - "version": "4.0.36", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.0.36.tgz", - "integrity": "sha512-bT9q2eqH/E72AGBQKT50dh6AXzheTqigGZ1GwDiwmx7vfHff0bZOrvUWjvGpNWPNkRmX1vDF6wonG6rlpBHb1A==", + "version": "4.0.37", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@types%2fexpress/-/express-4.0.37.tgz", + "integrity": "sha512-tIULTLzQpFFs5/PKnFIAFOsXQxss76glppbVKR3/jddPK26SBsD5HF5grn5G2jOGtpRWSBvYmDYoduVv+3wOXg==", "dev": true, "requires": { - "@types/express-serve-static-core": "4.0.49", - "@types/serve-static": "1.7.31" + "@types/express-serve-static-core": "4.0.50", + "@types/serve-static": "1.7.32" } }, "@types/express-serve-static-core": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.0.49.tgz", - "integrity": "sha512-b7mVHoURu1xaP/V6xw1sYwyv9V0EZ7euyi+sdnbnTZxEkAh4/hzPsI6Eflq+ZzHQ/Tgl7l16Jz+0oz8F46MLnA==", + "version": "4.0.50", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@types%2fexpress-serve-static-core/-/express-serve-static-core-4.0.50.tgz", + "integrity": "sha512-0n1YgeUfZEIaMMu82LuOFIFDyMtFtcEP0yjQKihJlNjpCiygDVri7C26DC7jaUOwFXL6ZU2x4tGtNYNEgeO3tw==", "dev": true, "requires": { - "@types/node": "8.0.20" + "@types/node": "8.0.25" } }, "@types/form-data": { @@ -118,7 +118,7 @@ "integrity": "sha512-vm5OGsKc61Sx/GTRMQ9d0H0PYCDebT78/bdIBPCoPEHdgp0etaH1RzMmkDygymUmyXTj3rdWQn0sRUpYKZzljA==", "dev": true, "requires": { - "@types/node": "8.0.20" + "@types/node": "8.0.25" } }, "@types/mime": { @@ -134,9 +134,9 @@ "dev": true }, "@types/node": { - "version": "8.0.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.20.tgz", - "integrity": "sha512-MnB7YEpmLUyEWRVRhKpRs4swwqITnY8BcVFPoTuCl99SCplI/lLUiU5vcJ/OANDqwkpdIg0pDEM38K22KQT2RA==", + "version": "8.0.25", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@types%2fnode/-/node-8.0.25.tgz", + "integrity": "sha512-zT+t9841g1HsjLtPMCYxmb1U4pcZ2TOegAKiomlmj6bIziuaEYHUavxLE9NRwdntY0vOCrgHho6OXjDX7fm/Kw==", "dev": true }, "@types/node-cache": { @@ -145,41 +145,41 @@ "integrity": "sha512-7wZKfsOBpcc+bRQNQ2doC4okGLRWD4EW/JMe3TTuGB3NYxT7lj0RQzHf04At1QaAt8jRE7o+xY/NvuaVP/rg3w==", "dev": true, "requires": { - "@types/node": "8.0.20" + "@types/node": "8.0.25" } }, "@types/react": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.0.2.tgz", - "integrity": "sha512-vVdCha0AMQRMmE26AySLZG+R6qgZ8oNl4Qa2GxryM15rqY4zWKHl2hHLbfEXfaIxzdeDOmyX4O5p7gU/wT0jJw==", + "version": "16.0.5", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@types%2freact/-/react-16.0.5.tgz", + "integrity": "sha512-Wo/JT6Cpl7XuLA1Ov2M2Rso4Tep7rX6h1csbqhNDaSxqeY8nxUbrDkT6vJrKVu+7tw7vmJP9libZSReV9GsG9A==", "dev": true }, "@types/react-dom": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-15.5.3.tgz", - "integrity": "sha512-fbOEw/SVkp8iOLKvHnpDwJ/TytEogvN6shdY1G3o9gvbuypre1KYSQ81nPy7ZgQQ1mOJJkl2WNVmZNeZ1FjAQA==", + "version": "15.5.4", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@types%2freact-dom/-/react-dom-15.5.4.tgz", + "integrity": "sha512-70jxjspCatgOXpRptyp/T8bag5prWMvd/rjc5trY3xiKQJOFfWMxGI8pSEJMHi9KQRAhpiLCbJLzcbVFX/nw2w==", "dev": true, "requires": { - "@types/react": "16.0.2" + "@types/react": "16.0.5" } }, "@types/request": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.0.1.tgz", - "integrity": "sha512-DTz1/+CU76KsskRoNqKAa/jIaLoAXNdffP0ah8rt3P2OtxRqRU5nWZkC/GEQXNcO9qMzIxKIW969sSBtMlZ4cA==", + "version": "2.0.3", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@types%2frequest/-/request-2.0.3.tgz", + "integrity": "sha512-cIvnyFRARxwE4OHpCyYue7H+SxaKFPpeleRCHJicft8QhyTNbVYsMwjvEzEPqG06D2LGHZ+sN5lXc8+bTu6D8A==", "dev": true, "requires": { "@types/form-data": "2.2.0", - "@types/node": "8.0.20" + "@types/node": "8.0.25" } }, "@types/serve-static": { - "version": "1.7.31", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.7.31.tgz", - "integrity": "sha1-FUVt6NmNa0z/Mb5savdJKuY/Uho=", + "version": "1.7.32", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/@types%2fserve-static/-/serve-static-1.7.32.tgz", + "integrity": "sha512-WpI0g7M1FiOmJ/a97Qrjafq2I938tjAZ3hZr9O7sXyA6oUhH3bqUNZIt7r1KZg8TQAKxcvxt6JjQ5XuLfIBFvg==", "dev": true, "requires": { - "@types/express-serve-static-core": "4.0.49", + "@types/express-serve-static-core": "4.0.50", "@types/mime": "1.3.1" } }, @@ -189,6 +189,12 @@ "integrity": "sha512-+J77XoXmKIXcLK5fWS5B3j31F4wfdclzk+lRxFcKfXTHzZfd153u8w96W30dQBIT4kwKobjvYa0kIb0BWJX21Q==", "dev": true }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, "accepts": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", @@ -221,23 +227,6 @@ } } }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, "ajv": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", @@ -250,12 +239,6 @@ "json-stable-stringify": "1.0.1" } }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -302,12 +285,6 @@ } } }, - "ansi-escapes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", - "dev": true - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -320,12 +297,6 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", @@ -371,33 +342,12 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -1070,21 +1020,6 @@ } } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, "camel-case": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", @@ -1173,12 +1108,6 @@ "safe-buffer": "5.1.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, "clap": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz", @@ -1253,21 +1182,6 @@ "source-map": "0.5.6" } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cli-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", - "dev": true - }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -1452,17 +1366,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -1741,9 +1644,9 @@ "dev": true }, "debug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.0.tgz", - "integrity": "sha512-XQkHxxqbsCb+zFurCHbotmJZl5jXsxvkRt952pT6Hpo7LmjWAJF12d9/kqBg5owjbLADbBDli1olravjSiSg8g==", + "version": "3.0.1", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/debug/-/debug-3.0.1.tgz", + "integrity": "sha512-6nVc6S36qbt/mutyt+UGMnawAMrPDZUPQjRZI3FS9tCtDRhvxJbK79unYBLPi+z5SLXQ3ftoVBFCblQtNSls8w==", "requires": { "ms": "2.0.0" } @@ -1775,21 +1678,6 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.1" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1832,16 +1720,6 @@ "randombytes": "2.0.5" } }, - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, "dom-converter": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", @@ -2094,108 +1972,61 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "eslint": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.4.1.tgz", - "integrity": "sha1-mc1+r8/8ov+Zpcj18qR01jZLS9M=", - "dev": true, - "requires": { - "ajv": "5.2.2", - "babel-code-frame": "6.22.0", - "chalk": "1.1.3", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "2.6.8", - "doctrine": "2.0.0", - "eslint-scope": "3.7.1", - "espree": "3.5.0", - "esquery": "1.0.0", - "estraverse": "4.2.0", + "esprima": "2.7.3", + "estraverse": "1.9.3", "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.3", - "imurmurhash": "0.1.4", - "inquirer": "3.2.1", - "is-resolvable": "1.0.0", - "js-yaml": "3.9.1", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "4.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.4.1", - "strip-json-comments": "2.0.1", - "table": "4.0.1", - "text-table": "0.2.0" + "source-map": "0.2.0" }, "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, + "optional": true, "requires": { - "ms": "2.0.0" + "amdefine": "1.0.1" } } } }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", "esrecurse": "4.2.0", "estraverse": "4.2.0" } }, - "espree": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", - "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", - "dev": true, - "requires": { - "acorn": "5.1.1", - "acorn-jsx": "3.0.1" - } - }, "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, "esrecurse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", @@ -2355,17 +2186,6 @@ "is-extendable": "0.1.1" } }, - "external-editor": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", - "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", - "dev": true, - "requires": { - "iconv-lite": "0.4.18", - "jschardet": "1.5.1", - "tmp": "0.0.31" - } - }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -2431,25 +2251,6 @@ } } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.2.2", - "object-assign": "4.1.1" - } - }, "file-loader": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz", @@ -2511,18 +2312,6 @@ "locate-path": "2.0.0" } }, - "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, "flatten": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", @@ -2596,12 +2385,6 @@ "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -2635,20 +2418,6 @@ } } }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", @@ -2668,26 +2437,6 @@ "is-glob": "2.0.1" } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -2706,6 +2455,35 @@ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", "dev": true }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, "har-schema": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", @@ -3047,18 +2825,6 @@ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, - "ignore": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", - "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", @@ -3086,74 +2852,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "inquirer": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.1.tgz", - "integrity": "sha512-QgW3eiPN8gpj/K5vVpHADJJgrrF0ho/dZGylikGX7iqAdRgC9FVKYKWFLx6hZDBFcOLEoSqINYrVPeFAeG/PdA==", - "dev": true, - "requires": { - "ansi-escapes": "2.0.0", - "chalk": "2.1.0", - "cli-cursor": "2.1.0", - "cli-width": "2.1.0", - "external-editor": "2.0.4", - "figures": "2.0.0", - "lodash": "4.17.4", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.2.1" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", - "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, "interpret": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", @@ -3315,30 +3013,6 @@ } } }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -3374,21 +3048,6 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -3408,12 +3067,6 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3449,6 +3102,70 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.10", + "js-yaml": "3.9.1", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.0", + "wordwrap": "1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, "jquery": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", @@ -3482,12 +3199,6 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, - "jschardet": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.1.tgz", - "integrity": "sha512-vE2hT1D0HLZCLLclfBSfkfTTedhVj0fubHpJBHKwwUWX0nSbhPAfk+SG9rTX95BYNmau8rGFfCeaT6T5OW1C2A==", - "dev": true - }, "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", @@ -3757,12 +3468,6 @@ "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", "dev": true }, - "make-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", - "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", - "dev": true - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -4005,17 +3710,31 @@ } } }, + "mocha-jenkins-reporter": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/mocha-jenkins-reporter/-/mocha-jenkins-reporter-0.3.9.tgz", + "integrity": "sha512-+/nhhGRiAVkoQcapiWdlazL/6/bDr+adQYHQ3sjKR3ipB7O2cZIuGvkgaeKDxMtEFby/ZbWhi2CYHhtJm487GA==", + "dev": true, + "requires": { + "diff": "1.0.7", + "mkdirp": "0.5.1", + "mocha": "3.5.0", + "xml": "1.0.1" + }, + "dependencies": { + "diff": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz", + "integrity": "sha1-JLuwAcSn1VIhaefKvbLCgU7ZHPQ=", + "dev": true + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, "nanomatch": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.0.tgz", @@ -4065,12 +3784,6 @@ } } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, "ncname": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", @@ -4151,6 +3864,15 @@ } } }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.0.9" + } + }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -4329,13 +4051,22 @@ "wrappy": "1.0.2" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "minimist": "0.0.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } } }, "optionator": { @@ -4369,12 +4100,6 @@ "mem": "1.1.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -4474,12 +4199,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -4533,27 +4252,6 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pluralize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-4.0.0.tgz", - "integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=", - "dev": true - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -5126,12 +4824,6 @@ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", "dev": true }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -5585,20 +5277,10 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, "resolve-url": { @@ -5607,16 +5289,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -5626,15 +5298,6 @@ "align-text": "0.1.4" } }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, "ripemd160": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", @@ -5645,30 +5308,6 @@ "inherits": "2.0.3" } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "4.0.8" - } - }, "rxjs": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz", @@ -5871,12 +5510,6 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, "snapdragon": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", @@ -6264,12 +5897,6 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, "style-loader": { "version": "0.18.2", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", @@ -6324,44 +5951,12 @@ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" }, - "table": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.1.tgz", - "integrity": "sha1-qBFsEz+sLGH0pCCrbN9cTWHw5DU=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.4", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } - } - }, "tapable": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", "dev": true }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -6377,15 +5972,6 @@ "setimmediate": "1.0.5" } }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -6475,49 +6061,6 @@ "punycode": "1.4.1" } }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "ts-mocha": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-1.0.3.tgz", - "integrity": "sha1-KSlZ7MVtVrFVgA1TCrLcsxYKN+o=", - "dev": true, - "requires": { - "ts-node": "1.7.3" - } - }, - "ts-node": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-1.7.3.tgz", - "integrity": "sha1-3uf4qEdRcy08Lkl8rFoC+xF9/uc=", - "dev": true, - "requires": { - "arrify": "1.0.1", - "chalk": "1.1.3", - "diff": "3.2.0", - "make-error": "1.3.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "pinkie": "2.0.4", - "source-map-support": "0.4.16", - "tsconfig": "5.0.3", - "v8flags": "2.1.1", - "xtend": "4.0.1", - "yn": "1.3.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "tsc-watch": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-1.0.7.tgz", @@ -6527,30 +6070,7 @@ "chalk": "1.1.3", "cross-spawn": "5.1.0", "ps-tree": "1.1.0", - "typescript": "2.4.2" - } - }, - "tsconfig": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", - "integrity": "sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=", - "dev": true, - "requires": { - "any-promise": "1.3.0", - "parse-json": "2.2.0", - "strip-bom": "2.0.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } + "typescript": "2.5.1" } }, "tslib": { @@ -6596,16 +6116,10 @@ "mime-types": "2.1.16" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "typescript": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.2.tgz", - "integrity": "sha1-+DlfhdRZJ2BnyYiqQYN6j4KHCEQ=", + "version": "2.5.1", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/typescript/-/typescript-2.5.1.tgz", + "integrity": "sha1-znzJOto94ZR1zJ0X463qeu4YMqo=", "dev": true }, "ua-parser-js": { @@ -6796,12 +6310,6 @@ } } }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -6841,15 +6349,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", @@ -7050,14 +6549,11 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } + "xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", + "dev": true }, "xml-char-classes": { "version": "1.0.0", @@ -7162,19 +6658,10 @@ } } }, - "yn": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-1.3.0.tgz", - "integrity": "sha1-GwgSq7jYBdSJZvjfOF3J2syaGdg=", - "dev": true, - "requires": { - "object-assign": "4.1.1" - } - }, "zone.js": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.16.tgz", - "integrity": "sha1-rDG2xBj4jA+Ritas2KQCrKkxOrs=" + "version": "0.8.17", + "resolved": "https://docker.ub.intern.uni-leipzig.de/npm/zone.js/-/zone.js-0.8.17.tgz", + "integrity": "sha1-TF5RhahX2o2nk9rzkZNxxaNrKgs=" } } } diff --git a/package.json b/package.json index 4109abdc397ab017d6934b84732c6162528b6af7..3a11d4e899d6d4d187b4c60011f29b25fc43af02 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dacap", - "version": "1.0.0", + "version": "1.0.1", "description": "proxies,compresses and caches api-requests", "main": "bin/dacap", "bin": { @@ -13,26 +13,27 @@ "webpack-watch": "webpack --config webpack.dev.js --watch", "start": "node bin/dacap", "tsc": "tsc", - "inspect-watch": "tsc-watch --sourceMap --onSuccess 'node --inspect=0.0.0.0:9229 bin/dacap'", + "inspect-watch": "tsc-watch --onSuccess 'node --inspect=0.0.0.0:9229 bin/dacap'", "inspect-brk-watch": "tsc-watch --onSuccess 'node --inspect-brk=0.0.0.0:9229 bin/dacap'", - "test": "ts-mocha --recursive test/*", + "test": "mocha", + "ci": "istanbul cover _mocha -- --no-colors --timeout 10000 --reporter mocha-jenkins-reporter", "build": "rm -rf dist public && tsc --declaration && webpack --config webpack.prod.js" }, "author": "Ulf Seltmann <ulf.seltmann@uni-leipzig.de>", "license": "GPL-2.0", "dependencies": { - "@angular/common": "^4.3.5", - "@angular/compiler": "^4.3.5", - "@angular/core": "^4.3.5", - "@angular/forms": "^4.3.5", - "@angular/http": "^4.3.5", - "@angular/platform-browser": "^4.3.5", - "@angular/platform-browser-dynamic": "^4.3.5", - "@angular/router": "^4.3.5", + "@angular/common": "^4.3.6", + "@angular/compiler": "^4.3.6", + "@angular/core": "^4.3.6", + "@angular/forms": "^4.3.6", + "@angular/http": "^4.3.6", + "@angular/platform-browser": "^4.3.6", + "@angular/platform-browser-dynamic": "^4.3.6", + "@angular/router": "^4.3.6", "body-parser": "^1.17.2", "compression": "^1.7.0", "core-js": "^2.5.0", - "debug": "^3.0.0", + "debug": "^3.0.1", "express": "^4.15.4", "node-cache": "^4.1.5", "q": "^1.5.0", @@ -41,37 +42,37 @@ "react-proxy-loader": "^0.3.5", "request": "^2.81.0", "rxjs": "^5.4.3", - "zone.js": "^0.8.16" + "zone.js": "^0.8.17" }, "devDependencies": { "@types/body-parser": "^1.16.5", "@types/compression": "0.0.33", "@types/debug": "0.0.30", - "@types/express": "^4.0.36", + "@types/express": "^4.0.37", "@types/mocha": "^2.2.42", - "@types/node": "^8.0.20", + "@types/node": "^8.0.25", "@types/node-cache": "^4.1.0", - "@types/react": "^16.0.2", - "@types/react-dom": "^15.5.3", - "@types/request": "^2.0.1", + "@types/react": "^16.0.5", + "@types/react-dom": "^15.5.4", + "@types/request": "^2.0.3", "@types/should": "^11.2.0", "angular2-template-loader": "^0.6.2", "awesome-typescript-loader": "^3.2.3", "bootstrap": "^3.3.7", "css-loader": "^0.28.5", - "eslint": "^4.4.1", "extract-text-webpack-plugin": "^3.0.0", "file-loader": "^0.11.2", "html-loader": "^0.5.1", "html-webpack-plugin": "^2.30.1", + "istanbul": "^0.4.5", "jquery": "^3.2.1", "mocha": "^3.5.0", + "mocha-jenkins-reporter": "^0.3.9", "should": "^11.2.1", "source-map-loader": "^0.2.1", "style-loader": "^0.18.2", - "ts-mocha": "^1.0.3", "tsc-watch": "^1.0.7", - "typescript": "^2.4.2", + "typescript": "^2.5.1", "webpack": "^3.5.5", "webpack-merge": "^4.1.0" } diff --git a/src/admin/app/add-cache.component.ts b/src/admin/app/add-cache.component.ts index 4b4dc39f6898b7a54208e4a42eafb606e29c329b..44c2200955700551d2e9ab056e3a633eb9d04145 100644 --- a/src/admin/app/add-cache.component.ts +++ b/src/admin/app/add-cache.component.ts @@ -1,4 +1,4 @@ -import { Component, Output, EventEmitter } from '@angular/core'; +import { Component, Input, Output, EventEmitter } from '@angular/core'; import { CacheService } from './cache.service'; import { Cache } from './cache'; @@ -10,7 +10,7 @@ import { Cache } from './cache'; export class AddCacheComponent { name: string; apiEndPoint: string; - proxyUrl: string; + @Input () proxyUrl: string; @Output() onAdd: EventEmitter<Cache> = new EventEmitter(); constructor(private cacheService: CacheService) { } diff --git a/src/admin/app/app.component.html b/src/admin/app/app.component.html index 2673a44aada26324f840717cfe34b7398bbe155a..65b1417c43e1500137cf99c94b1487bf88ceca15 100644 --- a/src/admin/app/app.component.html +++ b/src/admin/app/app.component.html @@ -4,7 +4,7 @@ <p>shows all cache caches available.</p> </div> </div> -<add-cache (onAdd)="addCache($event)"></add-cache> +<add-cache [proxyUrl]="config.proxyUrl + config.proxyPath" (onAdd)="addCache($event)"></add-cache> <div class="container"> - <cache *ngFor="let item of caches" [data]="item" (onDelete)="removeCache($event)"></cache> + <cache *ngFor="let item of caches" [data]="item" [proxyUrl]="config.proxyUrl + config.proxyPath" (onDelete)="removeCache($event)"></cache> </div> \ No newline at end of file diff --git a/src/admin/app/app.component.ts b/src/admin/app/app.component.ts index e5947016804883c7a3d8a13e8f6e1ed5823c1847..8a0826ca4051c34848f1be465aa891bd7e38f338 100644 --- a/src/admin/app/app.component.ts +++ b/src/admin/app/app.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, enableProdMode } from '@angular/core'; -import { Cache } from './cache'; +import { Cache, Config } from './cache'; import { CacheService } from './cache.service'; @Component({ @@ -12,6 +12,7 @@ import { CacheService } from './cache.service'; export class AppComponent implements OnInit { caches: Cache[]; + config: Config = new Config(); constructor(private cacheService: CacheService) { } @@ -20,6 +21,10 @@ export class AppComponent implements OnInit { this.caches = result; }) + this.cacheService.getConfig().then((result) => { + this.config = result; + }) + } addCache(cache: Cache) { diff --git a/src/admin/app/cache.component.html b/src/admin/app/cache.component.html index db7f20b098531c4860c3c0c8bd7acbb0c672e452..9b4ab50156ed136b99a5848c8b24364851f5595e 100644 --- a/src/admin/app/cache.component.html +++ b/src/admin/app/cache.component.html @@ -18,7 +18,7 @@ </div> <div class="col-md-6"> <label>Proxy-Endpoint:</label> - <pre>{{data.proxyEndPoint}}</pre> + <pre>{{proxyUrl}}{{data.name}}/</pre> </div> </div> <div class="row"> @@ -31,7 +31,7 @@ </div> <div class="row"> <div class="col-md-12"> - <cache-details [cache]="data.cache" [proxyEndPoint]="data.proxyEndPoint" [name]="data.name"></cache-details> + <cache-details [cache]="data.cache" [proxyEndPoint]="proxyUrl + data.name + '/'" [name]="data.name"></cache-details> </div> </div> </div> diff --git a/src/admin/app/cache.component.ts b/src/admin/app/cache.component.ts index 4e46d7087636139dc054c2cb6fe68b5abb789993..93d0b100cac2129c18b22e98b90569bf761ac7a6 100644 --- a/src/admin/app/cache.component.ts +++ b/src/admin/app/cache.component.ts @@ -11,6 +11,7 @@ import { Cache } from './cache'; export class CacheComponent { @Input() data: Cache; + @Input() proxyUrl: string @Output() onDelete: EventEmitter<string> = new EventEmitter(); constructor(private cacheService: CacheService, private appComponent: AppComponent) { } diff --git a/src/admin/app/cache.service.ts b/src/admin/app/cache.service.ts index 647fda8bbe1003c190c72fb89bfd51170e2066ef..c6408dc2dd8946f98fb97804b7a4a2366d946e40 100644 --- a/src/admin/app/cache.service.ts +++ b/src/admin/app/cache.service.ts @@ -1,46 +1,51 @@ import { Component, Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; -import { Cache } from './cache'; -import { CacheDetails } from './cache'; +import { CacheDetails, Cache, Config } from './cache'; @Injectable() export class CacheService { constructor(private http: HttpClient) { } + getConfig(): Promise<Config> { + return new Promise<Config>((resolve, reject) => { + this.http.get('api/config').subscribe(resolve.bind(this)); + }); + } + getCaches(): Promise<Cache[]> { return new Promise<Cache[]>((resolve, reject) => { - this.http.get('/api/list/cache').subscribe(resolve.bind(this)); + this.http.get('api/list/cache').subscribe(resolve.bind(this)); }); } addCache(name: string, params: { apiEndPoint: string, cacheOptions: { [key: string]: string } }): Promise<Cache> { return new Promise<Cache>((resolve, reject) => { - this.http.post(`/api/add/cache/${name}`, params).subscribe(resolve.bind(this)); + this.http.post(`api/add/cache/${name}`, params).subscribe(resolve.bind(this)); }) } deleteCache(name: string): Promise<boolean> { return new Promise<boolean>((resolve, reject) => { - this.http.get(`/api/delete/cache/${name}`).subscribe(resolve.bind(this)); + this.http.get(`api/delete/cache/${name}`).subscribe(resolve.bind(this)); }); } flushCache(name: string): Promise<Cache> { return new Promise<Cache>((resolve, reject) => { - this.http.get(`/api/flush/cache/${name}`).subscribe(resolve.bind(this)); + this.http.get(`api/flush/cache/${name}`).subscribe(resolve.bind(this)); }); } deleteValue(name: string, hash: string): Promise<boolean> { return new Promise<boolean>((resolve, reject) => { - this.http.get(`/api/delete/cache/${name}/key/${hash}`).subscribe(resolve.bind(this)); + this.http.get(`api/delete/cache/${name}/key/${hash}`).subscribe(resolve.bind(this)); }); } refreshValue(name: string, hash: string): Promise<CacheDetails> { return new Promise<CacheDetails>((resolve, reject) => { - this.http.get(`/api/refresh/cache/${name}/key/${hash}`).subscribe(resolve.bind(this)); + this.http.get(`api/refresh/cache/${name}/key/${hash}`).subscribe(resolve.bind(this)); }); } } \ No newline at end of file diff --git a/src/admin/app/cache.ts b/src/admin/app/cache.ts index ee6005bad2886fcd7267824372e90a291473a5c4..81bac93f086360331d122711b0c6bdbe37c05b34 100644 --- a/src/admin/app/cache.ts +++ b/src/admin/app/cache.ts @@ -33,4 +33,16 @@ export class CacheDetails { uriPath: string; contentType: string; size: number; +} + +export class Config { + storagePath: string; + proxyPath: string; + proxyUrl: string; + defaultTtl: number; + defaultCheckPeriod: number; + defaultArrayValueSize: number; + defaultObjectValueSize: number; + autosaveInterval: number; + registerName: string; } \ No newline at end of file diff --git a/src/admin/index.html b/src/admin/index.html index 717f296ca86fc1b6fc34ac794dd243ea68ec9294..c720f7760c385a9f183f4731fb6ce87e3f9e6e49 100644 --- a/src/admin/index.html +++ b/src/admin/index.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html> <head> - <title>Angular Tour of Heroes</title> + <title>dacap :: Dynamic And Caching Api Proxy</title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> diff --git a/src/cache.ts b/src/cache.ts index e4fe40e258a8f6050035a006ee625a23f951babf..b8c110b19608e5b6b04a9185d39eb674a5527874 100644 --- a/src/cache.ts +++ b/src/cache.ts @@ -40,7 +40,6 @@ export interface CacheDetails { export interface CacheInfo { name: string, apiEndPoint: string, - proxyEndPoint: string, cacheOptions: NodeCache.Options, cacheStats: NodeCache.Stats, cache: CacheDetails[], @@ -107,17 +106,16 @@ export class Register { delete this.cacheRegister[name]; } - getInfo = (proxyUrl: string, name?: string): CacheInfo|CacheInfo[] => { - return (name) ? this._getInfo(proxyUrl, name) : Object.keys(this.cacheRegister).map((key): CacheInfo => { - return this._getInfo(proxyUrl, key); + getInfo = (name?: string): CacheInfo|CacheInfo[] => { + return (name) ? this._getInfo(name) : Object.keys(this.cacheRegister).map((key): CacheInfo => { + return this._getInfo(key); }); } - private _getInfo(proxyUrl: string, name: string): CacheInfo { + private _getInfo(name: string): CacheInfo { return { name: name, apiEndPoint: this.cacheRegister[name].getEndpoint().toString(), - proxyEndPoint: proxyUrl + name + '/', cacheOptions: this.cacheRegister[name].getCache().options, cacheStats: this.cacheRegister[name].getCache().getStats(), cache: <CacheDetails[]>this.cacheRegister[name].getDetails() diff --git a/src/server.ts b/src/server.ts index 3717e5d9a51c08eba54a3cc6d3deb62e0301442d..20ffe3960f743174f438a27bd787c64d083b315c 100644 --- a/src/server.ts +++ b/src/server.ts @@ -11,23 +11,24 @@ export class Server { private register: cache.Register; private expressApp: express.Application; - constructor(private storagePath: string, - private proxyPath: string, - private proxyUrl: string, - private defaultTtl: number, - private defaultCheckPeriod: number, - private defaultArrayValueSize: number, - private defaultObjectValueSize: number, - private autosaveInterval: number, - private registerName: string) { - + constructor(private config: { + storagePath: string, + proxyPath: string, + proxyUrl: string, + defaultTtl: number, + defaultCheckPeriod: number, + defaultArrayValueSize: number, + defaultObjectValueSize: number, + autosaveInterval: number, + registerName: string + }) { this._init(); } private _init() { - this.register = new cache.Register(this.storagePath, this.registerName); + this.register = new cache.Register(this.config.storagePath, this.config.registerName); this.register.restore(); - setTimeout(this.register.save, this.autosaveInterval * 1000); + setTimeout(this.register.save, this.config.autosaveInterval * 1000); this.expressApp = express(); this.expressApp.get(/favicon.ico/, (req, res, next) => { @@ -37,27 +38,31 @@ export class Server { this.expressApp.use(compression()); this.expressApp.use(bodyparser.json()); - this.expressApp.post('/api/add/cache/:name', (req, res, next) => { + this.expressApp.get('/admin/api/config', (req, res, next) => { + return res.json(this.config); + }); + + this.expressApp.post('/admin/api/add/cache/:name', (req, res, next) => { if (!req.body || !req.body.apiEndPoint) return res.status(400).send(`you need to specify at least an url`); if (this.register.has(req.body.name)) return res.send(`already registered endpoint "${req.params.name}"`); this.register.add(req.params.name, req.body.apiEndPoint, { - stdTTL: req.body.cacheOptions.ttl || this.defaultTtl, - checkperiod: req.body.cacheOptions.checkPeriod || this.defaultCheckPeriod, - objectValueSize: req.body.cacheOptions.objectValueSize || this.defaultObjectValueSize, - arrayValueSize: req.body.cacheOptions.arrayValueSize || this.defaultArrayValueSize + stdTTL: req.body.cacheOptions.ttl || this.config.defaultTtl, + checkperiod: req.body.cacheOptions.checkPeriod || this.config.defaultCheckPeriod, + objectValueSize: req.body.cacheOptions.objectValueSize || this.config.defaultObjectValueSize, + arrayValueSize: req.body.cacheOptions.arrayValueSize || this.config.defaultArrayValueSize }); - res.json(this.register.getInfo(this.proxyUrl + this.proxyPath, req.params.name)); + res.json(this.register.getInfo(req.params.name)); }); - this.expressApp.get('/api/list/cache', async (req, res, next) => { + this.expressApp.get('/admin/api/list/cache', async (req, res, next) => { try { - res.json(this.register.getInfo(this.proxyUrl + this.proxyPath)); + res.json(this.register.getInfo()); } catch (err) { next(err); } }); - this.expressApp.get('/api/delete/cache/:name', (req, res, next) => { + this.expressApp.get('/admin/api/delete/cache/:name', (req, res, next) => { try { this.register.delete(req.params.name); res.json({}); @@ -66,17 +71,17 @@ export class Server { } }) - this.expressApp.get('/api/flush/cache/:name', (req, res, next) => { + this.expressApp.get('/admin/api/flush/cache/:name', (req, res, next) => { try { const cache = this.register.get(req.params.name) cache.flush(); - res.json(this.register.getInfo(this.proxyUrl + this.proxyPath, req.params.name)); + res.json(this.register.getInfo(req.params.name)); } catch (err) { next(err); } }); - this.expressApp.get('/api/delete/cache/:name/key/:hash', (req, res, next) => { + this.expressApp.get('/admin/api/delete/cache/:name/key/:hash', (req, res, next) => { try { const cache = this.register.get(req.params.name) cache.del(req.params.hash); @@ -86,7 +91,7 @@ export class Server { } }) - this.expressApp.get('/api/refresh/cache/:name/key/:hash', async (req, res, next) => { + this.expressApp.get('/admin/api/refresh/cache/:name/key/:hash', async (req, res, next) => { try { const cache = this.register.get(req.params.name); const value = cache.getCache().get(req.params.hash); @@ -99,10 +104,10 @@ export class Server { this.expressApp.use('/admin/', express.static(path.resolve(__dirname, '..', 'public'))); - this.expressApp.use(this.proxyPath, cache.Middleware(this.register)); + this.expressApp.use(this.config.proxyPath, cache.Middleware(this.register)); } listen(port: number, cb) { - return this.expressApp.listen(port, cb); + this.expressApp.listen(port, cb); } } \ No newline at end of file diff --git a/test/cache.js b/test/cache.js new file mode 100644 index 0000000000000000000000000000000000000000..df2f88d10712a084aacd92e6fd2ce0635c59fcb8 --- /dev/null +++ b/test/cache.js @@ -0,0 +1,11 @@ +const path = require('path'); + +const Middleware = require('../dist/cache').Middleware; +const Register = require('../dist/cache').Register; +const Cache = require('../dist/cache').Cache; + +describe('Middleware', () => { + it('should be a function', (done) => { + done(); + }); +}) \ No newline at end of file diff --git a/test/cache.ts b/test/cache.ts deleted file mode 100644 index fa1dd33c734f6e9f3036518a7b45e6578fa28b0d..0000000000000000000000000000000000000000 --- a/test/cache.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {Register, Cache, Middleware} from '../src/cache'; -import * as path from 'path'; -import 'should'; - -describe('register', () => { - it('should create an instance', (done) => { - new Register(path.resolve(__dirname, '..', '.tmp'), 'foobar'); - done(); - }) -}); -describe('cache', () => { - it('should create an instance', (done) => { - new Cache(); - done(); - }); -}) \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index e9fe16c950d94d83e5e68a1fb6026ecb0902759a..1d467e6ee29a1edda39a4d753e2d390c7c010bd4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,11 @@ { "compilerOptions": { - "module": "commonjs", - "target": "es6", - "noImplicitAny": false, - "outDir": "dist" + "module": "commonjs", + "target": "es6", + "noImplicitAny": false, + "outDir": "dist" }, - "include":[ "src/*"], + "include": ["src/*"], "exclude": [ "admin" ] diff --git a/webpack.common.js b/webpack.common.js index 7ff98aa1b874a60847b4205623e242e9f03a76d8..dde605931d752d785b81c1c9e7d48dfc3e0cb444 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -12,7 +12,7 @@ module.exports = { output: { filename: '[name].js', path: __dirname + '/public', - publicPath: '/admin/' + publicPath: '' }, resolve: {