├── .gitignore ├── README.md ├── functions └── pdf.ts ├── layer └── nodejs │ ├── package.json │ └── yarn.lock ├── package.json ├── serverless.yml ├── tsconfig.json ├── webpack.config.js ├── yarn-error.log └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .serverless 2 | node_modules 3 | .webpack 4 | pdfkit-layer.zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # serverless-lambda-pdfkit 2 | Install the dependencies 3 | ``` 4 | yarn install 5 | ``` 6 | Run locally offline 7 | ``` 8 | yarn serverless 9 | ``` 10 | Build the layer 11 | ``` 12 | pushd layer && yarn --cwd nodejs && zip -9r pdfkit-layer.zip nodejs && popd 13 | ``` 14 | Change serverless.yml `profile` to use your AWS profile name, and you can deploy it 15 | ``` 16 | yarn sls deploy 17 | ``` 18 | -------------------------------------------------------------------------------- /functions/pdf.ts: -------------------------------------------------------------------------------- 1 | import PDFDocument from "pdfkit"; 2 | import middy from "@middy/core"; 3 | import doNotWaitForEmptyEventLoop from "@middy/do-not-wait-for-empty-event-loop"; 4 | 5 | const generatePdf = async (): Promise => { 6 | return new Promise((resolve: Function, reject: Function): any => { 7 | const doc = new PDFDocument(); 8 | doc.text("How Are You"); 9 | doc.end(); 10 | const buffers: any = []; 11 | doc.on("data", buffers.push.bind(buffers)); 12 | doc.on("end", () => { 13 | const pdfData = Buffer.concat(buffers); 14 | resolve(pdfData); 15 | }); 16 | }); 17 | }; 18 | const handler = async (event: any) => { 19 | const stream = await generatePdf(); 20 | return { 21 | statusCode: 200, 22 | isBase64Encoded: true, 23 | headers: { 24 | "Content-type": "application/pdf" 25 | }, 26 | body: stream.toString("base64") 27 | }; 28 | }; 29 | 30 | export const generate = middy(handler).use(doNotWaitForEmptyEventLoop()); 31 | -------------------------------------------------------------------------------- /layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pdfkit-layer", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "dependencies": { 7 | "pdfkit": "^0.11.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /layer/nodejs/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | acorn-node@^1.3.0: 6 | version "1.8.2" 7 | resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" 8 | integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== 9 | dependencies: 10 | acorn "^7.0.0" 11 | acorn-walk "^7.0.0" 12 | xtend "^4.0.2" 13 | 14 | acorn-walk@^7.0.0: 15 | version "7.1.0" 16 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.0.tgz#48387aa9a83bba67a9909164acab4bbc5796cf87" 17 | integrity sha512-4ufNLdC8gOf1dlOjC1nrn2NfzevyDtrDPp/DOtmoOHAFA/1pQc6bWf7oZ71qDURTODPLQ03+oFOvwxq5BvjXug== 18 | 19 | acorn@^5.0.0: 20 | version "5.7.3" 21 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" 22 | integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== 23 | 24 | acorn@^7.0.0: 25 | version "7.1.0" 26 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" 27 | integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== 28 | 29 | amdefine@>=0.0.4: 30 | version "1.0.1" 31 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 32 | integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= 33 | 34 | array-from@^2.1.1: 35 | version "2.1.1" 36 | resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" 37 | integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= 38 | 39 | ast-transform@0.0.0: 40 | version "0.0.0" 41 | resolved "https://registry.yarnpkg.com/ast-transform/-/ast-transform-0.0.0.tgz#74944058887d8283e189d954600947bc98fe0062" 42 | integrity sha1-dJRAWIh9goPhidlUYAlHvJj+AGI= 43 | dependencies: 44 | escodegen "~1.2.0" 45 | esprima "~1.0.4" 46 | through "~2.3.4" 47 | 48 | ast-types@^0.7.0: 49 | version "0.7.8" 50 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.7.8.tgz#902d2e0d60d071bdcd46dc115e1809ed11c138a9" 51 | integrity sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk= 52 | 53 | babel-runtime@^6.11.6: 54 | version "6.26.0" 55 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 56 | integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= 57 | dependencies: 58 | core-js "^2.4.0" 59 | regenerator-runtime "^0.11.0" 60 | 61 | base64-js@0.0.8: 62 | version "0.0.8" 63 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" 64 | integrity sha1-EQHpVE9KdrG8OybUUsqW16NeeXg= 65 | 66 | base64-js@^1.1.2, base64-js@^1.3.0: 67 | version "1.3.1" 68 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" 69 | integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== 70 | 71 | brfs@^1.4.0: 72 | version "1.6.1" 73 | resolved "https://registry.yarnpkg.com/brfs/-/brfs-1.6.1.tgz#b78ce2336d818e25eea04a0947cba6d4fb8849c3" 74 | integrity sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ== 75 | dependencies: 76 | quote-stream "^1.0.1" 77 | resolve "^1.1.5" 78 | static-module "^2.2.0" 79 | through2 "^2.0.0" 80 | 81 | brfs@^2.0.2: 82 | version "2.0.2" 83 | resolved "https://registry.yarnpkg.com/brfs/-/brfs-2.0.2.tgz#44237878fa82aa479ce4f5fe2c1796ec69f07845" 84 | integrity sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ== 85 | dependencies: 86 | quote-stream "^1.0.1" 87 | resolve "^1.1.5" 88 | static-module "^3.0.2" 89 | through2 "^2.0.0" 90 | 91 | brotli@^1.2.0: 92 | version "1.3.2" 93 | resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.2.tgz#525a9cad4fcba96475d7d388f6aecb13eed52f46" 94 | integrity sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y= 95 | dependencies: 96 | base64-js "^1.1.2" 97 | 98 | browser-resolve@^1.8.1: 99 | version "1.11.3" 100 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" 101 | integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== 102 | dependencies: 103 | resolve "1.1.7" 104 | 105 | browserify-optional@^1.0.0: 106 | version "1.0.1" 107 | resolved "https://registry.yarnpkg.com/browserify-optional/-/browserify-optional-1.0.1.tgz#1e13722cfde0d85f121676c2a72ced533a018869" 108 | integrity sha1-HhNyLP3g2F8SFnbCpyztUzoBiGk= 109 | dependencies: 110 | ast-transform "0.0.0" 111 | ast-types "^0.7.0" 112 | browser-resolve "^1.8.1" 113 | 114 | buffer-equal@0.0.1: 115 | version "0.0.1" 116 | resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" 117 | integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= 118 | 119 | buffer-from@^1.0.0: 120 | version "1.1.1" 121 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 122 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 123 | 124 | clone@^1.0.1: 125 | version "1.0.4" 126 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 127 | integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= 128 | 129 | concat-stream@~1.6.0: 130 | version "1.6.2" 131 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 132 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 133 | dependencies: 134 | buffer-from "^1.0.0" 135 | inherits "^2.0.3" 136 | readable-stream "^2.2.2" 137 | typedarray "^0.0.6" 138 | 139 | convert-source-map@^1.5.1: 140 | version "1.7.0" 141 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 142 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 143 | dependencies: 144 | safe-buffer "~5.1.1" 145 | 146 | core-js@^2.4.0: 147 | version "2.6.11" 148 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" 149 | integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== 150 | 151 | core-util-is@~1.0.0: 152 | version "1.0.2" 153 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 154 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 155 | 156 | crypto-js@^3.1.9-1: 157 | version "3.2.0" 158 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.2.0.tgz#abe124867e49d2695e20fea091728276a9f761c0" 159 | integrity sha512-J6LOZ2Iha4akgCwqTrZsCLdA5y/kJ1MxRoGzs/xtIfFSaLSs1gENHznVjYEzWZfunzt9yiViXq8bO1RyT1euhg== 160 | 161 | d@1, d@^1.0.1: 162 | version "1.0.1" 163 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" 164 | integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== 165 | dependencies: 166 | es5-ext "^0.10.50" 167 | type "^1.0.1" 168 | 169 | deep-equal@^1.0.0: 170 | version "1.1.1" 171 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" 172 | integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== 173 | dependencies: 174 | is-arguments "^1.0.4" 175 | is-date-object "^1.0.1" 176 | is-regex "^1.0.4" 177 | object-is "^1.0.1" 178 | object-keys "^1.1.1" 179 | regexp.prototype.flags "^1.2.0" 180 | 181 | deep-is@~0.1.3: 182 | version "0.1.3" 183 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 184 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 185 | 186 | define-properties@^1.1.2, define-properties@^1.1.3: 187 | version "1.1.3" 188 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 189 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 190 | dependencies: 191 | object-keys "^1.0.12" 192 | 193 | dfa@^1.0.0: 194 | version "1.2.0" 195 | resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" 196 | integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== 197 | 198 | duplexer2@~0.1.4: 199 | version "0.1.4" 200 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 201 | integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= 202 | dependencies: 203 | readable-stream "^2.0.2" 204 | 205 | es-abstract@^1.17.0-next.1: 206 | version "1.17.4" 207 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" 208 | integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== 209 | dependencies: 210 | es-to-primitive "^1.2.1" 211 | function-bind "^1.1.1" 212 | has "^1.0.3" 213 | has-symbols "^1.0.1" 214 | is-callable "^1.1.5" 215 | is-regex "^1.0.5" 216 | object-inspect "^1.7.0" 217 | object-keys "^1.1.1" 218 | object.assign "^4.1.0" 219 | string.prototype.trimleft "^2.1.1" 220 | string.prototype.trimright "^2.1.1" 221 | 222 | es-to-primitive@^1.2.1: 223 | version "1.2.1" 224 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 225 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 226 | dependencies: 227 | is-callable "^1.1.4" 228 | is-date-object "^1.0.1" 229 | is-symbol "^1.0.2" 230 | 231 | es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.14: 232 | version "0.10.53" 233 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" 234 | integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== 235 | dependencies: 236 | es6-iterator "~2.0.3" 237 | es6-symbol "~3.1.3" 238 | next-tick "~1.0.0" 239 | 240 | es6-iterator@~2.0.1, es6-iterator@~2.0.3: 241 | version "2.0.3" 242 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 243 | integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= 244 | dependencies: 245 | d "1" 246 | es5-ext "^0.10.35" 247 | es6-symbol "^3.1.1" 248 | 249 | es6-map@^0.1.5: 250 | version "0.1.5" 251 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" 252 | integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= 253 | dependencies: 254 | d "1" 255 | es5-ext "~0.10.14" 256 | es6-iterator "~2.0.1" 257 | es6-set "~0.1.5" 258 | es6-symbol "~3.1.1" 259 | event-emitter "~0.3.5" 260 | 261 | es6-set@^0.1.5, es6-set@~0.1.5: 262 | version "0.1.5" 263 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" 264 | integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= 265 | dependencies: 266 | d "1" 267 | es5-ext "~0.10.14" 268 | es6-iterator "~2.0.1" 269 | es6-symbol "3.1.1" 270 | event-emitter "~0.3.5" 271 | 272 | es6-symbol@3.1.1: 273 | version "3.1.1" 274 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 275 | integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= 276 | dependencies: 277 | d "1" 278 | es5-ext "~0.10.14" 279 | 280 | es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: 281 | version "3.1.3" 282 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" 283 | integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== 284 | dependencies: 285 | d "^1.0.1" 286 | ext "^1.1.2" 287 | 288 | escodegen@^1.11.1: 289 | version "1.14.1" 290 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" 291 | integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== 292 | dependencies: 293 | esprima "^4.0.1" 294 | estraverse "^4.2.0" 295 | esutils "^2.0.2" 296 | optionator "^0.8.1" 297 | optionalDependencies: 298 | source-map "~0.6.1" 299 | 300 | escodegen@~1.2.0: 301 | version "1.2.0" 302 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.2.0.tgz#09de7967791cc958b7f89a2ddb6d23451af327e1" 303 | integrity sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E= 304 | dependencies: 305 | esprima "~1.0.4" 306 | estraverse "~1.5.0" 307 | esutils "~1.0.0" 308 | optionalDependencies: 309 | source-map "~0.1.30" 310 | 311 | escodegen@~1.9.0: 312 | version "1.9.1" 313 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" 314 | integrity sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q== 315 | dependencies: 316 | esprima "^3.1.3" 317 | estraverse "^4.2.0" 318 | esutils "^2.0.2" 319 | optionator "^0.8.1" 320 | optionalDependencies: 321 | source-map "~0.6.1" 322 | 323 | esprima@^3.1.3: 324 | version "3.1.3" 325 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 326 | integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= 327 | 328 | esprima@^4.0.1: 329 | version "4.0.1" 330 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 331 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 332 | 333 | esprima@~1.0.4: 334 | version "1.0.4" 335 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" 336 | integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= 337 | 338 | estraverse@^4.2.0: 339 | version "4.3.0" 340 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 341 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 342 | 343 | estraverse@~1.5.0: 344 | version "1.5.1" 345 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" 346 | integrity sha1-hno+jlip+EYYr7bC3bzZFrfLr3E= 347 | 348 | estree-is-function@^1.0.0: 349 | version "1.0.0" 350 | resolved "https://registry.yarnpkg.com/estree-is-function/-/estree-is-function-1.0.0.tgz#c0adc29806d7f18a74db7df0f3b2666702e37ad2" 351 | integrity sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA== 352 | 353 | esutils@^2.0.2: 354 | version "2.0.3" 355 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 356 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 357 | 358 | esutils@~1.0.0: 359 | version "1.0.0" 360 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" 361 | integrity sha1-gVHTWOIMisx/t0XnRywAJf5JZXA= 362 | 363 | event-emitter@~0.3.5: 364 | version "0.3.5" 365 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 366 | integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= 367 | dependencies: 368 | d "1" 369 | es5-ext "~0.10.14" 370 | 371 | ext@^1.1.2: 372 | version "1.4.0" 373 | resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" 374 | integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== 375 | dependencies: 376 | type "^2.0.0" 377 | 378 | falafel@^2.1.0: 379 | version "2.1.0" 380 | resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.1.0.tgz#96bb17761daba94f46d001738b3cedf3a67fe06c" 381 | integrity sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw= 382 | dependencies: 383 | acorn "^5.0.0" 384 | foreach "^2.0.5" 385 | isarray "0.0.1" 386 | object-keys "^1.0.6" 387 | 388 | fast-levenshtein@~2.0.6: 389 | version "2.0.6" 390 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 391 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 392 | 393 | fontkit@^1.8.0: 394 | version "1.8.0" 395 | resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-1.8.0.tgz#deb9351619e90ddc91707b6156a9f14c8ab11554" 396 | integrity sha512-EFDRCca7khfQWYu1iFhsqeABpi87f03MBdkT93ZE6YhqCdMzb5Eojb6c4dlJikGv5liuhByyzA7ikpIPTSBWbQ== 397 | dependencies: 398 | babel-runtime "^6.11.6" 399 | brfs "^1.4.0" 400 | brotli "^1.2.0" 401 | browserify-optional "^1.0.0" 402 | clone "^1.0.1" 403 | deep-equal "^1.0.0" 404 | dfa "^1.0.0" 405 | restructure "^0.5.3" 406 | tiny-inflate "^1.0.2" 407 | unicode-properties "^1.0.0" 408 | unicode-trie "^0.3.0" 409 | 410 | foreach@^2.0.5: 411 | version "2.0.5" 412 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 413 | integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= 414 | 415 | function-bind@^1.1.1: 416 | version "1.1.1" 417 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 418 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 419 | 420 | get-assigned-identifiers@^1.1.0: 421 | version "1.2.0" 422 | resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" 423 | integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== 424 | 425 | has-symbols@^1.0.0, has-symbols@^1.0.1: 426 | version "1.0.1" 427 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 428 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 429 | 430 | has@^1.0.1, has@^1.0.3: 431 | version "1.0.3" 432 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 433 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 434 | dependencies: 435 | function-bind "^1.1.1" 436 | 437 | inherits@^2.0.3, inherits@~2.0.3: 438 | version "2.0.4" 439 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 440 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 441 | 442 | is-arguments@^1.0.4: 443 | version "1.0.4" 444 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" 445 | integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== 446 | 447 | is-callable@^1.1.4, is-callable@^1.1.5: 448 | version "1.1.5" 449 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" 450 | integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== 451 | 452 | is-date-object@^1.0.1: 453 | version "1.0.2" 454 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 455 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 456 | 457 | is-regex@^1.0.4, is-regex@^1.0.5: 458 | version "1.0.5" 459 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 460 | integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== 461 | dependencies: 462 | has "^1.0.3" 463 | 464 | is-symbol@^1.0.2: 465 | version "1.0.3" 466 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 467 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 468 | dependencies: 469 | has-symbols "^1.0.1" 470 | 471 | isarray@0.0.1: 472 | version "0.0.1" 473 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 474 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 475 | 476 | isarray@~1.0.0: 477 | version "1.0.0" 478 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 479 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 480 | 481 | levn@~0.3.0: 482 | version "0.3.0" 483 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 484 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 485 | dependencies: 486 | prelude-ls "~1.1.2" 487 | type-check "~0.3.2" 488 | 489 | linebreak@^1.0.2: 490 | version "1.0.2" 491 | resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.0.2.tgz#4b5781733e9a9eb2849dba2f963e47c887f8aa06" 492 | integrity sha512-bJwSRsJeAmaZYnkcwl5sCQNfSDAhBuXxb6L27tb+qkBRtUQSSTUa5bcgCPD6hFEkRNlpWHfK7nFMmcANU7ZP1w== 493 | dependencies: 494 | base64-js "0.0.8" 495 | brfs "^2.0.2" 496 | unicode-trie "^1.0.0" 497 | 498 | magic-string@^0.22.4: 499 | version "0.22.5" 500 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" 501 | integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== 502 | dependencies: 503 | vlq "^0.2.2" 504 | 505 | merge-source-map@1.0.4: 506 | version "1.0.4" 507 | resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" 508 | integrity sha1-pd5GU42uhNQRTMXqArR3KmNGcB8= 509 | dependencies: 510 | source-map "^0.5.6" 511 | 512 | minimist@^1.1.3: 513 | version "1.2.0" 514 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 515 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 516 | 517 | next-tick@~1.0.0: 518 | version "1.0.0" 519 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" 520 | integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= 521 | 522 | object-inspect@^1.7.0: 523 | version "1.7.0" 524 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 525 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== 526 | 527 | object-inspect@~1.4.0: 528 | version "1.4.1" 529 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.4.1.tgz#37ffb10e71adaf3748d05f713b4c9452f402cbc4" 530 | integrity sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw== 531 | 532 | object-is@^1.0.1: 533 | version "1.0.2" 534 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" 535 | integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== 536 | 537 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.1.1: 538 | version "1.1.1" 539 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 540 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 541 | 542 | object.assign@^4.1.0: 543 | version "4.1.0" 544 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 545 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 546 | dependencies: 547 | define-properties "^1.1.2" 548 | function-bind "^1.1.1" 549 | has-symbols "^1.0.0" 550 | object-keys "^1.0.11" 551 | 552 | optionator@^0.8.1: 553 | version "0.8.3" 554 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 555 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 556 | dependencies: 557 | deep-is "~0.1.3" 558 | fast-levenshtein "~2.0.6" 559 | levn "~0.3.0" 560 | prelude-ls "~1.1.2" 561 | type-check "~0.3.2" 562 | word-wrap "~1.2.3" 563 | 564 | pako@^0.2.5: 565 | version "0.2.9" 566 | resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" 567 | integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= 568 | 569 | path-parse@^1.0.6: 570 | version "1.0.6" 571 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 572 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 573 | 574 | pdfkit@^0.11.0: 575 | version "0.11.0" 576 | resolved "https://registry.yarnpkg.com/pdfkit/-/pdfkit-0.11.0.tgz#9cdb2fc42bd2913587fe3ddf48cc5bbb3c36f7de" 577 | integrity sha512-1s9gaumXkYxcVF1iRtSmLiISF2r4nHtsTgpwXiK8Swe+xwk/1pm8FJjYqN7L3x13NsWnGyUFntWcO8vfqq+wwA== 578 | dependencies: 579 | crypto-js "^3.1.9-1" 580 | fontkit "^1.8.0" 581 | linebreak "^1.0.2" 582 | png-js "^1.0.0" 583 | 584 | png-js@^1.0.0: 585 | version "1.0.0" 586 | resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" 587 | integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== 588 | 589 | prelude-ls@~1.1.2: 590 | version "1.1.2" 591 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 592 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 593 | 594 | process-nextick-args@~2.0.0: 595 | version "2.0.1" 596 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 597 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 598 | 599 | quote-stream@^1.0.1, quote-stream@~1.0.2: 600 | version "1.0.2" 601 | resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-1.0.2.tgz#84963f8c9c26b942e153feeb53aae74652b7e0b2" 602 | integrity sha1-hJY/jJwmuULhU/7rU6rnRlK34LI= 603 | dependencies: 604 | buffer-equal "0.0.1" 605 | minimist "^1.1.3" 606 | through2 "^2.0.0" 607 | 608 | readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@~2.3.3, readable-stream@~2.3.6: 609 | version "2.3.7" 610 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 611 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 612 | dependencies: 613 | core-util-is "~1.0.0" 614 | inherits "~2.0.3" 615 | isarray "~1.0.0" 616 | process-nextick-args "~2.0.0" 617 | safe-buffer "~5.1.1" 618 | string_decoder "~1.1.1" 619 | util-deprecate "~1.0.1" 620 | 621 | regenerator-runtime@^0.11.0: 622 | version "0.11.1" 623 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 624 | integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== 625 | 626 | regexp.prototype.flags@^1.2.0: 627 | version "1.3.0" 628 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" 629 | integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== 630 | dependencies: 631 | define-properties "^1.1.3" 632 | es-abstract "^1.17.0-next.1" 633 | 634 | resolve@1.1.7: 635 | version "1.1.7" 636 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 637 | integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= 638 | 639 | resolve@^1.1.5: 640 | version "1.15.1" 641 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" 642 | integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== 643 | dependencies: 644 | path-parse "^1.0.6" 645 | 646 | restructure@^0.5.3: 647 | version "0.5.4" 648 | resolved "https://registry.yarnpkg.com/restructure/-/restructure-0.5.4.tgz#f54e7dd563590fb34fd6bf55876109aeccb28de8" 649 | integrity sha1-9U591WNZD7NP1r9Vh2EJrsyyjeg= 650 | dependencies: 651 | browserify-optional "^1.0.0" 652 | 653 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 654 | version "5.1.2" 655 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 656 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 657 | 658 | scope-analyzer@^2.0.1: 659 | version "2.0.5" 660 | resolved "https://registry.yarnpkg.com/scope-analyzer/-/scope-analyzer-2.0.5.tgz#72c9c6770c3e66984f84c7d3c7045998a1a7db8a" 661 | integrity sha512-+U5H0417mnTEstCD5VwOYO7V4vYuSqwqjFap40ythe67bhMFL5C3UgPwyBv7KDJsqUBIKafOD57xMlh1rN7eaw== 662 | dependencies: 663 | array-from "^2.1.1" 664 | es6-map "^0.1.5" 665 | es6-set "^0.1.5" 666 | es6-symbol "^3.1.1" 667 | estree-is-function "^1.0.0" 668 | get-assigned-identifiers "^1.1.0" 669 | 670 | shallow-copy@~0.0.1: 671 | version "0.0.1" 672 | resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" 673 | integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= 674 | 675 | source-map@^0.5.6: 676 | version "0.5.7" 677 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 678 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 679 | 680 | source-map@~0.1.30: 681 | version "0.1.43" 682 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" 683 | integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= 684 | dependencies: 685 | amdefine ">=0.0.4" 686 | 687 | source-map@~0.6.1: 688 | version "0.6.1" 689 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 690 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 691 | 692 | static-eval@^2.0.0, static-eval@^2.0.2: 693 | version "2.0.3" 694 | resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.3.tgz#cb62fc79946bd4d5f623a45ad428233adace4d72" 695 | integrity sha512-zsxDGucfAh8T339sSKgpFbvg15Fms2IVaJGC+jqp0bVsxhcpM+iMeAI8weNo8dmf4OblgifTBUoyk1vGVtYw2w== 696 | dependencies: 697 | escodegen "^1.11.1" 698 | 699 | static-module@^2.2.0: 700 | version "2.2.5" 701 | resolved "https://registry.yarnpkg.com/static-module/-/static-module-2.2.5.tgz#bd40abceae33da6b7afb84a0e4329ff8852bfbbf" 702 | integrity sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ== 703 | dependencies: 704 | concat-stream "~1.6.0" 705 | convert-source-map "^1.5.1" 706 | duplexer2 "~0.1.4" 707 | escodegen "~1.9.0" 708 | falafel "^2.1.0" 709 | has "^1.0.1" 710 | magic-string "^0.22.4" 711 | merge-source-map "1.0.4" 712 | object-inspect "~1.4.0" 713 | quote-stream "~1.0.2" 714 | readable-stream "~2.3.3" 715 | shallow-copy "~0.0.1" 716 | static-eval "^2.0.0" 717 | through2 "~2.0.3" 718 | 719 | static-module@^3.0.2: 720 | version "3.0.3" 721 | resolved "https://registry.yarnpkg.com/static-module/-/static-module-3.0.3.tgz#cc2301ed3fe353e2d2a2195137013853676f9960" 722 | integrity sha512-RDaMYaI5o/ym0GkCqL/PlD1Pn216omp8fY81okxZ6f6JQxWW5tptOw9reXoZX85yt/scYvbWIt6uoszeyf+/MQ== 723 | dependencies: 724 | acorn-node "^1.3.0" 725 | concat-stream "~1.6.0" 726 | convert-source-map "^1.5.1" 727 | duplexer2 "~0.1.4" 728 | escodegen "~1.9.0" 729 | has "^1.0.1" 730 | magic-string "^0.22.4" 731 | merge-source-map "1.0.4" 732 | object-inspect "~1.4.0" 733 | readable-stream "~2.3.3" 734 | scope-analyzer "^2.0.1" 735 | shallow-copy "~0.0.1" 736 | static-eval "^2.0.2" 737 | through2 "~2.0.3" 738 | 739 | string.prototype.trimleft@^2.1.1: 740 | version "2.1.1" 741 | resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" 742 | integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== 743 | dependencies: 744 | define-properties "^1.1.3" 745 | function-bind "^1.1.1" 746 | 747 | string.prototype.trimright@^2.1.1: 748 | version "2.1.1" 749 | resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" 750 | integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== 751 | dependencies: 752 | define-properties "^1.1.3" 753 | function-bind "^1.1.1" 754 | 755 | string_decoder@~1.1.1: 756 | version "1.1.1" 757 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 758 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 759 | dependencies: 760 | safe-buffer "~5.1.0" 761 | 762 | through2@^2.0.0, through2@~2.0.3: 763 | version "2.0.5" 764 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" 765 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== 766 | dependencies: 767 | readable-stream "~2.3.6" 768 | xtend "~4.0.1" 769 | 770 | through@~2.3.4: 771 | version "2.3.8" 772 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 773 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 774 | 775 | tiny-inflate@^1.0.0, tiny-inflate@^1.0.2: 776 | version "1.0.3" 777 | resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" 778 | integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== 779 | 780 | type-check@~0.3.2: 781 | version "0.3.2" 782 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 783 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 784 | dependencies: 785 | prelude-ls "~1.1.2" 786 | 787 | type@^1.0.1: 788 | version "1.2.0" 789 | resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" 790 | integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== 791 | 792 | type@^2.0.0: 793 | version "2.0.0" 794 | resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" 795 | integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== 796 | 797 | typedarray@^0.0.6: 798 | version "0.0.6" 799 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 800 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 801 | 802 | unicode-properties@^1.0.0: 803 | version "1.3.1" 804 | resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.3.1.tgz#cc642b6314bde2c691d65dd94cece09ed84f1282" 805 | integrity sha512-nIV3Tf3LcUEZttY/2g4ZJtGXhWwSkuLL+rCu0DIAMbjyVPj+8j5gNVz4T/sVbnQybIsd5SFGkPKg/756OY6jlA== 806 | dependencies: 807 | base64-js "^1.3.0" 808 | unicode-trie "^2.0.0" 809 | 810 | unicode-trie@^0.3.0: 811 | version "0.3.1" 812 | resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-0.3.1.tgz#d671dddd89101a08bac37b6a5161010602052085" 813 | integrity sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU= 814 | dependencies: 815 | pako "^0.2.5" 816 | tiny-inflate "^1.0.0" 817 | 818 | unicode-trie@^1.0.0: 819 | version "1.0.0" 820 | resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-1.0.0.tgz#f649afdca127135edb55ca0ad7c8c60656d92ad1" 821 | integrity sha512-v5raLKsobbFbWLMoX9+bChts/VhPPj3XpkNr/HbqkirXR1DPk8eo9IYKyvk0MQZFkaoRsFj2Rmaqgi2rfAZYtA== 822 | dependencies: 823 | pako "^0.2.5" 824 | tiny-inflate "^1.0.0" 825 | 826 | unicode-trie@^2.0.0: 827 | version "2.0.0" 828 | resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" 829 | integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== 830 | dependencies: 831 | pako "^0.2.5" 832 | tiny-inflate "^1.0.0" 833 | 834 | util-deprecate@~1.0.1: 835 | version "1.0.2" 836 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 837 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 838 | 839 | vlq@^0.2.2: 840 | version "0.2.3" 841 | resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" 842 | integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== 843 | 844 | word-wrap@~1.2.3: 845 | version "1.2.3" 846 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 847 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 848 | 849 | xtend@^4.0.2, xtend@~4.0.1: 850 | version "4.0.2" 851 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 852 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 853 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "serverless-lambda-pdfkit", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "repository": "git@github.com:crespowang/serverless-lambda-pdfkit.git", 6 | "author": "Crespo Wang ", 7 | "license": "MIT", 8 | "scripts": { 9 | "serverless": "sls offline start --port 3003 --stage dev --basePath / --prefix dev --location .webpack/service" 10 | }, 11 | "dependencies": { 12 | "@middy/core": "^1.0.0-beta.5", 13 | "@middy/do-not-wait-for-empty-event-loop": "^1.0.0-beta.5", 14 | "@types/aws-lambda": "^8.10.40", 15 | "pdfkit": "^0.11.0", 16 | "serverless": "1.63.0", 17 | "serverless-offline": "v6.0.0-alpha.65" 18 | }, 19 | "devDependencies": { 20 | "@types/node": "^13.1.4", 21 | "@types/pdfkit": "^0.10.5", 22 | "serverless-domain-manager": "^3.3.0", 23 | "serverless-webpack": "^5.3.1", 24 | "ts-loader": "^6.2.1", 25 | "typescript": "^3.7.4", 26 | "webpack": "^4.41.5", 27 | "webpack-node-externals": "^1.7.2" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /serverless.yml: -------------------------------------------------------------------------------- 1 | service: serverless-lambda-pdfkit 2 | frameworkVersion: "1.63.0" 3 | 4 | provider: 5 | name: aws 6 | versionFunctions: false 7 | runtime: nodejs12.x 8 | region: ap-southeast-2 9 | stage: dev 10 | profile: hotpuma 11 | apiGateway: 12 | binaryMediaTypes: 13 | - "application/pdf" 14 | plugins: 15 | - serverless-webpack 16 | - serverless-domain-manager 17 | - serverless-offline 18 | 19 | layers: 20 | Pdfkit: 21 | name: Pdfkit 22 | compatibleRuntimes: 23 | - nodejs12.x 24 | description: Required for Pdfkit 25 | package: 26 | artifact: layer/pdfkit-layer.zip 27 | custom: 28 | webpack: 29 | webpackConfig: webpack.config.js 30 | includeModules: 31 | forceExclude: 32 | - pdfkit 33 | packager: "yarn" 34 | 35 | serverless-offline: 36 | location: .webpack/service 37 | 38 | customDomain: 39 | domainName: labs.mianio.com 40 | basePath: pdfkit 41 | stage: ${self:provider.stage} 42 | createRoute53Record: true 43 | 44 | functions: 45 | pdfkit-demo: 46 | # provisionedConcurrency: 1 47 | handler: functions/pdf.generate 48 | layers: 49 | - { Ref: PdfkitLambdaLayer } 50 | events: 51 | - http: 52 | path: demo 53 | method: get 54 | cors: true 55 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "esnext", 4 | // Target latest version of ECMAScript. 5 | 6 | "target": "es2019", 7 | // Search under node_modules for non-relative imports. 8 | "moduleResolution": "node", 9 | // Process & infer types from .js files. 10 | "allowJs": false, 11 | 12 | // Enable strictest settings like strictNullChecks & noImplicitAny. 13 | "strict": true, 14 | // Disallow features that require cross-file information for emit. 15 | "isolatedModules": false, 16 | // Import non-ES modules as default imports. 17 | "esModuleInterop": true, 18 | // Enable strict null checks 19 | "strictNullChecks": false, 20 | "skipLibCheck": true 21 | }, 22 | "include": ["**/*.ts"], 23 | "exclude": [".serverless", ".webpack", "node_modules"] 24 | } 25 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require("webpack"); 2 | const path = require("path"); 3 | const slsw = require("serverless-webpack"); 4 | const nodeExternals = require("webpack-node-externals"); 5 | module.exports = { 6 | entry: slsw.lib.entries, 7 | target: "node", 8 | mode: slsw.lib.webpack.isLocal ? "development" : "production", 9 | node: { 10 | __dirname: true 11 | }, 12 | 13 | externals: [nodeExternals()], 14 | module: { 15 | rules: [ 16 | { 17 | test: /\.ts$/, 18 | loader: "ts-loader" 19 | } 20 | ] 21 | }, 22 | resolve: { 23 | extensions: [".ts", ".js"] 24 | }, 25 | output: { 26 | libraryTarget: "commonjs2", 27 | path: path.join(__dirname, ".webpack"), 28 | filename: "[name].js" 29 | }, 30 | plugins: [ 31 | new webpack.EnvironmentPlugin({ 32 | NODE_ENV: "development" 33 | }) 34 | ] 35 | }; 36 | --------------------------------------------------------------------------------