diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..5e09d8aa --- /dev/null +++ b/.gitignore @@ -0,0 +1,849 @@ + +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/.bin/mime +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/accepts/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/accepts/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/accepts/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/accepts/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/accepts/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/array-flatten/array-flatten.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/array-flatten/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/array-flatten/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/array-flatten/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/lib/read.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/lib/types/json.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/lib/types/raw.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/lib/types/text.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/lib/types/urlencoded.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/body-parser/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/buffer-writer/.travis.yml +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/buffer-writer/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/buffer-writer/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/buffer-writer/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/buffer-writer/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/buffer-writer/test/mocha.opts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/buffer-writer/test/writer-tests.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/bytes/History.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/bytes/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/bytes/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/bytes/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/bytes/Readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-disposition/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-disposition/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-disposition/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-disposition/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-disposition/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-type/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-type/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-type/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-type/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/content-type/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie-signature/.npmignore +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie-signature/History.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie-signature/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie-signature/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie-signature/Readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/cookie/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/.coveralls.yml +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/.eslintrc +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/.npmignore +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/.travis.yml +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/CHANGELOG.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/component.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/karma.conf.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/Makefile +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/node.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/src/browser.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/src/debug.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/src/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/src/inspector-log.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/debug/src/node.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/depd/History.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/depd/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/depd/lib/browser/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/depd/lib/compat/callsite-tostring.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/depd/lib/compat/event-listener-count.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/depd/lib/compat/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/depd/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/depd/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/depd/Readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/destroy/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/destroy/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/destroy/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/destroy/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ee-first/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ee-first/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ee-first/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ee-first/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/encodeurl/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/encodeurl/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/encodeurl/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/encodeurl/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/encodeurl/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/escape-html/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/escape-html/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/escape-html/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/escape-html/Readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/etag/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/etag/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/etag/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/etag/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/etag/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/History.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/application.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/express.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/middleware/init.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/middleware/query.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/request.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/response.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/router/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/router/layer.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/router/route.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/utils.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/lib/view.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/express/Readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/finalhandler/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/finalhandler/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/finalhandler/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/finalhandler/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/finalhandler/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/forwarded/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/forwarded/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/forwarded/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/forwarded/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/forwarded/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/fresh/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/fresh/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/fresh/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/fresh/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/fresh/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/http-errors/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/http-errors/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/http-errors/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/http-errors/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/http-errors/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/Changelog.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/dbcs-codec.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/dbcs-data.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/internal.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/sbcs-codec.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/sbcs-data-generated.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/sbcs-data.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/tables/big5-added.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/tables/cp936.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/tables/cp949.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/tables/cp950.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/tables/eucjp.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/tables/gbk-added.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/tables/shiftjis.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/utf16.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/encodings/utf7.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/lib/bom-handling.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/lib/extend-node.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/lib/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/lib/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/lib/streams.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/iconv-lite/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/inherits/inherits.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/inherits/inherits_browser.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/inherits/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/inherits/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/inherits/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ipaddr.js/ipaddr.min.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ipaddr.js/lib/ipaddr.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ipaddr.js/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ipaddr.js/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ipaddr.js/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/media-typer/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/media-typer/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/media-typer/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/media-typer/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/media-typer/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/merge-descriptors/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/merge-descriptors/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/merge-descriptors/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/merge-descriptors/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/merge-descriptors/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/methods/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/methods/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/methods/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/methods/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/methods/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-db/db.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-db/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-db/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-db/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-db/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-db/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-types/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-types/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-types/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-types/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime-types/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/.npmignore +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/CHANGELOG.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/cli.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/mime.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/src/build.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/src/test.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/mime/types.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ms/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ms/license.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ms/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ms/readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/negotiator/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/negotiator/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/negotiator/lib/charset.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/negotiator/lib/encoding.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/negotiator/lib/language.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/negotiator/lib/mediaType.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/negotiator/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/negotiator/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/negotiator/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/on-finished/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/on-finished/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/on-finished/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/on-finished/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/on-finished/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/packet-reader/.travis.yml +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/packet-reader/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/packet-reader/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/packet-reader/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/packet-reader/test/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/parseurl/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/parseurl/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/parseurl/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/parseurl/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/parseurl/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/path-to-regexp/History.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/path-to-regexp/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/path-to-regexp/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/path-to-regexp/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/path-to-regexp/Readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-connection-string/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-connection-string/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-connection-string/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-connection-string/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-connection-string/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-int8/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-int8/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-int8/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-int8/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/bring-your-own-promise.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/connection-strings.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/connection-timeout.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/ending.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/error-handling.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/events.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/idle-timeout.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/logging.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/max-uses.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/releasing-clients.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/setup.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/sizing.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/submittable.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/timeout.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-pool/test/verify.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/b.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/b.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/b.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/buffer-reader.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/buffer-reader.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/buffer-reader.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/buffer-writer.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/buffer-writer.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/buffer-writer.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/BufferReader.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/BufferReader.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/BufferReader.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/BufferWriter.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/BufferWriter.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/BufferWriter.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/connection.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/connection.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/connection.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/inbound-parser.test.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/inbound-parser.test.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/index.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/messages.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/messages.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/messages.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/outbound-serializer.test.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/parser.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/parser.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/parser.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/serializer.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/serializer.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/dist/serializer.js.map +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/b.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/buffer-reader.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/buffer-writer.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/inbound-parser.test.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/index.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/messages.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/outbound-serializer.test.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/parser.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/serializer.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/testing/buffer-list.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/testing/test-buffers.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-protocol/src/types/chunky.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/.travis.yml +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/index.test-d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/lib/arrayParser.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/lib/binaryParsers.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/lib/builtins.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/lib/textParsers.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/Makefile +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/test/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg-types/test/types.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/client.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/connection-parameters.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/connection.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/defaults.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/native/client.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/native/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/native/query.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/query.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/result.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/sasl.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/type-overrides.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/lib/utils.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pg/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pgpass/lib/helper.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pgpass/lib/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pgpass/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/pgpass/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-array/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-array/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-array/license +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-array/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-array/readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-bytea/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-bytea/license +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-bytea/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-bytea/readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-date/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-date/license +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-date/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-date/readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-interval/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-interval/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-interval/license +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-interval/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/postgres-interval/readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/proxy-addr/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/proxy-addr/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/proxy-addr/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/proxy-addr/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/proxy-addr/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/.editorconfig +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/.eslintignore +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/.eslintrc +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/CHANGELOG.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/dist/qs.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/lib/formats.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/lib/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/lib/parse.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/lib/stringify.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/lib/utils.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/test/.eslintrc +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/test/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/test/parse.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/test/stringify.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/qs/test/utils.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/range-parser/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/range-parser/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/range-parser/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/range-parser/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/range-parser/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/raw-body/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/raw-body/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/raw-body/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/raw-body/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/raw-body/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/raw-body/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/CONTRIBUTING.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/errors-browser.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/errors.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/experimentalWarning.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/GOVERNANCE.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/_stream_duplex.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/_stream_passthrough.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/_stream_readable.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/_stream_transform.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/_stream_writable.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/async_iterator.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/buffer_list.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/destroy.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/from-browser.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/from.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/pipeline.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/state.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/stream-browser.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/lib/internal/streams/stream.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/readable-browser.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/readable.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/readable-stream/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safe-buffer/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safe-buffer/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safe-buffer/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safe-buffer/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safe-buffer/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safer-buffer/dangerous.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safer-buffer/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safer-buffer/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safer-buffer/Porting-Buffer.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safer-buffer/Readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safer-buffer/safer.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/safer-buffer/tests.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/send/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/send/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/send/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/send/node_modules/ms/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/send/node_modules/ms/license.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/send/node_modules/ms/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/send/node_modules/ms/readme.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/send/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/send/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/serve-static/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/serve-static/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/serve-static/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/serve-static/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/serve-static/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/setprototypeof/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/setprototypeof/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/setprototypeof/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/setprototypeof/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/setprototypeof/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/setprototypeof/test/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/split2/bench.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/split2/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/split2/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/split2/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/split2/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/split2/test.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/statuses/codes.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/statuses/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/statuses/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/statuses/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/statuses/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/statuses/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/string_decoder/lib/string_decoder.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/string_decoder/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/string_decoder/node_modules/safe-buffer/index.d.ts +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/string_decoder/node_modules/safe-buffer/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/string_decoder/node_modules/safe-buffer/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/string_decoder/node_modules/safe-buffer/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/string_decoder/node_modules/safe-buffer/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/string_decoder/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/string_decoder/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/toidentifier/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/toidentifier/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/toidentifier/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/toidentifier/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/type-is/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/type-is/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/type-is/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/type-is/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/type-is/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/unpipe/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/unpipe/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/unpipe/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/unpipe/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/unpipe/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/util-deprecate/browser.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/util-deprecate/History.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/util-deprecate/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/util-deprecate/node.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/util-deprecate/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/util-deprecate/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/utils-merge/.npmignore +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/utils-merge/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/utils-merge/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/utils-merge/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/utils-merge/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/vary/HISTORY.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/vary/index.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/vary/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/vary/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/vary/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/xtend/.jshintrc +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/xtend/immutable.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/xtend/LICENSE +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/xtend/mutable.js +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/xtend/package.json +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/xtend/README.md +week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/xtend/test.js +week-3/mandatory/2-api/git-ignore/node_modules/.bin/mime +week-3/mandatory/2-api/git-ignore/node_modules/accepts/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/accepts/index.js +week-3/mandatory/2-api/git-ignore/node_modules/accepts/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/accepts/package.json +week-3/mandatory/2-api/git-ignore/node_modules/accepts/README.md +week-3/mandatory/2-api/git-ignore/node_modules/array-flatten/array-flatten.js +week-3/mandatory/2-api/git-ignore/node_modules/array-flatten/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/array-flatten/package.json +week-3/mandatory/2-api/git-ignore/node_modules/array-flatten/README.md +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/index.js +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/lib/read.js +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/lib/types/json.js +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/lib/types/raw.js +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/lib/types/text.js +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/lib/types/urlencoded.js +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/package.json +week-3/mandatory/2-api/git-ignore/node_modules/body-parser/README.md +week-3/mandatory/2-api/git-ignore/node_modules/bytes/History.md +week-3/mandatory/2-api/git-ignore/node_modules/bytes/index.js +week-3/mandatory/2-api/git-ignore/node_modules/bytes/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/bytes/package.json +week-3/mandatory/2-api/git-ignore/node_modules/bytes/Readme.md +week-3/mandatory/2-api/git-ignore/node_modules/content-disposition/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/content-disposition/index.js +week-3/mandatory/2-api/git-ignore/node_modules/content-disposition/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/content-disposition/package.json +week-3/mandatory/2-api/git-ignore/node_modules/content-disposition/README.md +week-3/mandatory/2-api/git-ignore/node_modules/content-type/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/content-type/index.js +week-3/mandatory/2-api/git-ignore/node_modules/content-type/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/content-type/package.json +week-3/mandatory/2-api/git-ignore/node_modules/content-type/README.md +week-3/mandatory/2-api/git-ignore/node_modules/cookie-signature/.npmignore +week-3/mandatory/2-api/git-ignore/node_modules/cookie-signature/History.md +week-3/mandatory/2-api/git-ignore/node_modules/cookie-signature/index.js +week-3/mandatory/2-api/git-ignore/node_modules/cookie-signature/package.json +week-3/mandatory/2-api/git-ignore/node_modules/cookie-signature/Readme.md +week-3/mandatory/2-api/git-ignore/node_modules/cookie/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/cookie/index.js +week-3/mandatory/2-api/git-ignore/node_modules/cookie/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/cookie/package.json +week-3/mandatory/2-api/git-ignore/node_modules/cookie/README.md +week-3/mandatory/2-api/git-ignore/node_modules/debug/.coveralls.yml +week-3/mandatory/2-api/git-ignore/node_modules/debug/.eslintrc +week-3/mandatory/2-api/git-ignore/node_modules/debug/.npmignore +week-3/mandatory/2-api/git-ignore/node_modules/debug/.travis.yml +week-3/mandatory/2-api/git-ignore/node_modules/debug/CHANGELOG.md +week-3/mandatory/2-api/git-ignore/node_modules/debug/component.json +week-3/mandatory/2-api/git-ignore/node_modules/debug/karma.conf.js +week-3/mandatory/2-api/git-ignore/node_modules/debug/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/debug/Makefile +week-3/mandatory/2-api/git-ignore/node_modules/debug/node.js +week-3/mandatory/2-api/git-ignore/node_modules/debug/package.json +week-3/mandatory/2-api/git-ignore/node_modules/debug/README.md +week-3/mandatory/2-api/git-ignore/node_modules/debug/src/browser.js +week-3/mandatory/2-api/git-ignore/node_modules/debug/src/debug.js +week-3/mandatory/2-api/git-ignore/node_modules/debug/src/index.js +week-3/mandatory/2-api/git-ignore/node_modules/debug/src/inspector-log.js +week-3/mandatory/2-api/git-ignore/node_modules/debug/src/node.js +week-3/mandatory/2-api/git-ignore/node_modules/depd/History.md +week-3/mandatory/2-api/git-ignore/node_modules/depd/index.js +week-3/mandatory/2-api/git-ignore/node_modules/depd/lib/browser/index.js +week-3/mandatory/2-api/git-ignore/node_modules/depd/lib/compat/callsite-tostring.js +week-3/mandatory/2-api/git-ignore/node_modules/depd/lib/compat/event-listener-count.js +week-3/mandatory/2-api/git-ignore/node_modules/depd/lib/compat/index.js +week-3/mandatory/2-api/git-ignore/node_modules/depd/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/depd/package.json +week-3/mandatory/2-api/git-ignore/node_modules/depd/Readme.md +week-3/mandatory/2-api/git-ignore/node_modules/destroy/index.js +week-3/mandatory/2-api/git-ignore/node_modules/destroy/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/destroy/package.json +week-3/mandatory/2-api/git-ignore/node_modules/destroy/README.md +week-3/mandatory/2-api/git-ignore/node_modules/ee-first/index.js +week-3/mandatory/2-api/git-ignore/node_modules/ee-first/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/ee-first/package.json +week-3/mandatory/2-api/git-ignore/node_modules/ee-first/README.md +week-3/mandatory/2-api/git-ignore/node_modules/encodeurl/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/encodeurl/index.js +week-3/mandatory/2-api/git-ignore/node_modules/encodeurl/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/encodeurl/package.json +week-3/mandatory/2-api/git-ignore/node_modules/encodeurl/README.md +week-3/mandatory/2-api/git-ignore/node_modules/escape-html/index.js +week-3/mandatory/2-api/git-ignore/node_modules/escape-html/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/escape-html/package.json +week-3/mandatory/2-api/git-ignore/node_modules/escape-html/Readme.md +week-3/mandatory/2-api/git-ignore/node_modules/etag/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/etag/index.js +week-3/mandatory/2-api/git-ignore/node_modules/etag/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/etag/package.json +week-3/mandatory/2-api/git-ignore/node_modules/etag/README.md +week-3/mandatory/2-api/git-ignore/node_modules/express/History.md +week-3/mandatory/2-api/git-ignore/node_modules/express/index.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/application.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/express.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/middleware/init.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/middleware/query.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/request.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/response.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/router/index.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/router/layer.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/router/route.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/utils.js +week-3/mandatory/2-api/git-ignore/node_modules/express/lib/view.js +week-3/mandatory/2-api/git-ignore/node_modules/express/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/express/package.json +week-3/mandatory/2-api/git-ignore/node_modules/express/Readme.md +week-3/mandatory/2-api/git-ignore/node_modules/finalhandler/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/finalhandler/index.js +week-3/mandatory/2-api/git-ignore/node_modules/finalhandler/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/finalhandler/package.json +week-3/mandatory/2-api/git-ignore/node_modules/finalhandler/README.md +week-3/mandatory/2-api/git-ignore/node_modules/forwarded/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/forwarded/index.js +week-3/mandatory/2-api/git-ignore/node_modules/forwarded/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/forwarded/package.json +week-3/mandatory/2-api/git-ignore/node_modules/forwarded/README.md +week-3/mandatory/2-api/git-ignore/node_modules/fresh/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/fresh/index.js +week-3/mandatory/2-api/git-ignore/node_modules/fresh/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/fresh/package.json +week-3/mandatory/2-api/git-ignore/node_modules/fresh/README.md +week-3/mandatory/2-api/git-ignore/node_modules/http-errors/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/http-errors/index.js +week-3/mandatory/2-api/git-ignore/node_modules/http-errors/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/http-errors/package.json +week-3/mandatory/2-api/git-ignore/node_modules/http-errors/README.md +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/Changelog.md +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/dbcs-codec.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/dbcs-data.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/index.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/internal.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/sbcs-codec.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/sbcs-data-generated.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/sbcs-data.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/tables/big5-added.json +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/tables/cp936.json +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/tables/cp949.json +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/tables/cp950.json +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/tables/eucjp.json +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/tables/gbk-added.json +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/tables/shiftjis.json +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/utf16.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/encodings/utf7.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/lib/bom-handling.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/lib/extend-node.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/lib/index.d.ts +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/lib/index.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/lib/streams.js +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/package.json +week-3/mandatory/2-api/git-ignore/node_modules/iconv-lite/README.md +week-3/mandatory/2-api/git-ignore/node_modules/inherits/inherits.js +week-3/mandatory/2-api/git-ignore/node_modules/inherits/inherits_browser.js +week-3/mandatory/2-api/git-ignore/node_modules/inherits/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/inherits/package.json +week-3/mandatory/2-api/git-ignore/node_modules/inherits/README.md +week-3/mandatory/2-api/git-ignore/node_modules/ipaddr.js/ipaddr.min.js +week-3/mandatory/2-api/git-ignore/node_modules/ipaddr.js/lib/ipaddr.js +week-3/mandatory/2-api/git-ignore/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +week-3/mandatory/2-api/git-ignore/node_modules/ipaddr.js/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/ipaddr.js/package.json +week-3/mandatory/2-api/git-ignore/node_modules/ipaddr.js/README.md +week-3/mandatory/2-api/git-ignore/node_modules/media-typer/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/media-typer/index.js +week-3/mandatory/2-api/git-ignore/node_modules/media-typer/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/media-typer/package.json +week-3/mandatory/2-api/git-ignore/node_modules/media-typer/README.md +week-3/mandatory/2-api/git-ignore/node_modules/merge-descriptors/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/merge-descriptors/index.js +week-3/mandatory/2-api/git-ignore/node_modules/merge-descriptors/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/merge-descriptors/package.json +week-3/mandatory/2-api/git-ignore/node_modules/merge-descriptors/README.md +week-3/mandatory/2-api/git-ignore/node_modules/methods/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/methods/index.js +week-3/mandatory/2-api/git-ignore/node_modules/methods/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/methods/package.json +week-3/mandatory/2-api/git-ignore/node_modules/methods/README.md +week-3/mandatory/2-api/git-ignore/node_modules/mime-db/db.json +week-3/mandatory/2-api/git-ignore/node_modules/mime-db/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/mime-db/index.js +week-3/mandatory/2-api/git-ignore/node_modules/mime-db/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/mime-db/package.json +week-3/mandatory/2-api/git-ignore/node_modules/mime-db/README.md +week-3/mandatory/2-api/git-ignore/node_modules/mime-types/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/mime-types/index.js +week-3/mandatory/2-api/git-ignore/node_modules/mime-types/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/mime-types/package.json +week-3/mandatory/2-api/git-ignore/node_modules/mime-types/README.md +week-3/mandatory/2-api/git-ignore/node_modules/mime/.npmignore +week-3/mandatory/2-api/git-ignore/node_modules/mime/CHANGELOG.md +week-3/mandatory/2-api/git-ignore/node_modules/mime/cli.js +week-3/mandatory/2-api/git-ignore/node_modules/mime/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/mime/mime.js +week-3/mandatory/2-api/git-ignore/node_modules/mime/package.json +week-3/mandatory/2-api/git-ignore/node_modules/mime/README.md +week-3/mandatory/2-api/git-ignore/node_modules/mime/src/build.js +week-3/mandatory/2-api/git-ignore/node_modules/mime/src/test.js +week-3/mandatory/2-api/git-ignore/node_modules/mime/types.json +week-3/mandatory/2-api/git-ignore/node_modules/ms/index.js +week-3/mandatory/2-api/git-ignore/node_modules/ms/license.md +week-3/mandatory/2-api/git-ignore/node_modules/ms/package.json +week-3/mandatory/2-api/git-ignore/node_modules/ms/readme.md +week-3/mandatory/2-api/git-ignore/node_modules/negotiator/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/negotiator/index.js +week-3/mandatory/2-api/git-ignore/node_modules/negotiator/lib/charset.js +week-3/mandatory/2-api/git-ignore/node_modules/negotiator/lib/encoding.js +week-3/mandatory/2-api/git-ignore/node_modules/negotiator/lib/language.js +week-3/mandatory/2-api/git-ignore/node_modules/negotiator/lib/mediaType.js +week-3/mandatory/2-api/git-ignore/node_modules/negotiator/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/negotiator/package.json +week-3/mandatory/2-api/git-ignore/node_modules/negotiator/README.md +week-3/mandatory/2-api/git-ignore/node_modules/on-finished/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/on-finished/index.js +week-3/mandatory/2-api/git-ignore/node_modules/on-finished/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/on-finished/package.json +week-3/mandatory/2-api/git-ignore/node_modules/on-finished/README.md +week-3/mandatory/2-api/git-ignore/node_modules/parseurl/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/parseurl/index.js +week-3/mandatory/2-api/git-ignore/node_modules/parseurl/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/parseurl/package.json +week-3/mandatory/2-api/git-ignore/node_modules/parseurl/README.md +week-3/mandatory/2-api/git-ignore/node_modules/path-to-regexp/History.md +week-3/mandatory/2-api/git-ignore/node_modules/path-to-regexp/index.js +week-3/mandatory/2-api/git-ignore/node_modules/path-to-regexp/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/path-to-regexp/package.json +week-3/mandatory/2-api/git-ignore/node_modules/path-to-regexp/Readme.md +week-3/mandatory/2-api/git-ignore/node_modules/proxy-addr/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/proxy-addr/index.js +week-3/mandatory/2-api/git-ignore/node_modules/proxy-addr/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/proxy-addr/package.json +week-3/mandatory/2-api/git-ignore/node_modules/proxy-addr/README.md +week-3/mandatory/2-api/git-ignore/node_modules/qs/.editorconfig +week-3/mandatory/2-api/git-ignore/node_modules/qs/.eslintignore +week-3/mandatory/2-api/git-ignore/node_modules/qs/.eslintrc +week-3/mandatory/2-api/git-ignore/node_modules/qs/CHANGELOG.md +week-3/mandatory/2-api/git-ignore/node_modules/qs/dist/qs.js +week-3/mandatory/2-api/git-ignore/node_modules/qs/lib/formats.js +week-3/mandatory/2-api/git-ignore/node_modules/qs/lib/index.js +week-3/mandatory/2-api/git-ignore/node_modules/qs/lib/parse.js +week-3/mandatory/2-api/git-ignore/node_modules/qs/lib/stringify.js +week-3/mandatory/2-api/git-ignore/node_modules/qs/lib/utils.js +week-3/mandatory/2-api/git-ignore/node_modules/qs/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/qs/package.json +week-3/mandatory/2-api/git-ignore/node_modules/qs/README.md +week-3/mandatory/2-api/git-ignore/node_modules/qs/test/.eslintrc +week-3/mandatory/2-api/git-ignore/node_modules/qs/test/index.js +week-3/mandatory/2-api/git-ignore/node_modules/qs/test/parse.js +week-3/mandatory/2-api/git-ignore/node_modules/qs/test/stringify.js +week-3/mandatory/2-api/git-ignore/node_modules/qs/test/utils.js +week-3/mandatory/2-api/git-ignore/node_modules/range-parser/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/range-parser/index.js +week-3/mandatory/2-api/git-ignore/node_modules/range-parser/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/range-parser/package.json +week-3/mandatory/2-api/git-ignore/node_modules/range-parser/README.md +week-3/mandatory/2-api/git-ignore/node_modules/raw-body/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/raw-body/index.d.ts +week-3/mandatory/2-api/git-ignore/node_modules/raw-body/index.js +week-3/mandatory/2-api/git-ignore/node_modules/raw-body/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/raw-body/package.json +week-3/mandatory/2-api/git-ignore/node_modules/raw-body/README.md +week-3/mandatory/2-api/git-ignore/node_modules/safe-buffer/index.d.ts +week-3/mandatory/2-api/git-ignore/node_modules/safe-buffer/index.js +week-3/mandatory/2-api/git-ignore/node_modules/safe-buffer/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/safe-buffer/package.json +week-3/mandatory/2-api/git-ignore/node_modules/safe-buffer/README.md +week-3/mandatory/2-api/git-ignore/node_modules/safer-buffer/dangerous.js +week-3/mandatory/2-api/git-ignore/node_modules/safer-buffer/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/safer-buffer/package.json +week-3/mandatory/2-api/git-ignore/node_modules/safer-buffer/Porting-Buffer.md +week-3/mandatory/2-api/git-ignore/node_modules/safer-buffer/Readme.md +week-3/mandatory/2-api/git-ignore/node_modules/safer-buffer/safer.js +week-3/mandatory/2-api/git-ignore/node_modules/safer-buffer/tests.js +week-3/mandatory/2-api/git-ignore/node_modules/send/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/send/index.js +week-3/mandatory/2-api/git-ignore/node_modules/send/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/send/node_modules/ms/index.js +week-3/mandatory/2-api/git-ignore/node_modules/send/node_modules/ms/license.md +week-3/mandatory/2-api/git-ignore/node_modules/send/node_modules/ms/package.json +week-3/mandatory/2-api/git-ignore/node_modules/send/node_modules/ms/readme.md +week-3/mandatory/2-api/git-ignore/node_modules/send/package.json +week-3/mandatory/2-api/git-ignore/node_modules/send/README.md +week-3/mandatory/2-api/git-ignore/node_modules/serve-static/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/serve-static/index.js +week-3/mandatory/2-api/git-ignore/node_modules/serve-static/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/serve-static/package.json +week-3/mandatory/2-api/git-ignore/node_modules/serve-static/README.md +week-3/mandatory/2-api/git-ignore/node_modules/setprototypeof/index.d.ts +week-3/mandatory/2-api/git-ignore/node_modules/setprototypeof/index.js +week-3/mandatory/2-api/git-ignore/node_modules/setprototypeof/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/setprototypeof/package.json +week-3/mandatory/2-api/git-ignore/node_modules/setprototypeof/README.md +week-3/mandatory/2-api/git-ignore/node_modules/setprototypeof/test/index.js +week-3/mandatory/2-api/git-ignore/node_modules/statuses/codes.json +week-3/mandatory/2-api/git-ignore/node_modules/statuses/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/statuses/index.js +week-3/mandatory/2-api/git-ignore/node_modules/statuses/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/statuses/package.json +week-3/mandatory/2-api/git-ignore/node_modules/statuses/README.md +week-3/mandatory/2-api/git-ignore/node_modules/toidentifier/index.js +week-3/mandatory/2-api/git-ignore/node_modules/toidentifier/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/toidentifier/package.json +week-3/mandatory/2-api/git-ignore/node_modules/toidentifier/README.md +week-3/mandatory/2-api/git-ignore/node_modules/type-is/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/type-is/index.js +week-3/mandatory/2-api/git-ignore/node_modules/type-is/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/type-is/package.json +week-3/mandatory/2-api/git-ignore/node_modules/type-is/README.md +week-3/mandatory/2-api/git-ignore/node_modules/unpipe/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/unpipe/index.js +week-3/mandatory/2-api/git-ignore/node_modules/unpipe/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/unpipe/package.json +week-3/mandatory/2-api/git-ignore/node_modules/unpipe/README.md +week-3/mandatory/2-api/git-ignore/node_modules/utils-merge/.npmignore +week-3/mandatory/2-api/git-ignore/node_modules/utils-merge/index.js +week-3/mandatory/2-api/git-ignore/node_modules/utils-merge/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/utils-merge/package.json +week-3/mandatory/2-api/git-ignore/node_modules/utils-merge/README.md +week-3/mandatory/2-api/git-ignore/node_modules/vary/HISTORY.md +week-3/mandatory/2-api/git-ignore/node_modules/vary/index.js +week-3/mandatory/2-api/git-ignore/node_modules/vary/LICENSE +week-3/mandatory/2-api/git-ignore/node_modules/vary/package.json +week-3/mandatory/2-api/git-ignore/node_modules/vary/README.md diff --git a/week-3/mandatory/2-api/cyf-ecommerce-api/cyf_ecommerce.sql b/week-3/mandatory/2-api/cyf-ecommerce-api/cyf_ecommerce.sql new file mode 100644 index 00000000..77253e2e --- /dev/null +++ b/week-3/mandatory/2-api/cyf-ecommerce-api/cyf_ecommerce.sql @@ -0,0 +1,105 @@ +drop table if exists order_items; +drop table if exists orders; +drop table if exists customers; +drop table if exists products; +drop table if exists suppliers; + +CREATE TABLE customers ( + id SERIAL PRIMARY KEY, + name VARCHAR(50) NOT NULL, + address VARCHAR(120), + city VARCHAR(30), + country VARCHAR(20) +); + +CREATE TABLE suppliers ( + id SERIAL PRIMARY KEY, + supplier_name VARCHAR(100) NOT NULL, + country VARCHAR(20) NOT NULL +); + +CREATE TABLE products ( + id SERIAL PRIMARY KEY, + product_name VARCHAR(100) NOT NULL, + unit_price INT NOT NULL, + supplier_id INT REFERENCES suppliers(id) +); + +CREATE TABLE orders ( + id SERIAL PRIMARY KEY, + order_date DATE NOT NULL, + order_reference VARCHAR(10) NOT NULL, + customer_id INT REFERENCES customers(id) +); + +CREATE TABLE order_items ( + id SERIAL PRIMARY KEY, + order_id INT REFERENCES orders(id), + product_id INT REFERENCES products(id), + quantity INT NOT NULL +); + +INSERT INTO customers (name, address, city, country) VALUES ('Guy Crawford','770-2839 Ligula Road','Paris','France'); +INSERT INTO customers (name, address, city, country) VALUES ('Hope Crosby','P.O. Box 276, 4976 Sit Rd.','Steyr','United Kingdom'); +INSERT INTO customers (name, address, city, country) VALUES ('Britanney Kirkland','P.O. Box 577, 5601 Sem, St.','Little Rock','United Kingdom'); +INSERT INTO customers (name, address, city, country) VALUES ('Amber Tran','6967 Ac Road','Villafranca Asti','United States'); +INSERT INTO customers (name, address, city, country) VALUES ('Edan Higgins','Ap #840-3255 Tincidunt St.','Arles','United States'); +INSERT INTO customers (name, address, city, country) VALUES ('Quintessa Austin','597-2737 Nunc Rd.','Saint-Marc','United Kingdom'); + +INSERT INTO suppliers (supplier_name, country) VALUES ('Amazon', 'United States'); +INSERT INTO suppliers (supplier_name, country) VALUES ('Taobao', 'China'); +INSERT INTO suppliers (supplier_name, country) VALUES ('Argos', 'United Kingdom'); +INSERT INTO suppliers (supplier_name, country) VALUES ('Sainsburys', 'United Kingdom'); + +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Tee Shirt Olympic Games', 20, 1); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Tee Shirt Olympic Games', 18, 2); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Tee Shirt Olympic Games', 21, 3); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Mobile Phone X', 299, 1); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Mobile Phone X', 249, 4); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Super warm socks', 10, 1); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Super warm socks', 5, 2); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Super warm socks', 8, 3); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Super warm socks', 10, 4); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Le Petit Prince', 10, 1); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Le Petit Prince', 10, 4); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Ball', 14, 1); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Ball', 15, 4); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Ball', 20, 2); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Javascript Book', 40, 1); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Javascript Book', 39, 3); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Javascript Book', 41, 2); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Coffee Cup', 3, 1); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Coffee Cup', 4, 2); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Coffee Cup', 4, 3); +INSERT INTO products (product_name, unit_price, supplier_id) VALUES ('Coffee Cup', 5, 4); + +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-06-01', 'ORD001', 1); +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-07-15', 'ORD002', 1); +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-07-11', 'ORD003', 1); +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-05-24', 'ORD004', 2); +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-05-30', 'ORD005', 3); +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-07-05', 'ORD006', 4); +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-04-05', 'ORD007', 4); +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-07-23', 'ORD008', 5); +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-07-24', 'ORD009', 5); +INSERT INTO orders (order_date, order_reference, customer_id) VALUES ('2019-05-10', 'ORD010', 5); + +INSERT INTO order_items (order_id, product_id, quantity) VALUES(1, 2, 1); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(1, 7, 5); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(2, 8, 4); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(2, 11, 1); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(3, 20, 10); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(3, 14, 2); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(4, 4, 1); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(5, 16, 2); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(5, 10, 1); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(6, 19, 3); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(6, 17, 1); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(6, 11, 1); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(6, 9, 3); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(7, 8, 15); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(8, 1, 1); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(8, 5, 1); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(9, 13, 2); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(10, 14, 1); +INSERT INTO order_items (order_id, product_id, quantity) VALUES(10, 6, 5); diff --git a/week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ps/lib/index.js b/week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ps/lib/index.js new file mode 100644 index 00000000..47d44255 --- /dev/null +++ b/week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ps/lib/index.js @@ -0,0 +1,155 @@ + +const { spawn } = require('child_process'); + +const whitespace = /\s+/; + +const validFields = new Set([ + 'group', 'ppid', 'user', 'args', 'comm', 'rgroup', 'nice', 'pid', 'pgid', 'etime', + 'ruser', 'time', 'tty', 'vsz' +]); + +const lookup = async ({ pid, ppid, user, group, command, all, fields = ['pid', 'ppid', 'comm'] }) => { + if (! fields.every((field) => validFields.has(field))) { + throw new Error('ps - invalid field provided'); + } + + if (ppid && fields.indexOf('ppid') < 0) { + fields.push('ppid'); + } + + const fieldOptions = fields.reduce(reduceFieldsToOptions, [ ]); + + if (pid || pid === 0) { + const output = await ps([ '-p', processPids(pid), ...fieldOptions ]); + + return parseGrid(output); + } + + if (ppid || ppid === 0) { + const pids = processPids(ppid); + const ppidSet = new Set(String(pids).split(',')); + const output = await ps([ '-p', pids, ...fieldOptions ]); + const processes = parseGrid(output); + + return processes.filter((proc) => { + return ppidSet.has(proc.ppid); + }); + } + + if (all) { + const output = await ps([ '-e', ...fieldOptions ]); + + return parseGrid(output); + } + + if (user) { + const output = await ps([ '-u', user, ...fieldOptions ]); + + return parseGrid(output); + } + + if (group) { + const output = await ps([ '-g', group, ...fieldOptions ]); + + return parseGrid(output); + } + + if (command) { + const output = await ps([ '-C', command, ...fieldOptions ]); + + return parseGrid(output); + } + + throw new Error('ps - must provide a search query; one of "pid", "ppid", "all", "user", "group", "command"'); +}; + +// Export +module.exports = lookup; +lookup.lookup = lookup; + +class Process { + constructor(fields) { + Object.assign(this, fields); + Object.freeze(this); + } +} + +// Turns ['comm', 'pid'] into ['-o', 'comm', '-o', 'pid'] +const reduceFieldsToOptions = (options, field) => { + options.push('-o', field); + + return options; +}; + +const ps = (args, callback) => { + return new Promise((resolve, reject) => { + const child = spawn('ps', args); + + let stdout = ''; + let stderr = ''; + + child.on('error', (error) => { + reject(error); + }); + + child.stdout.on('data', (data) => stdout += data); + child.stderr.on('data', (data) => stderr += data); + + child.on('close', (code) => { + stderr = stderr.trim(); + + if (stderr) { + return reject(new Error(stderr)); + } + + resolve(stdout.trim()); + }); + }); +}; + +const isValidPid = (pid) => { + const int = parseInt(pid, 10); + + return ! isNaN(int) && String(int) === String(pid); +}; + +const processPids = (pid) => { + if (Array.isArray(pid)) { + if (! pid.every(isValidPid)) { + throw new Error('ps - pid must be a valid integer value'); + } + + return pid.join(','); + } + + if (! isValidPid(pid)) { + throw new Error('ps - pid must be a valid integer value'); + } + + return pid; +} + +// Parses the resulting output from ps into `Process` objects +const parseGrid = (output) => { + if (! output) { + return [ ]; + } + + const lines = output.split('\n'); + const header = lines.shift() + .trim() + .split(whitespace) + .map((col) => col.toLowerCase()); + + return lines.map((line) => { + const proc = { }; + + line.trim().split(whitespace).forEach((item, index) => { + if (item) { + proc[header[index]] = item; + } + }); + + return new Process(proc); + }); +}; diff --git a/week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ps/package.json b/week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ps/package.json new file mode 100644 index 00000000..0835770e --- /dev/null +++ b/week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ps/package.json @@ -0,0 +1,53 @@ +{ + "_from": "ps", + "_id": "ps@1.0.0", + "_inBundle": false, + "_integrity": "sha512-H4X+wwtupakW7DvEkswKuYjfGO83cVkyQUoDouys8bFrFFBTGPq9NxNaM+1yfX8Tn+7Vf6zcq2IjRaNr2nF+RA==", + "_location": "/ps", + "_phantomChildren": {}, + "_requested": { + "type": "tag", + "registry": true, + "raw": "ps", + "name": "ps", + "escapedName": "ps", + "rawSpec": "", + "saveSpec": null, + "fetchSpec": "latest" + }, + "_requiredBy": [ + "#USER", + "/" + ], + "_resolved": "https://registry.npmjs.org/ps/-/ps-1.0.0.tgz", + "_shasum": "fdec82fe059e564ad2618dab2cc3d4af308f55fa", + "_spec": "ps", + "_where": "/home/ameer/Desktop/SQL/Databases-Homework/week-3/mandatory/2-api/cyf-ecommerce-api", + "author": { + "name": "James Brumond" + }, + "bugs": { + "url": "https://github.com/UmbraEngineering/ps/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A process lookup utility", + "homepage": "https://github.com/UmbraEngineering/ps#readme", + "keywords": [ + "ps", + "process", + "lookup", + "pid" + ], + "license": "MIT", + "main": "lib/index.js", + "name": "ps", + "repository": { + "type": "git", + "url": "git://github.com/UmbraEngineering/ps.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "version": "1.0.0" +} diff --git a/week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ps/readme.md b/week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ps/readme.md new file mode 100644 index 00000000..0ad6a795 --- /dev/null +++ b/week-3/mandatory/2-api/cyf-ecommerce-api/node_modules/ps/readme.md @@ -0,0 +1,35 @@ +# ps + +A Node.js module for looking up running processes. + +## Install + +```bash +$ npm install ps +``` + +## Usage + +```javascript +const ps = require('ps'); + +const [ proc ] = await ps({ pid: 12345 }); + +console.log(proc); // { "pid": 12345, "comm": "node" } + +const procs = await ps({ pid: [ 23456, 34567 ] }); + +console.log(procs); // [ { "pid": 23456, "comm": "node" }, { "pid": 34567, "comm": "node" } + +// Available options +{ + pid: 12345 || [ 23456, 34567 ], // Search by pid + ppid: 12345 || [ 23456, 34567 ], // Search by parent pid + user: "bob", // Search by user + group: "users", // Search by group + command: "node", // Search by command + all: true, // List all processes + fields: [ 'pid', 'comm' ] // The fields to return +} +``` + diff --git a/week-3/mandatory/2-api/cyf-ecommerce-api/package-lock.json b/week-3/mandatory/2-api/cyf-ecommerce-api/package-lock.json new file mode 100644 index 00000000..876059c2 --- /dev/null +++ b/week-3/mandatory/2-api/cyf-ecommerce-api/package-lock.json @@ -0,0 +1,509 @@ +{ + "name": "cyf-ecommerce-api", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pg": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.5.1.tgz", + "integrity": "sha512-9wm3yX9lCfjvA98ybCyw2pADUivyNWT/yIP4ZcDVpMN0og70BUWYEGXPCTAQdGTAqnytfRADb7NERrY1qxhIqw==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.4.0", + "pg-pool": "^3.2.2", + "pg-protocol": "^1.4.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + } + }, + "pg-connection-string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.4.0.tgz", + "integrity": "sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.2.2.tgz", + "integrity": "sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA==" + }, + "pg-protocol": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.4.0.tgz", + "integrity": "sha512-El+aXWcwG/8wuFICMQjM5ZSAm6OWiJicFdNYo+VY3QP+8vI4SvLIWVe51PppTzMhikUJR+PsyIFKqfdXPz/yxA==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", + "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", + "requires": { + "split2": "^3.1.1" + } + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "ps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ps/-/ps-1.0.0.tgz", + "integrity": "sha512-H4X+wwtupakW7DvEkswKuYjfGO83cVkyQUoDouys8bFrFFBTGPq9NxNaM+1yfX8Tn+7Vf6zcq2IjRaNr2nF+RA==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "requires": { + "readable-stream": "^3.0.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/week-3/mandatory/2-api/cyf-ecommerce-api/package.json b/week-3/mandatory/2-api/cyf-ecommerce-api/package.json new file mode 100644 index 00000000..dd1b17a6 --- /dev/null +++ b/week-3/mandatory/2-api/cyf-ecommerce-api/package.json @@ -0,0 +1,17 @@ +{ + "name": "cyf-ecommerce-api", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "body-parser": "^1.19.0", + "express": "^4.17.1", + "pg": "^8.5.1", + "ps": "^1.0.0" + } +} diff --git a/week-3/mandatory/2-api/cyf-ecommerce-api/server.js b/week-3/mandatory/2-api/cyf-ecommerce-api/server.js new file mode 100644 index 00000000..9ce33c74 --- /dev/null +++ b/week-3/mandatory/2-api/cyf-ecommerce-api/server.js @@ -0,0 +1,164 @@ +const express = require("express"); +const app = express(); +const bodyParser = require("body-parser"); +app.use(bodyParser.json()); +const { Pool } = require('pg'); + +const pool = new Pool({ + user: 'ameer', + host: 'localhost', + database: 'cyf_ecommerce', + password: 'ameer', + port: 5432 +}); + +/** Start SQL Week-3 Homework **/ + +/* Update the previous GET endpoint /products to filter the list of products by name using a query parameter, for example /products?name=Cup. This endpoint should still work even if you don't use the name query parameter! */ +app.get("/products", function(req, res) { + const productNameQuery = req.query.name; + let query = "SELECT products.product_name, suppliers.supplier_name FROM products INNER JOIN suppliers on products.supplier_id = suppliers.id ORDER BY product_name" + if(productNameQuery){ + query = `SELECT products.product_name, suppliers.supplier_name FROM products INNER JOIN suppliers on products.supplier_id = suppliers.id WHERE products.product_name LIKE '%${productNameQuery}%' ORDER BY product_name` + } + pool.query(query) + .then((result) => res.json(result.rows)) + .catch((e) => console.error(e)); +}); +/*Add a new GET endpoint /customers/:customerId to load a single customer by ID. */ +app.get("/customers/:customerId", function (req, res) { + const customerId = req.params.customerId; + pool + .query("SELECT * FROM customers WHERE id=$1", [customerId]) + .then((result) => res.json(result.rows)) + .catch((e) => console.error(e)); +}); +/* Add a new POST endpoint /customers to create a new customer. */ +app.post("/customers", function (req, res) { + const newCustomerName = req.body.name; + const newAddress = req.body.address; + const newCity = req.body.city; + const newCountry = req.body.country; + + pool.query("SELECT * FROM customers WHERE name=$1", [newCustomerName]) + .then((result) => { + if (result.rows.length > 0) { + return res.status(400).send("A customer with the same name already exists!"); + } else { + const query = + "INSERT INTO customers (name, address, city, country) VALUES ($1, $2, $3, $4)"; + pool.query(query, [newCustomerName, newAddress, newCity, newCountry]) + .then(() => res.send("customer Added!")) + .catch((e) => console.error(e)); + } + }); +}); +/* Add a new POST endpoint /products to create a new product (with a product name, a price and a supplier id). Check that the price is a positive integer and that the supplier ID exists in the database, otherwise return an error. */ +app.post('/products', function (req, res) { + const newProductName = req.body.product_name; + const newProductPrice = req.body.unit_price; + const newProductSupplier = req.body.supplier_id; + + pool + .query('SELECT * FROM products WHERE supplier_id=$1', [newProductSupplier]) + .then((result) => { + if (result.rows.length === 0) { + return res.status(400).send("This supplier does not exist."); + } else if (!Number.isInteger(newProductPrice) || newProductPrice <= 0) { + return res.status(400).send("Invalid Price"); + } else { + const query ="INSERT INTO products(product_name, unit_price, supplier_id) VALUES ($1, $2, $3)"; + pool + .query(query, [newProductName, newProductPrice, newProductSupplier]) + .then(() => res.send("Product created!")) + .catch((e) => console.error(e)); + } + }); +}); +/* Add a new POST endpoint /customers/:customerId/orders to create a new order (including an order date, and an order reference) for a customer. Check that the customerId corresponds to an existing customer or return an error. */ +app.post('/customers/:customerId/orders', function (req, res) { + const newOrderDate = req.body.order_date; + const newOrderReference = req.body.order_reference; + const customerId = req.params.customerId; + + pool + .query('SELECT * FROM customers WHERE id = $1', [customerId]) + .then((result) => { + if (result.rows.length === 0) { + return res.status(400).send("This customer does not exist."); + } else { + const query = "INSERT INTO orders (order_date, order_reference, customer_id) VALUES ($1, $2, $3)"; + pool + .query(query, [newOrderDate, newOrderReference, customerId]) + .then(() => res.send("Order created!")) + .catch((e) => console.error(e)); + } + }); +}); +/* Add a new PUT endpoint /customers/:customerId to update an existing customer (name, address, city and country). */ +app.put("/customers/:customerId", function (req, res) { + const customerId = req.params.customerId; + const newName = req.body.name; + const newAddress = req.body.address; + const newCity = req.body.city; + const newCountry= req.body.country; + let sql = ""; + if(newName !== undefined){ + sql += "name ='" + newName + "'," + } + if(newAddress !== undefined){ + sql += "address ='" + newAddress + "'," + } + if(newCity !== undefined){ + sql += "city ='" + newCity + "'," + } + if(newCountry !== undefined){ + sql += "country ='" + newCountry + "'," + } + sql = sql.substring(0, sql.length-1); + sql= "UPDATE customers SET " + sql + " WHERE id = "+ customerId; + console.log(sql); + pool + .query(sql) + .then(() => res.send(`Customer ${customerId} updated!`)) + .catch((e) => console.error(e)); +}); +/* Add a new DELETE endpoint /orders/:orderId to delete an existing order along all the associated order items. */ +app.delete("/orders/:orderId", function (req, res) { + const orderId = req.params.orderId; + pool + .query("DELETE FROM order_items WHERE order_id=$1", [orderId]) + .then(() => { + pool + .query("DELETE FROM orders WHERE id=$1", [orderId]) + .then(() => res.send(`Order ${orderId} deleted!`)) + .catch((e) => console.error(e)); + }) + .catch((e) => console.error(e)); +}); +/* Add a new DELETE endpoint /customers/:customerId to delete an existing customer only if this customer doesn't have orders. */ +app.delete("/customers/:customerId", function (req, res) { + const customerId = req.params.customerId; + pool + .query("DELETE FROM customers WHERE id=$1", [customerId]) + .then(() => res.send(`Customer ${customerId} deleted!`)) + .catch((e) => console.error(e)); +}); +/* Add a new GET endpoint /customers/:customerId/orders to load all the orders along the items in the orders of a specific customer. Especially, the following information should be returned: order references, order dates, product names, unit prices, suppliers and quantities. */ +app.get('/customers/:customerId/orders', (req, res)=> { + const {customerId} = req.params; + let query = 'SELECT c.name, o.order_date, o.order_reference, oi.quantity, p.product_name, p.unit_price, s.supplier_name FROM customers AS c INNER JOIN orders AS o ON c.id=o.customer_id INNER JOIN order_items AS oi ON o.id=oi.order_id INNER JOIN products AS p ON p.id=oi.product_id INNER JOIN suppliers AS s ON s.id=p.supplier_id WHERE c.id=$1'; + + pool + .query(query, [customerId] ) + .then((result) => res.json(result.rows)) + .catch(e => { + console.error(e); + }) +}); +/** End of SQL Week-3 Homework **/ +app.listen(3000, function() { +console.log("Server is listening on port 3000. Ready to accept requests!"); +}); + +