├── .DEREK.yml ├── .github └── ISSUE_TEMPLATE.md ├── .gitignore ├── LICENSE ├── README.md ├── meme.jpg ├── mememachine.yml └── mememachine ├── Dockerfile ├── function ├── handler.js └── package.json ├── index.js ├── package-lock.json └── package.json /.DEREK.yml: -------------------------------------------------------------------------------- 1 | redirect: https://raw.githubusercontent.com/openfaas/faas/master/.DEREK.yml 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Expected Behaviour 4 | 5 | 6 | 7 | ## Current Behaviour 8 | 9 | 10 | 11 | ## Possible Solution 12 | 13 | 14 | 15 | ## Steps to Reproduce (for bugs) 16 | 17 | 18 | 1. 19 | 2. 20 | 3. 21 | 4. 22 | 23 | ## Context 24 | 25 | 26 | 27 | ## Your Environment 28 | 29 | * FaaS-CLI version ( Full output from: `faas-cli version` ): 30 | 31 | * Docker version `docker version` (e.g. Docker 18.06 ): 32 | 33 | * Are you using Docker Swarm or Kubernetes (FaaS-netes)? 34 | 35 | * Operating System and version (e.g. Linux, Windows, MacOS): 36 | 37 | * How much RAM is available on your nodes? 38 | 39 | * Are you running on x86_64 or ARM? 40 | 41 | * Link to your project or a code example to reproduce issue: 42 | 43 | * Please also follow the [troubleshooting guide](https://github.com/openfaas/faas/blob/master/guide/troubleshooting.md) and paste in any other diagnostic information you have: 44 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | template 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Finnian Anderson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OpenFaaS mememachine 2 | 3 | Turn any image into a meme 4 | 5 | ![](https://github.com/developius/openfaas-mememachine/raw/master/meme.jpg) 6 | 7 | # Getting started 8 | You can deploy in just one step thanks to the remote yaml feature of the [OpenFaaS CLI](https://github.com/openfaas/faas-cli)! 9 | 10 | ``` 11 | $ faas-cli deploy -f https://raw.githubusercontent.com/faas-and-furious/openfaas-mememachine/master/mememachine.yml -e read_timeout=60,write_timeout=60 12 | ``` 13 | 14 | # Try it out 15 | 16 | ``` 17 | $ echo '{"image": "http://vignette4.wikia.nocookie.net/factpile/images/6/66/Lotr-boromir-1280jpg-b6a4d5_1280w.jpg","top": "ONE DOES NOT SIMPLY JUST","bottom": "DEPLOY TO PRODUCTION"}' | faas-cli invoke mememachine > meme.jpg 18 | ``` 19 | -------------------------------------------------------------------------------- /meme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/faas-and-furious/openfaas-mememachine/56b8770eb0dc239a7e0c87c6d4ae8a3e2eccac44/meme.jpg -------------------------------------------------------------------------------- /mememachine.yml: -------------------------------------------------------------------------------- 1 | provider: 2 | name: faas 3 | gateway: http://localhost:8080 4 | 5 | functions: 6 | mememachine: 7 | lang: Dockerfile 8 | handler: ./mememachine 9 | image: developius/faas-mememachine:0.2 10 | -------------------------------------------------------------------------------- /mememachine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:6.11.2-alpine 2 | 3 | # Alternatively use ADD https:// (which will not be cached by Docker builder) 4 | RUN apk --no-cache add curl \ 5 | && echo "Pulling watchdog binary from Github." \ 6 | && curl -sSL https://github.com/openfaas/faas/releases/download/0.6.1/fwatchdog > /usr/bin/fwatchdog \ 7 | && chmod +x /usr/bin/fwatchdog \ 8 | && apk del curl --no-cache 9 | 10 | WORKDIR /root/ 11 | 12 | # Turn down the verbosity to default level. 13 | ENV NPM_CONFIG_LOGLEVEL warn 14 | 15 | # Wrapper/boot-strapper 16 | COPY package.json . 17 | RUN npm i 18 | 19 | # Function 20 | COPY index.js . 21 | RUN mkdir -p ./root/function 22 | 23 | COPY function/*.json ./function/ 24 | WORKDIR /root/function 25 | RUN npm i || : 26 | WORKDIR /root/ 27 | COPY function function 28 | WORKDIR /root/function 29 | 30 | WORKDIR /root/ 31 | 32 | ENV cgi_headers="true" 33 | 34 | ENV fprocess="node index.js" 35 | 36 | HEALTHCHECK --interval=1s CMD [ -e /tmp/.lock ] || exit 1 37 | 38 | CMD ["fwatchdog"] 39 | -------------------------------------------------------------------------------- /mememachine/function/handler.js: -------------------------------------------------------------------------------- 1 | const Jimp = require('jimp') 2 | const request = require('request') 3 | const fs = require('fs') 4 | const path = require('path') 5 | const os = require('os') 6 | 7 | module.exports = (req, callback) => { 8 | req = JSON.parse(req) 9 | 10 | let filename = os.tmpdir() + '/meme-' + Date.now() + path.basename(req.image) 11 | let file = fs.createWriteStream(filename) 12 | 13 | const stream = request(req.image).pipe(file) 14 | let loadedFile 15 | 16 | stream.on('finish', () => { 17 | Jimp.read(filename) 18 | .then(image => { 19 | loadedFile = image 20 | return Jimp.loadFont(Jimp.FONT_SANS_64_WHITE) 21 | }).then(font => { 22 | loadedFile 23 | .print(font, 10, 10, req.top) 24 | .print(font, 10, loadedFile.bitmap.height - 200, req.bottom) 25 | .write(filename) 26 | }).then(() => { 27 | fs.readFile(filename, (err, data) => { 28 | if (err) return callback(err) 29 | else { 30 | callback(undefined, data) 31 | fs.unlink(filename) 32 | } 33 | }) 34 | }) 35 | }) 36 | } 37 | -------------------------------------------------------------------------------- /mememachine/function/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "function", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "handler.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "jimp": "^0.2.28", 14 | "request": "^2.83.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /mememachine/index.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) Alex Ellis 2017. All rights reserved. 2 | // Licensed under the MIT license. See LICENSE file in the project root for full license information. 3 | 4 | const getStdin = require('get-stdin') 5 | 6 | const handler = require('./function/handler') 7 | 8 | getStdin().then(val => { 9 | handler(val, (err, res) => { 10 | if (err) return console.error(err) 11 | 12 | if (isArray(res) || isObject(res)) return console.log(JSON.stringify(res)) 13 | 14 | process.stdout.write(res) 15 | }) 16 | }).catch(console.error) 17 | 18 | const isArray = a => !!a && a.constructor === Array 19 | 20 | const isObject = a => !!a && a.constructor === Object 21 | -------------------------------------------------------------------------------- /mememachine/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "function", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ajv": { 8 | "version": "5.2.3", 9 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", 10 | "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", 11 | "requires": { 12 | "co": "4.6.0", 13 | "fast-deep-equal": "1.0.0", 14 | "json-schema-traverse": "0.3.1", 15 | "json-stable-stringify": "1.0.1" 16 | } 17 | }, 18 | "asn1": { 19 | "version": "0.2.3", 20 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 21 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 22 | }, 23 | "assert-plus": { 24 | "version": "1.0.0", 25 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 26 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 27 | }, 28 | "asynckit": { 29 | "version": "0.4.0", 30 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 31 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 32 | }, 33 | "aws-sign2": { 34 | "version": "0.7.0", 35 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 36 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 37 | }, 38 | "aws4": { 39 | "version": "1.6.0", 40 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 41 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" 42 | }, 43 | "bcrypt-pbkdf": { 44 | "version": "1.0.1", 45 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 46 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 47 | "optional": true, 48 | "requires": { 49 | "tweetnacl": "0.14.5" 50 | } 51 | }, 52 | "bignumber.js": { 53 | "version": "2.4.0", 54 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", 55 | "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=" 56 | }, 57 | "bmp-js": { 58 | "version": "0.0.3", 59 | "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.3.tgz", 60 | "integrity": "sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=" 61 | }, 62 | "boom": { 63 | "version": "4.3.1", 64 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 65 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 66 | "requires": { 67 | "hoek": "4.2.0" 68 | } 69 | }, 70 | "buffer-equal": { 71 | "version": "0.0.1", 72 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", 73 | "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" 74 | }, 75 | "caseless": { 76 | "version": "0.12.0", 77 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 78 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 79 | }, 80 | "co": { 81 | "version": "4.6.0", 82 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 83 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 84 | }, 85 | "combined-stream": { 86 | "version": "1.0.5", 87 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 88 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 89 | "requires": { 90 | "delayed-stream": "1.0.0" 91 | } 92 | }, 93 | "core-util-is": { 94 | "version": "1.0.2", 95 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 96 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 97 | }, 98 | "cryptiles": { 99 | "version": "3.1.2", 100 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 101 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 102 | "requires": { 103 | "boom": "5.2.0" 104 | }, 105 | "dependencies": { 106 | "boom": { 107 | "version": "5.2.0", 108 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 109 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 110 | "requires": { 111 | "hoek": "4.2.0" 112 | } 113 | } 114 | } 115 | }, 116 | "dashdash": { 117 | "version": "1.14.1", 118 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 119 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 120 | "requires": { 121 | "assert-plus": "1.0.0" 122 | } 123 | }, 124 | "delayed-stream": { 125 | "version": "1.0.0", 126 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 127 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 128 | }, 129 | "dom-walk": { 130 | "version": "0.1.1", 131 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", 132 | "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" 133 | }, 134 | "ecc-jsbn": { 135 | "version": "0.1.1", 136 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 137 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 138 | "optional": true, 139 | "requires": { 140 | "jsbn": "0.1.1" 141 | } 142 | }, 143 | "es6-promise": { 144 | "version": "3.3.1", 145 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", 146 | "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" 147 | }, 148 | "exif-parser": { 149 | "version": "0.1.12", 150 | "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", 151 | "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" 152 | }, 153 | "extend": { 154 | "version": "3.0.1", 155 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 156 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 157 | }, 158 | "extsprintf": { 159 | "version": "1.3.0", 160 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 161 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 162 | }, 163 | "fast-deep-equal": { 164 | "version": "1.0.0", 165 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 166 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" 167 | }, 168 | "file-type": { 169 | "version": "3.9.0", 170 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", 171 | "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" 172 | }, 173 | "for-each": { 174 | "version": "0.3.2", 175 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz", 176 | "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=", 177 | "requires": { 178 | "is-function": "1.0.1" 179 | } 180 | }, 181 | "forever-agent": { 182 | "version": "0.6.1", 183 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 184 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 185 | }, 186 | "form-data": { 187 | "version": "2.3.1", 188 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", 189 | "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", 190 | "requires": { 191 | "asynckit": "0.4.0", 192 | "combined-stream": "1.0.5", 193 | "mime-types": "2.1.17" 194 | } 195 | }, 196 | "getpass": { 197 | "version": "0.1.7", 198 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 199 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 200 | "requires": { 201 | "assert-plus": "1.0.0" 202 | } 203 | }, 204 | "global": { 205 | "version": "4.3.2", 206 | "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", 207 | "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", 208 | "requires": { 209 | "min-document": "2.19.0", 210 | "process": "0.5.2" 211 | } 212 | }, 213 | "har-schema": { 214 | "version": "2.0.0", 215 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 216 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 217 | }, 218 | "har-validator": { 219 | "version": "5.0.3", 220 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 221 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 222 | "requires": { 223 | "ajv": "5.2.3", 224 | "har-schema": "2.0.0" 225 | } 226 | }, 227 | "hawk": { 228 | "version": "6.0.2", 229 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 230 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 231 | "requires": { 232 | "boom": "4.3.1", 233 | "cryptiles": "3.1.2", 234 | "hoek": "4.2.0", 235 | "sntp": "2.0.2" 236 | } 237 | }, 238 | "hoek": { 239 | "version": "4.2.0", 240 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 241 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 242 | }, 243 | "http-signature": { 244 | "version": "1.2.0", 245 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 246 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 247 | "requires": { 248 | "assert-plus": "1.0.0", 249 | "jsprim": "1.4.1", 250 | "sshpk": "1.13.1" 251 | } 252 | }, 253 | "ip-regex": { 254 | "version": "1.0.3", 255 | "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", 256 | "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=" 257 | }, 258 | "is-function": { 259 | "version": "1.0.1", 260 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", 261 | "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" 262 | }, 263 | "is-typedarray": { 264 | "version": "1.0.0", 265 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 266 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 267 | }, 268 | "isstream": { 269 | "version": "0.1.2", 270 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 271 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 272 | }, 273 | "jimp": { 274 | "version": "0.2.28", 275 | "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.28.tgz", 276 | "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", 277 | "requires": { 278 | "bignumber.js": "2.4.0", 279 | "bmp-js": "0.0.3", 280 | "es6-promise": "3.3.1", 281 | "exif-parser": "0.1.12", 282 | "file-type": "3.9.0", 283 | "jpeg-js": "0.2.0", 284 | "load-bmfont": "1.3.0", 285 | "mime": "1.4.1", 286 | "mkdirp": "0.5.1", 287 | "pixelmatch": "4.0.2", 288 | "pngjs": "3.3.0", 289 | "read-chunk": "1.0.1", 290 | "request": "2.83.0", 291 | "stream-to-buffer": "0.1.0", 292 | "tinycolor2": "1.4.1", 293 | "url-regex": "3.2.0" 294 | } 295 | }, 296 | "jpeg-js": { 297 | "version": "0.2.0", 298 | "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.2.0.tgz", 299 | "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=" 300 | }, 301 | "jsbn": { 302 | "version": "0.1.1", 303 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 304 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 305 | "optional": true 306 | }, 307 | "json-schema": { 308 | "version": "0.2.3", 309 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 310 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 311 | }, 312 | "json-schema-traverse": { 313 | "version": "0.3.1", 314 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 315 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 316 | }, 317 | "json-stable-stringify": { 318 | "version": "1.0.1", 319 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 320 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 321 | "requires": { 322 | "jsonify": "0.0.0" 323 | } 324 | }, 325 | "json-stringify-safe": { 326 | "version": "5.0.1", 327 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 328 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 329 | }, 330 | "jsonify": { 331 | "version": "0.0.0", 332 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 333 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" 334 | }, 335 | "jsprim": { 336 | "version": "1.4.1", 337 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 338 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 339 | "requires": { 340 | "assert-plus": "1.0.0", 341 | "extsprintf": "1.3.0", 342 | "json-schema": "0.2.3", 343 | "verror": "1.10.0" 344 | } 345 | }, 346 | "load-bmfont": { 347 | "version": "1.3.0", 348 | "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.3.0.tgz", 349 | "integrity": "sha1-u358cQ3mvK/LE8s7jIHgwBMey8k=", 350 | "requires": { 351 | "buffer-equal": "0.0.1", 352 | "mime": "1.4.1", 353 | "parse-bmfont-ascii": "1.0.6", 354 | "parse-bmfont-binary": "1.0.6", 355 | "parse-bmfont-xml": "1.1.3", 356 | "xhr": "2.4.0", 357 | "xtend": "4.0.1" 358 | } 359 | }, 360 | "mime": { 361 | "version": "1.4.1", 362 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 363 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 364 | }, 365 | "mime-db": { 366 | "version": "1.30.0", 367 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 368 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 369 | }, 370 | "mime-types": { 371 | "version": "2.1.17", 372 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 373 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 374 | "requires": { 375 | "mime-db": "1.30.0" 376 | } 377 | }, 378 | "min-document": { 379 | "version": "2.19.0", 380 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 381 | "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", 382 | "requires": { 383 | "dom-walk": "0.1.1" 384 | } 385 | }, 386 | "minimist": { 387 | "version": "0.0.8", 388 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 389 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 390 | }, 391 | "mkdirp": { 392 | "version": "0.5.1", 393 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 394 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 395 | "requires": { 396 | "minimist": "0.0.8" 397 | } 398 | }, 399 | "oauth-sign": { 400 | "version": "0.8.2", 401 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 402 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 403 | }, 404 | "parse-bmfont-ascii": { 405 | "version": "1.0.6", 406 | "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", 407 | "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" 408 | }, 409 | "parse-bmfont-binary": { 410 | "version": "1.0.6", 411 | "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", 412 | "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" 413 | }, 414 | "parse-bmfont-xml": { 415 | "version": "1.1.3", 416 | "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.3.tgz", 417 | "integrity": "sha1-1rZqNxr9OcUAfZ8O6yYqTyzOe3w=", 418 | "requires": { 419 | "xml-parse-from-string": "1.0.1", 420 | "xml2js": "0.4.19" 421 | } 422 | }, 423 | "parse-headers": { 424 | "version": "2.0.1", 425 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", 426 | "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", 427 | "requires": { 428 | "for-each": "0.3.2", 429 | "trim": "0.0.1" 430 | } 431 | }, 432 | "performance-now": { 433 | "version": "2.1.0", 434 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 435 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 436 | }, 437 | "pixelmatch": { 438 | "version": "4.0.2", 439 | "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", 440 | "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", 441 | "requires": { 442 | "pngjs": "3.3.0" 443 | } 444 | }, 445 | "pngjs": { 446 | "version": "3.3.0", 447 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.0.tgz", 448 | "integrity": "sha1-H1cwwYnJSTO4G+2iqy+OKFUmOo8=" 449 | }, 450 | "process": { 451 | "version": "0.5.2", 452 | "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", 453 | "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" 454 | }, 455 | "punycode": { 456 | "version": "1.4.1", 457 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 458 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 459 | }, 460 | "qs": { 461 | "version": "6.5.1", 462 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 463 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 464 | }, 465 | "read-chunk": { 466 | "version": "1.0.1", 467 | "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", 468 | "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=" 469 | }, 470 | "request": { 471 | "version": "2.83.0", 472 | "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", 473 | "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", 474 | "requires": { 475 | "aws-sign2": "0.7.0", 476 | "aws4": "1.6.0", 477 | "caseless": "0.12.0", 478 | "combined-stream": "1.0.5", 479 | "extend": "3.0.1", 480 | "forever-agent": "0.6.1", 481 | "form-data": "2.3.1", 482 | "har-validator": "5.0.3", 483 | "hawk": "6.0.2", 484 | "http-signature": "1.2.0", 485 | "is-typedarray": "1.0.0", 486 | "isstream": "0.1.2", 487 | "json-stringify-safe": "5.0.1", 488 | "mime-types": "2.1.17", 489 | "oauth-sign": "0.8.2", 490 | "performance-now": "2.1.0", 491 | "qs": "6.5.1", 492 | "safe-buffer": "5.1.1", 493 | "stringstream": "0.0.5", 494 | "tough-cookie": "2.3.3", 495 | "tunnel-agent": "0.6.0", 496 | "uuid": "3.1.0" 497 | } 498 | }, 499 | "safe-buffer": { 500 | "version": "5.1.1", 501 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 502 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 503 | }, 504 | "sax": { 505 | "version": "1.2.4", 506 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 507 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 508 | }, 509 | "sntp": { 510 | "version": "2.0.2", 511 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", 512 | "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", 513 | "requires": { 514 | "hoek": "4.2.0" 515 | } 516 | }, 517 | "sshpk": { 518 | "version": "1.13.1", 519 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 520 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 521 | "requires": { 522 | "asn1": "0.2.3", 523 | "assert-plus": "1.0.0", 524 | "bcrypt-pbkdf": "1.0.1", 525 | "dashdash": "1.14.1", 526 | "ecc-jsbn": "0.1.1", 527 | "getpass": "0.1.7", 528 | "jsbn": "0.1.1", 529 | "tweetnacl": "0.14.5" 530 | } 531 | }, 532 | "stream-to": { 533 | "version": "0.2.2", 534 | "resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz", 535 | "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=" 536 | }, 537 | "stream-to-buffer": { 538 | "version": "0.1.0", 539 | "resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz", 540 | "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", 541 | "requires": { 542 | "stream-to": "0.2.2" 543 | } 544 | }, 545 | "stringstream": { 546 | "version": "0.0.5", 547 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 548 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 549 | }, 550 | "tinycolor2": { 551 | "version": "1.4.1", 552 | "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", 553 | "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" 554 | }, 555 | "tough-cookie": { 556 | "version": "2.3.3", 557 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 558 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 559 | "requires": { 560 | "punycode": "1.4.1" 561 | } 562 | }, 563 | "trim": { 564 | "version": "0.0.1", 565 | "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", 566 | "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" 567 | }, 568 | "tunnel-agent": { 569 | "version": "0.6.0", 570 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 571 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 572 | "requires": { 573 | "safe-buffer": "5.1.1" 574 | } 575 | }, 576 | "tweetnacl": { 577 | "version": "0.14.5", 578 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 579 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 580 | "optional": true 581 | }, 582 | "url-regex": { 583 | "version": "3.2.0", 584 | "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", 585 | "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", 586 | "requires": { 587 | "ip-regex": "1.0.3" 588 | } 589 | }, 590 | "uuid": { 591 | "version": "3.1.0", 592 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 593 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 594 | }, 595 | "verror": { 596 | "version": "1.10.0", 597 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 598 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 599 | "requires": { 600 | "assert-plus": "1.0.0", 601 | "core-util-is": "1.0.2", 602 | "extsprintf": "1.3.0" 603 | } 604 | }, 605 | "xhr": { 606 | "version": "2.4.0", 607 | "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.4.0.tgz", 608 | "integrity": "sha1-4W5mpF+GmGHu76tBbV7/ci3ECZM=", 609 | "requires": { 610 | "global": "4.3.2", 611 | "is-function": "1.0.1", 612 | "parse-headers": "2.0.1", 613 | "xtend": "4.0.1" 614 | } 615 | }, 616 | "xml-parse-from-string": { 617 | "version": "1.0.1", 618 | "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", 619 | "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" 620 | }, 621 | "xml2js": { 622 | "version": "0.4.19", 623 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", 624 | "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", 625 | "requires": { 626 | "sax": "1.2.4", 627 | "xmlbuilder": "9.0.4" 628 | } 629 | }, 630 | "xmlbuilder": { 631 | "version": "9.0.4", 632 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", 633 | "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=" 634 | }, 635 | "xtend": { 636 | "version": "4.0.1", 637 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 638 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 639 | } 640 | } 641 | } 642 | -------------------------------------------------------------------------------- /mememachine/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "NodejsBase", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "faas_index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "get-stdin": "^5.0.1" 14 | } 15 | } 16 | --------------------------------------------------------------------------------