From edafd20501bfd385f01aefd0931fbaade1797f27 Mon Sep 17 00:00:00 2001 From: Andrew Trieu Date: Tue, 30 May 2023 08:06:35 +0300 Subject: [PATCH] Upload part 3 --- .gitignore | 3 +- part3/phonebook/.eslintignore | 1 + part3/phonebook/.eslintrc.js | 40 + part3/phonebook/README.md | 3 + part3/phonebook/index.js | 171 +- part3/phonebook/models/phonebook.js | 37 + part3/phonebook/node_modules/.bin/dockerfile | 1 - part3/phonebook/node_modules/.bin/ejs | 1 - part3/phonebook/node_modules/.bin/jake | 1 - .../phonebook/node_modules/.package-lock.json | 1625 ++++- .../@flydotio/dockerfile/README.md | 59 - .../node_modules/@flydotio/dockerfile/gdf.js | 417 -- .../@flydotio/dockerfile/index.js | 81 - .../dockerfile/node_modules/chalk/license | 9 - .../node_modules/chalk/package.json | 81 - .../dockerfile/node_modules/chalk/readme.md | 325 - .../node_modules/chalk/source/index.d.ts | 320 - .../node_modules/chalk/source/index.js | 225 - .../node_modules/chalk/source/utilities.js | 33 - .../source/vendor/ansi-styles/index.d.ts | 236 - .../chalk/source/vendor/ansi-styles/index.js | 223 - .../source/vendor/supports-color/browser.d.ts | 1 - .../source/vendor/supports-color/browser.js | 30 - .../source/vendor/supports-color/index.d.ts | 55 - .../source/vendor/supports-color/index.js | 181 - .../@flydotio/dockerfile/package.json | 47 - .../dockerfile/templates/.dockerignore.ejs | 12 - .../dockerfile/templates/Dockerfile.ejs | 94 - .../templates/docker-entrypoint.ejs | 20 - .../phonebook/node_modules/async/CHANGELOG.md | 348 - part3/phonebook/node_modules/async/LICENSE | 19 - part3/phonebook/node_modules/async/README.md | 59 - part3/phonebook/node_modules/async/all.js | 119 - .../phonebook/node_modules/async/allLimit.js | 46 - .../phonebook/node_modules/async/allSeries.js | 45 - part3/phonebook/node_modules/async/any.js | 122 - .../phonebook/node_modules/async/anyLimit.js | 47 - .../phonebook/node_modules/async/anySeries.js | 46 - part3/phonebook/node_modules/async/apply.js | 55 - .../phonebook/node_modules/async/applyEach.js | 57 - .../node_modules/async/applyEachSeries.js | 37 - .../phonebook/node_modules/async/asyncify.js | 118 - part3/phonebook/node_modules/async/auto.js | 333 - .../node_modules/async/autoInject.js | 182 - part3/phonebook/node_modules/async/bower.json | 17 - part3/phonebook/node_modules/async/cargo.js | 63 - .../node_modules/async/cargoQueue.js | 71 - part3/phonebook/node_modules/async/compose.js | 55 - part3/phonebook/node_modules/async/concat.js | 115 - .../node_modules/async/concatLimit.js | 60 - .../node_modules/async/concatSeries.js | 41 - .../phonebook/node_modules/async/constant.js | 55 - part3/phonebook/node_modules/async/detect.js | 96 - .../node_modules/async/detectLimit.js | 48 - .../node_modules/async/detectSeries.js | 47 - part3/phonebook/node_modules/async/dir.js | 43 - .../node_modules/async/dist/async.js | 6059 ----------------- .../node_modules/async/dist/async.min.js | 1 - .../node_modules/async/dist/async.mjs | 5947 ---------------- .../phonebook/node_modules/async/doDuring.js | 68 - part3/phonebook/node_modules/async/doUntil.js | 46 - .../phonebook/node_modules/async/doWhilst.js | 68 - part3/phonebook/node_modules/async/during.js | 78 - part3/phonebook/node_modules/async/each.js | 129 - .../phonebook/node_modules/async/eachLimit.js | 50 - part3/phonebook/node_modules/async/eachOf.js | 185 - .../node_modules/async/eachOfLimit.js | 47 - .../node_modules/async/eachOfSeries.js | 39 - .../node_modules/async/eachSeries.js | 44 - .../node_modules/async/ensureAsync.js | 67 - part3/phonebook/node_modules/async/every.js | 119 - .../node_modules/async/everyLimit.js | 46 - .../node_modules/async/everySeries.js | 45 - part3/phonebook/node_modules/async/filter.js | 93 - .../node_modules/async/filterLimit.js | 45 - .../node_modules/async/filterSeries.js | 43 - part3/phonebook/node_modules/async/find.js | 96 - .../phonebook/node_modules/async/findLimit.js | 48 - .../node_modules/async/findSeries.js | 47 - part3/phonebook/node_modules/async/flatMap.js | 115 - .../node_modules/async/flatMapLimit.js | 60 - .../node_modules/async/flatMapSeries.js | 41 - part3/phonebook/node_modules/async/foldl.js | 153 - part3/phonebook/node_modules/async/foldr.js | 41 - part3/phonebook/node_modules/async/forEach.js | 129 - .../node_modules/async/forEachLimit.js | 50 - .../phonebook/node_modules/async/forEachOf.js | 185 - .../node_modules/async/forEachOfLimit.js | 47 - .../node_modules/async/forEachOfSeries.js | 39 - .../node_modules/async/forEachSeries.js | 44 - part3/phonebook/node_modules/async/forever.js | 68 - part3/phonebook/node_modules/async/groupBy.js | 108 - .../node_modules/async/groupByLimit.js | 71 - .../node_modules/async/groupBySeries.js | 36 - part3/phonebook/node_modules/async/index.js | 588 -- part3/phonebook/node_modules/async/inject.js | 153 - .../async/internal/DoublyLinkedList.js | 92 - .../node_modules/async/internal/Heap.js | 120 - .../node_modules/async/internal/applyEach.js | 29 - .../async/internal/asyncEachOfLimit.js | 75 - .../node_modules/async/internal/awaitify.js | 27 - .../node_modules/async/internal/breakLoop.js | 10 - .../async/internal/consoleFunc.js | 31 - .../async/internal/createTester.js | 40 - .../async/internal/eachOfLimit.js | 90 - .../node_modules/async/internal/filter.js | 55 - .../async/internal/getIterator.js | 11 - .../async/internal/initialParams.js | 14 - .../async/internal/isArrayLike.js | 10 - .../node_modules/async/internal/iterator.js | 57 - .../node_modules/async/internal/map.js | 30 - .../node_modules/async/internal/once.js | 17 - .../node_modules/async/internal/onlyOnce.js | 15 - .../node_modules/async/internal/parallel.js | 34 - .../async/internal/promiseCallback.js | 23 - .../node_modules/async/internal/queue.js | 294 - .../node_modules/async/internal/range.js | 14 - .../node_modules/async/internal/reject.js | 26 - .../async/internal/setImmediate.js | 34 - .../async/internal/withoutIndex.js | 10 - .../node_modules/async/internal/wrapAsync.js | 34 - part3/phonebook/node_modules/async/log.js | 41 - part3/phonebook/node_modules/async/map.js | 142 - .../phonebook/node_modules/async/mapLimit.js | 45 - .../phonebook/node_modules/async/mapSeries.js | 44 - .../phonebook/node_modules/async/mapValues.js | 152 - .../node_modules/async/mapValuesLimit.js | 61 - .../node_modules/async/mapValuesSeries.js | 37 - part3/phonebook/node_modules/async/memoize.js | 91 - .../phonebook/node_modules/async/nextTick.js | 52 - .../phonebook/node_modules/async/package.json | 75 - .../phonebook/node_modules/async/parallel.js | 180 - .../node_modules/async/parallelLimit.js | 41 - .../node_modules/async/priorityQueue.js | 86 - part3/phonebook/node_modules/async/queue.js | 167 - part3/phonebook/node_modules/async/race.js | 67 - part3/phonebook/node_modules/async/reduce.js | 153 - .../node_modules/async/reduceRight.js | 41 - part3/phonebook/node_modules/async/reflect.js | 78 - .../node_modules/async/reflectAll.js | 93 - part3/phonebook/node_modules/async/reject.js | 87 - .../node_modules/async/rejectLimit.js | 45 - .../node_modules/async/rejectSeries.js | 43 - part3/phonebook/node_modules/async/retry.js | 159 - .../phonebook/node_modules/async/retryable.js | 77 - part3/phonebook/node_modules/async/select.js | 93 - .../node_modules/async/selectLimit.js | 45 - .../node_modules/async/selectSeries.js | 43 - part3/phonebook/node_modules/async/seq.js | 79 - part3/phonebook/node_modules/async/series.js | 186 - .../node_modules/async/setImmediate.js | 45 - part3/phonebook/node_modules/async/some.js | 122 - .../phonebook/node_modules/async/someLimit.js | 47 - .../node_modules/async/someSeries.js | 46 - part3/phonebook/node_modules/async/sortBy.js | 190 - part3/phonebook/node_modules/async/timeout.js | 89 - part3/phonebook/node_modules/async/times.js | 50 - .../node_modules/async/timesLimit.js | 43 - .../node_modules/async/timesSeries.js | 32 - .../phonebook/node_modules/async/transform.js | 173 - part3/phonebook/node_modules/async/tryEach.js | 78 - .../phonebook/node_modules/async/unmemoize.js | 25 - part3/phonebook/node_modules/async/until.js | 61 - .../phonebook/node_modules/async/waterfall.js | 105 - part3/phonebook/node_modules/async/whilst.js | 78 - .../phonebook/node_modules/async/wrapSync.js | 118 - .../phonebook/node_modules/cliui/CHANGELOG.md | 139 - .../phonebook/node_modules/cliui/LICENSE.txt | 14 - part3/phonebook/node_modules/cliui/README.md | 141 - .../node_modules/cliui/build/index.cjs | 302 - .../node_modules/cliui/build/index.d.cts | 43 - .../node_modules/cliui/build/lib/index.js | 287 - .../cliui/build/lib/string-utils.js | 27 - part3/phonebook/node_modules/cliui/index.mjs | 13 - .../cliui/node_modules/ansi-regex/index.d.ts | 37 - .../cliui/node_modules/ansi-regex/index.js | 10 - .../cliui/node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 55 - .../cliui/node_modules/ansi-regex/readme.md | 78 - .../is-fullwidth-code-point/index.d.ts | 17 - .../is-fullwidth-code-point/index.js | 50 - .../is-fullwidth-code-point/license | 9 - .../is-fullwidth-code-point/package.json | 42 - .../is-fullwidth-code-point/readme.md | 39 - .../node_modules/string-width/index.d.ts | 29 - .../cliui/node_modules/string-width/index.js | 47 - .../cliui/node_modules/string-width/license | 9 - .../node_modules/string-width/package.json | 56 - .../cliui/node_modules/string-width/readme.md | 50 - .../cliui/node_modules/strip-ansi/index.d.ts | 17 - .../cliui/node_modules/strip-ansi/index.js | 4 - .../cliui/node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 54 - .../cliui/node_modules/strip-ansi/readme.md | 46 - .../phonebook/node_modules/cliui/package.json | 83 - .../node_modules/diff/CONTRIBUTING.md | 39 - part3/phonebook/node_modules/diff/LICENSE | 31 - part3/phonebook/node_modules/diff/README.md | 211 - .../phonebook/node_modules/diff/dist/diff.js | 1627 ----- .../node_modules/diff/dist/diff.min.js | 38 - .../node_modules/diff/lib/convert/dmp.js | 32 - .../node_modules/diff/lib/convert/xml.js | 42 - .../node_modules/diff/lib/diff/array.js | 45 - .../node_modules/diff/lib/diff/base.js | 307 - .../node_modules/diff/lib/diff/character.js | 37 - .../node_modules/diff/lib/diff/css.js | 41 - .../node_modules/diff/lib/diff/json.js | 163 - .../node_modules/diff/lib/diff/line.js | 89 - .../node_modules/diff/lib/diff/sentence.js | 41 - .../node_modules/diff/lib/diff/word.js | 108 - .../node_modules/diff/lib/index.es6.js | 1561 ----- .../phonebook/node_modules/diff/lib/index.js | 216 - .../phonebook/node_modules/diff/lib/index.mjs | 1561 ----- .../node_modules/diff/lib/patch/apply.js | 238 - .../node_modules/diff/lib/patch/create.js | 272 - .../node_modules/diff/lib/patch/merge.js | 613 -- .../node_modules/diff/lib/patch/parse.js | 167 - .../node_modules/diff/lib/util/array.js | 32 - .../diff/lib/util/distance-iterator.js | 57 - .../node_modules/diff/lib/util/params.js | 24 - .../phonebook/node_modules/diff/package.json | 87 - .../node_modules/diff/release-notes.md | 309 - part3/phonebook/node_modules/diff/runtime.js | 3 - part3/phonebook/node_modules/ejs/LICENSE | 202 - part3/phonebook/node_modules/ejs/README.md | 344 - part3/phonebook/node_modules/ejs/bin/cli.js | 211 - part3/phonebook/node_modules/ejs/ejs.js | 1736 ----- part3/phonebook/node_modules/ejs/ejs.min.js | 1 - part3/phonebook/node_modules/ejs/jakefile.js | 88 - part3/phonebook/node_modules/ejs/lib/ejs.js | 951 --- part3/phonebook/node_modules/ejs/lib/utils.js | 241 - part3/phonebook/node_modules/ejs/package.json | 42 - part3/phonebook/node_modules/ejs/usage.txt | 24 - .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 - .../node_modules/emoji-regex/README.md | 73 - .../node_modules/emoji-regex/es2015/index.js | 6 - .../node_modules/emoji-regex/es2015/text.js | 6 - .../node_modules/emoji-regex/index.d.ts | 23 - .../node_modules/emoji-regex/index.js | 6 - .../node_modules/emoji-regex/package.json | 50 - .../node_modules/emoji-regex/text.js | 6 - .../node_modules/escalade/dist/index.js | 22 - .../node_modules/escalade/dist/index.mjs | 22 - .../node_modules/escalade/index.d.ts | 3 - part3/phonebook/node_modules/escalade/license | 9 - .../node_modules/escalade/package.json | 61 - .../phonebook/node_modules/escalade/readme.md | 211 - .../node_modules/escalade/sync/index.d.ts | 2 - .../node_modules/escalade/sync/index.js | 18 - .../node_modules/escalade/sync/index.mjs | 18 - .../phonebook/node_modules/filelist/README.md | 84 - .../node_modules/filelist/index.d.ts | 110 - .../phonebook/node_modules/filelist/index.js | 495 -- .../node_modules/filelist/jakefile.js | 15 - .../brace-expansion/.github/FUNDING.yml | 2 - .../node_modules/brace-expansion/LICENSE | 21 - .../node_modules/brace-expansion/README.md | 135 - .../node_modules/brace-expansion/index.js | 203 - .../node_modules/brace-expansion/package.json | 46 - .../filelist/node_modules/minimatch/LICENSE | 15 - .../filelist/node_modules/minimatch/README.md | 259 - .../node_modules/minimatch/lib/path.js | 4 - .../node_modules/minimatch/minimatch.js | 944 --- .../node_modules/minimatch/package.json | 35 - .../node_modules/filelist/package.json | 28 - .../node_modules/get-caller-file/LICENSE.md | 6 - .../node_modules/get-caller-file/README.md | 41 - .../node_modules/get-caller-file/index.d.ts | 2 - .../node_modules/get-caller-file/index.js | 22 - .../node_modules/get-caller-file/index.js.map | 1 - .../node_modules/get-caller-file/package.json | 42 - part3/phonebook/node_modules/jake/Makefile | 44 - part3/phonebook/node_modules/jake/README.md | 17 - .../node_modules/jake/bin/bash_completion.sh | 41 - part3/phonebook/node_modules/jake/bin/cli.js | 31 - part3/phonebook/node_modules/jake/jakefile.js | 112 - part3/phonebook/node_modules/jake/lib/api.js | 409 -- part3/phonebook/node_modules/jake/lib/jake.js | 330 - .../phonebook/node_modules/jake/lib/loader.js | 173 - .../node_modules/jake/lib/namespace.js | 115 - .../node_modules/jake/lib/package_task.js | 406 -- .../node_modules/jake/lib/parseargs.js | 134 - .../node_modules/jake/lib/program.js | 282 - .../node_modules/jake/lib/publish_task.js | 290 - part3/phonebook/node_modules/jake/lib/rule.js | 311 - .../jake/lib/task/directory_task.js | 30 - .../node_modules/jake/lib/task/file_task.js | 126 - .../node_modules/jake/lib/task/index.js | 9 - .../node_modules/jake/lib/task/task.js | 451 -- .../node_modules/jake/lib/test_task.js | 270 - .../node_modules/jake/lib/utils/file.js | 286 - .../node_modules/jake/lib/utils/index.js | 297 - .../node_modules/jake/lib/utils/logger.js | 24 - .../jake/node_modules/ansi-styles/index.d.ts | 345 - .../jake/node_modules/ansi-styles/index.js | 163 - .../jake/node_modules/ansi-styles/license | 9 - .../node_modules/ansi-styles/package.json | 56 - .../jake/node_modules/ansi-styles/readme.md | 152 - .../jake/node_modules/chalk/index.d.ts | 415 -- .../jake/node_modules/chalk/license | 9 - .../jake/node_modules/chalk/package.json | 68 - .../jake/node_modules/chalk/readme.md | 341 - .../jake/node_modules/chalk/source/index.js | 229 - .../node_modules/chalk/source/templates.js | 134 - .../jake/node_modules/chalk/source/util.js | 39 - .../node_modules/color-convert/CHANGELOG.md | 54 - .../jake/node_modules/color-convert/LICENSE | 21 - .../jake/node_modules/color-convert/README.md | 68 - .../node_modules/color-convert/conversions.js | 839 --- .../jake/node_modules/color-convert/index.js | 81 - .../node_modules/color-convert/package.json | 48 - .../jake/node_modules/color-convert/route.js | 97 - .../jake/node_modules/color-name/LICENSE | 8 - .../jake/node_modules/color-name/README.md | 11 - .../jake/node_modules/color-name/index.js | 152 - .../jake/node_modules/color-name/package.json | 28 - .../jake/node_modules/has-flag/index.d.ts | 39 - .../jake/node_modules/has-flag/index.js | 8 - .../jake/node_modules/has-flag/license | 9 - .../jake/node_modules/has-flag/package.json | 46 - .../jake/node_modules/has-flag/readme.md | 89 - .../node_modules/supports-color/browser.js | 5 - .../jake/node_modules/supports-color/index.js | 135 - .../jake/node_modules/supports-color/license | 9 - .../node_modules/supports-color/package.json | 53 - .../node_modules/supports-color/readme.md | 76 - .../phonebook/node_modules/jake/package.json | 42 - .../jake/test/integration/concurrent.js | 45 - .../jake/test/integration/file.js | 228 - .../jake/test/integration/file_task.js | 141 - .../jake/test/integration/helpers.js | 80 - .../jake/test/integration/jakefile.js | 352 - .../integration/jakelib/concurrent.jake.js | 113 - .../test/integration/jakelib/publish.jake.js | 49 - .../jakelib/required_module.jake.js | 10 - .../test/integration/jakelib/rule.jake.js | 222 - .../jake/test/integration/list_tasks.js | 15 - .../jake/test/integration/publish_task.js | 27 - .../jake/test/integration/rule.js | 217 - .../jake/test/integration/selfdep.js | 42 - .../jake/test/integration/task_base.js | 167 - .../node_modules/jake/test/unit/jakefile.js | 36 - .../node_modules/jake/test/unit/namespace.js | 77 - .../node_modules/jake/test/unit/parseargs.js | 169 - part3/phonebook/node_modules/jake/usage.txt | 17 - .../node_modules/require-directory/.jshintrc | 67 - .../node_modules/require-directory/.npmignore | 1 - .../require-directory/.travis.yml | 3 - .../node_modules/require-directory/LICENSE | 22 - .../require-directory/README.markdown | 184 - .../node_modules/require-directory/index.js | 86 - .../require-directory/package.json | 40 - .../phonebook/node_modules/wrap-ansi/index.js | 216 - .../phonebook/node_modules/wrap-ansi/license | 9 - .../node_modules/ansi-regex/index.d.ts | 37 - .../node_modules/ansi-regex/index.js | 10 - .../wrap-ansi/node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 55 - .../node_modules/ansi-regex/readme.md | 78 - .../node_modules/ansi-styles/index.d.ts | 345 - .../node_modules/ansi-styles/index.js | 163 - .../node_modules/ansi-styles/license | 9 - .../node_modules/ansi-styles/package.json | 56 - .../node_modules/ansi-styles/readme.md | 152 - .../node_modules/color-convert/CHANGELOG.md | 54 - .../node_modules/color-convert/LICENSE | 21 - .../node_modules/color-convert/README.md | 68 - .../node_modules/color-convert/conversions.js | 839 --- .../node_modules/color-convert/index.js | 81 - .../node_modules/color-convert/package.json | 48 - .../node_modules/color-convert/route.js | 97 - .../wrap-ansi/node_modules/color-name/LICENSE | 8 - .../node_modules/color-name/README.md | 11 - .../node_modules/color-name/index.js | 152 - .../node_modules/color-name/package.json | 28 - .../is-fullwidth-code-point/index.d.ts | 17 - .../is-fullwidth-code-point/index.js | 50 - .../is-fullwidth-code-point/license | 9 - .../is-fullwidth-code-point/package.json | 42 - .../is-fullwidth-code-point/readme.md | 39 - .../node_modules/string-width/index.d.ts | 29 - .../node_modules/string-width/index.js | 47 - .../node_modules/string-width/license | 9 - .../node_modules/string-width/package.json | 56 - .../node_modules/string-width/readme.md | 50 - .../node_modules/strip-ansi/index.d.ts | 17 - .../node_modules/strip-ansi/index.js | 4 - .../wrap-ansi/node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 54 - .../node_modules/strip-ansi/readme.md | 46 - .../node_modules/wrap-ansi/package.json | 62 - .../node_modules/wrap-ansi/readme.md | 91 - .../phonebook/node_modules/y18n/CHANGELOG.md | 100 - part3/phonebook/node_modules/y18n/LICENSE | 13 - part3/phonebook/node_modules/y18n/README.md | 127 - .../node_modules/y18n/build/index.cjs | 203 - .../node_modules/y18n/build/lib/cjs.js | 6 - .../node_modules/y18n/build/lib/index.js | 174 - .../y18n/build/lib/platform-shims/node.js | 19 - part3/phonebook/node_modules/y18n/index.mjs | 8 - .../phonebook/node_modules/y18n/package.json | 70 - .../node_modules/yargs-parser/CHANGELOG.md | 308 - .../node_modules/yargs-parser/LICENSE.txt | 14 - .../node_modules/yargs-parser/README.md | 518 -- .../node_modules/yargs-parser/browser.js | 29 - .../node_modules/yargs-parser/build/index.cjs | 1050 --- .../yargs-parser/build/lib/index.js | 62 - .../yargs-parser/build/lib/string-utils.js | 65 - .../build/lib/tokenize-arg-string.js | 40 - .../build/lib/yargs-parser-types.js | 12 - .../yargs-parser/build/lib/yargs-parser.js | 1045 --- .../node_modules/yargs-parser/package.json | 92 - part3/phonebook/node_modules/yargs/LICENSE | 21 - part3/phonebook/node_modules/yargs/README.md | 204 - .../phonebook/node_modules/yargs/browser.d.ts | 5 - .../phonebook/node_modules/yargs/browser.mjs | 7 - .../node_modules/yargs/build/index.cjs | 1 - .../node_modules/yargs/build/lib/argsert.js | 62 - .../node_modules/yargs/build/lib/command.js | 449 -- .../yargs/build/lib/completion-templates.js | 48 - .../yargs/build/lib/completion.js | 243 - .../yargs/build/lib/middleware.js | 88 - .../yargs/build/lib/parse-command.js | 32 - .../yargs/build/lib/typings/common-types.js | 9 - .../build/lib/typings/yargs-parser-types.js | 1 - .../node_modules/yargs/build/lib/usage.js | 584 -- .../yargs/build/lib/utils/apply-extends.js | 59 - .../yargs/build/lib/utils/is-promise.js | 5 - .../yargs/build/lib/utils/levenshtein.js | 34 - .../build/lib/utils/maybe-async-result.js | 17 - .../yargs/build/lib/utils/obj-filter.js | 10 - .../yargs/build/lib/utils/process-argv.js | 17 - .../yargs/build/lib/utils/set-blocking.js | 12 - .../yargs/build/lib/utils/which-module.js | 10 - .../yargs/build/lib/validation.js | 305 - .../yargs/build/lib/yargs-factory.js | 1512 ---- .../node_modules/yargs/build/lib/yerror.js | 9 - .../node_modules/yargs/helpers/helpers.mjs | 10 - .../node_modules/yargs/helpers/index.js | 14 - .../node_modules/yargs/helpers/package.json | 3 - part3/phonebook/node_modules/yargs/index.cjs | 53 - part3/phonebook/node_modules/yargs/index.mjs | 8 - .../yargs/lib/platform-shims/browser.mjs | 95 - .../yargs/lib/platform-shims/esm.mjs | 73 - .../node_modules/yargs/locales/be.json | 46 - .../node_modules/yargs/locales/cs.json | 51 - .../node_modules/yargs/locales/de.json | 46 - .../node_modules/yargs/locales/en.json | 55 - .../node_modules/yargs/locales/es.json | 46 - .../node_modules/yargs/locales/fi.json | 49 - .../node_modules/yargs/locales/fr.json | 53 - .../node_modules/yargs/locales/hi.json | 49 - .../node_modules/yargs/locales/hu.json | 46 - .../node_modules/yargs/locales/id.json | 50 - .../node_modules/yargs/locales/it.json | 46 - .../node_modules/yargs/locales/ja.json | 51 - .../node_modules/yargs/locales/ko.json | 49 - .../node_modules/yargs/locales/nb.json | 44 - .../node_modules/yargs/locales/nl.json | 49 - .../node_modules/yargs/locales/nn.json | 44 - .../node_modules/yargs/locales/pirate.json | 13 - .../node_modules/yargs/locales/pl.json | 49 - .../node_modules/yargs/locales/pt.json | 45 - .../node_modules/yargs/locales/pt_BR.json | 48 - .../node_modules/yargs/locales/ru.json | 51 - .../node_modules/yargs/locales/th.json | 46 - .../node_modules/yargs/locales/tr.json | 48 - .../node_modules/yargs/locales/uk_UA.json | 51 - .../node_modules/yargs/locales/uz.json | 52 - .../node_modules/yargs/locales/zh_CN.json | 48 - .../node_modules/yargs/locales/zh_TW.json | 51 - .../yargs/node_modules/ansi-regex/index.d.ts | 37 - .../yargs/node_modules/ansi-regex/index.js | 10 - .../yargs/node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 55 - .../yargs/node_modules/ansi-regex/readme.md | 78 - .../is-fullwidth-code-point/index.d.ts | 17 - .../is-fullwidth-code-point/index.js | 50 - .../is-fullwidth-code-point/license | 9 - .../is-fullwidth-code-point/package.json | 42 - .../is-fullwidth-code-point/readme.md | 39 - .../node_modules/string-width/index.d.ts | 29 - .../yargs/node_modules/string-width/index.js | 47 - .../yargs/node_modules/string-width/license | 9 - .../node_modules/string-width/package.json | 56 - .../yargs/node_modules/string-width/readme.md | 50 - .../yargs/node_modules/strip-ansi/index.d.ts | 17 - .../yargs/node_modules/strip-ansi/index.js | 4 - .../yargs/node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 54 - .../yargs/node_modules/strip-ansi/readme.md | 46 - .../phonebook/node_modules/yargs/package.json | 123 - part3/phonebook/node_modules/yargs/yargs | 9 - part3/phonebook/node_modules/yargs/yargs.mjs | 10 - part3/phonebook/package-lock.json | 1629 ++++- part3/phonebook/package.json | 4 +- 496 files changed, 2679 insertions(+), 66271 deletions(-) create mode 100644 part3/phonebook/.eslintignore create mode 100644 part3/phonebook/.eslintrc.js create mode 100644 part3/phonebook/README.md create mode 100644 part3/phonebook/models/phonebook.js delete mode 120000 part3/phonebook/node_modules/.bin/dockerfile delete mode 120000 part3/phonebook/node_modules/.bin/ejs delete mode 120000 part3/phonebook/node_modules/.bin/jake delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/README.md delete mode 100755 part3/phonebook/node_modules/@flydotio/dockerfile/gdf.js delete mode 100755 part3/phonebook/node_modules/@flydotio/dockerfile/index.js delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/license delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/package.json delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/readme.md delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/source/index.d.ts delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/source/index.js delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/source/utilities.js delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/source/vendor/ansi-styles/index.d.ts delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/source/vendor/ansi-styles/index.js delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/source/vendor/supports-color/browser.d.ts delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/source/vendor/supports-color/browser.js delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/source/vendor/supports-color/index.d.ts delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/source/vendor/supports-color/index.js delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/package.json delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/templates/.dockerignore.ejs delete mode 100644 part3/phonebook/node_modules/@flydotio/dockerfile/templates/Dockerfile.ejs delete mode 100755 part3/phonebook/node_modules/@flydotio/dockerfile/templates/docker-entrypoint.ejs delete mode 100644 part3/phonebook/node_modules/async/CHANGELOG.md delete mode 100644 part3/phonebook/node_modules/async/LICENSE delete mode 100644 part3/phonebook/node_modules/async/README.md delete mode 100644 part3/phonebook/node_modules/async/all.js delete mode 100644 part3/phonebook/node_modules/async/allLimit.js delete mode 100644 part3/phonebook/node_modules/async/allSeries.js delete mode 100644 part3/phonebook/node_modules/async/any.js delete mode 100644 part3/phonebook/node_modules/async/anyLimit.js delete mode 100644 part3/phonebook/node_modules/async/anySeries.js delete mode 100644 part3/phonebook/node_modules/async/apply.js delete mode 100644 part3/phonebook/node_modules/async/applyEach.js delete mode 100644 part3/phonebook/node_modules/async/applyEachSeries.js delete mode 100644 part3/phonebook/node_modules/async/asyncify.js delete mode 100644 part3/phonebook/node_modules/async/auto.js delete mode 100644 part3/phonebook/node_modules/async/autoInject.js delete mode 100644 part3/phonebook/node_modules/async/bower.json delete mode 100644 part3/phonebook/node_modules/async/cargo.js delete mode 100644 part3/phonebook/node_modules/async/cargoQueue.js delete mode 100644 part3/phonebook/node_modules/async/compose.js delete mode 100644 part3/phonebook/node_modules/async/concat.js delete mode 100644 part3/phonebook/node_modules/async/concatLimit.js delete mode 100644 part3/phonebook/node_modules/async/concatSeries.js delete mode 100644 part3/phonebook/node_modules/async/constant.js delete mode 100644 part3/phonebook/node_modules/async/detect.js delete mode 100644 part3/phonebook/node_modules/async/detectLimit.js delete mode 100644 part3/phonebook/node_modules/async/detectSeries.js delete mode 100644 part3/phonebook/node_modules/async/dir.js delete mode 100644 part3/phonebook/node_modules/async/dist/async.js delete mode 100644 part3/phonebook/node_modules/async/dist/async.min.js delete mode 100644 part3/phonebook/node_modules/async/dist/async.mjs delete mode 100644 part3/phonebook/node_modules/async/doDuring.js delete mode 100644 part3/phonebook/node_modules/async/doUntil.js delete mode 100644 part3/phonebook/node_modules/async/doWhilst.js delete mode 100644 part3/phonebook/node_modules/async/during.js delete mode 100644 part3/phonebook/node_modules/async/each.js delete mode 100644 part3/phonebook/node_modules/async/eachLimit.js delete mode 100644 part3/phonebook/node_modules/async/eachOf.js delete mode 100644 part3/phonebook/node_modules/async/eachOfLimit.js delete mode 100644 part3/phonebook/node_modules/async/eachOfSeries.js delete mode 100644 part3/phonebook/node_modules/async/eachSeries.js delete mode 100644 part3/phonebook/node_modules/async/ensureAsync.js delete mode 100644 part3/phonebook/node_modules/async/every.js delete mode 100644 part3/phonebook/node_modules/async/everyLimit.js delete mode 100644 part3/phonebook/node_modules/async/everySeries.js delete mode 100644 part3/phonebook/node_modules/async/filter.js delete mode 100644 part3/phonebook/node_modules/async/filterLimit.js delete mode 100644 part3/phonebook/node_modules/async/filterSeries.js delete mode 100644 part3/phonebook/node_modules/async/find.js delete mode 100644 part3/phonebook/node_modules/async/findLimit.js delete mode 100644 part3/phonebook/node_modules/async/findSeries.js delete mode 100644 part3/phonebook/node_modules/async/flatMap.js delete mode 100644 part3/phonebook/node_modules/async/flatMapLimit.js delete mode 100644 part3/phonebook/node_modules/async/flatMapSeries.js delete mode 100644 part3/phonebook/node_modules/async/foldl.js delete mode 100644 part3/phonebook/node_modules/async/foldr.js delete mode 100644 part3/phonebook/node_modules/async/forEach.js delete mode 100644 part3/phonebook/node_modules/async/forEachLimit.js delete mode 100644 part3/phonebook/node_modules/async/forEachOf.js delete mode 100644 part3/phonebook/node_modules/async/forEachOfLimit.js delete mode 100644 part3/phonebook/node_modules/async/forEachOfSeries.js delete mode 100644 part3/phonebook/node_modules/async/forEachSeries.js delete mode 100644 part3/phonebook/node_modules/async/forever.js delete mode 100644 part3/phonebook/node_modules/async/groupBy.js delete mode 100644 part3/phonebook/node_modules/async/groupByLimit.js delete mode 100644 part3/phonebook/node_modules/async/groupBySeries.js delete mode 100644 part3/phonebook/node_modules/async/index.js delete mode 100644 part3/phonebook/node_modules/async/inject.js delete mode 100644 part3/phonebook/node_modules/async/internal/DoublyLinkedList.js delete mode 100644 part3/phonebook/node_modules/async/internal/Heap.js delete mode 100644 part3/phonebook/node_modules/async/internal/applyEach.js delete mode 100644 part3/phonebook/node_modules/async/internal/asyncEachOfLimit.js delete mode 100644 part3/phonebook/node_modules/async/internal/awaitify.js delete mode 100644 part3/phonebook/node_modules/async/internal/breakLoop.js delete mode 100644 part3/phonebook/node_modules/async/internal/consoleFunc.js delete mode 100644 part3/phonebook/node_modules/async/internal/createTester.js delete mode 100644 part3/phonebook/node_modules/async/internal/eachOfLimit.js delete mode 100644 part3/phonebook/node_modules/async/internal/filter.js delete mode 100644 part3/phonebook/node_modules/async/internal/getIterator.js delete mode 100644 part3/phonebook/node_modules/async/internal/initialParams.js delete mode 100644 part3/phonebook/node_modules/async/internal/isArrayLike.js delete mode 100644 part3/phonebook/node_modules/async/internal/iterator.js delete mode 100644 part3/phonebook/node_modules/async/internal/map.js delete mode 100644 part3/phonebook/node_modules/async/internal/once.js delete mode 100644 part3/phonebook/node_modules/async/internal/onlyOnce.js delete mode 100644 part3/phonebook/node_modules/async/internal/parallel.js delete mode 100644 part3/phonebook/node_modules/async/internal/promiseCallback.js delete mode 100644 part3/phonebook/node_modules/async/internal/queue.js delete mode 100644 part3/phonebook/node_modules/async/internal/range.js delete mode 100644 part3/phonebook/node_modules/async/internal/reject.js delete mode 100644 part3/phonebook/node_modules/async/internal/setImmediate.js delete mode 100644 part3/phonebook/node_modules/async/internal/withoutIndex.js delete mode 100644 part3/phonebook/node_modules/async/internal/wrapAsync.js delete mode 100644 part3/phonebook/node_modules/async/log.js delete mode 100644 part3/phonebook/node_modules/async/map.js delete mode 100644 part3/phonebook/node_modules/async/mapLimit.js delete mode 100644 part3/phonebook/node_modules/async/mapSeries.js delete mode 100644 part3/phonebook/node_modules/async/mapValues.js delete mode 100644 part3/phonebook/node_modules/async/mapValuesLimit.js delete mode 100644 part3/phonebook/node_modules/async/mapValuesSeries.js delete mode 100644 part3/phonebook/node_modules/async/memoize.js delete mode 100644 part3/phonebook/node_modules/async/nextTick.js delete mode 100644 part3/phonebook/node_modules/async/package.json delete mode 100644 part3/phonebook/node_modules/async/parallel.js delete mode 100644 part3/phonebook/node_modules/async/parallelLimit.js delete mode 100644 part3/phonebook/node_modules/async/priorityQueue.js delete mode 100644 part3/phonebook/node_modules/async/queue.js delete mode 100644 part3/phonebook/node_modules/async/race.js delete mode 100644 part3/phonebook/node_modules/async/reduce.js delete mode 100644 part3/phonebook/node_modules/async/reduceRight.js delete mode 100644 part3/phonebook/node_modules/async/reflect.js delete mode 100644 part3/phonebook/node_modules/async/reflectAll.js delete mode 100644 part3/phonebook/node_modules/async/reject.js delete mode 100644 part3/phonebook/node_modules/async/rejectLimit.js delete mode 100644 part3/phonebook/node_modules/async/rejectSeries.js delete mode 100644 part3/phonebook/node_modules/async/retry.js delete mode 100644 part3/phonebook/node_modules/async/retryable.js delete mode 100644 part3/phonebook/node_modules/async/select.js delete mode 100644 part3/phonebook/node_modules/async/selectLimit.js delete mode 100644 part3/phonebook/node_modules/async/selectSeries.js delete mode 100644 part3/phonebook/node_modules/async/seq.js delete mode 100644 part3/phonebook/node_modules/async/series.js delete mode 100644 part3/phonebook/node_modules/async/setImmediate.js delete mode 100644 part3/phonebook/node_modules/async/some.js delete mode 100644 part3/phonebook/node_modules/async/someLimit.js delete mode 100644 part3/phonebook/node_modules/async/someSeries.js delete mode 100644 part3/phonebook/node_modules/async/sortBy.js delete mode 100644 part3/phonebook/node_modules/async/timeout.js delete mode 100644 part3/phonebook/node_modules/async/times.js delete mode 100644 part3/phonebook/node_modules/async/timesLimit.js delete mode 100644 part3/phonebook/node_modules/async/timesSeries.js delete mode 100644 part3/phonebook/node_modules/async/transform.js delete mode 100644 part3/phonebook/node_modules/async/tryEach.js delete mode 100644 part3/phonebook/node_modules/async/unmemoize.js delete mode 100644 part3/phonebook/node_modules/async/until.js delete mode 100644 part3/phonebook/node_modules/async/waterfall.js delete mode 100644 part3/phonebook/node_modules/async/whilst.js delete mode 100644 part3/phonebook/node_modules/async/wrapSync.js delete mode 100644 part3/phonebook/node_modules/cliui/CHANGELOG.md delete mode 100644 part3/phonebook/node_modules/cliui/LICENSE.txt delete mode 100644 part3/phonebook/node_modules/cliui/README.md delete mode 100644 part3/phonebook/node_modules/cliui/build/index.cjs delete mode 100644 part3/phonebook/node_modules/cliui/build/index.d.cts delete mode 100644 part3/phonebook/node_modules/cliui/build/lib/index.js delete mode 100644 part3/phonebook/node_modules/cliui/build/lib/string-utils.js delete mode 100644 part3/phonebook/node_modules/cliui/index.mjs delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/ansi-regex/index.d.ts delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/ansi-regex/index.js delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/ansi-regex/license delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/ansi-regex/package.json delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/ansi-regex/readme.md delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/is-fullwidth-code-point/index.d.ts delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/is-fullwidth-code-point/index.js delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/is-fullwidth-code-point/license delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/is-fullwidth-code-point/package.json delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/is-fullwidth-code-point/readme.md delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/string-width/index.d.ts delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/string-width/index.js delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/string-width/license delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/string-width/package.json delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/string-width/readme.md delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/strip-ansi/index.d.ts delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/strip-ansi/index.js delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/strip-ansi/license delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/strip-ansi/package.json delete mode 100644 part3/phonebook/node_modules/cliui/node_modules/strip-ansi/readme.md delete mode 100644 part3/phonebook/node_modules/cliui/package.json delete mode 100644 part3/phonebook/node_modules/diff/CONTRIBUTING.md delete mode 100644 part3/phonebook/node_modules/diff/LICENSE delete mode 100644 part3/phonebook/node_modules/diff/README.md delete mode 100644 part3/phonebook/node_modules/diff/dist/diff.js delete mode 100644 part3/phonebook/node_modules/diff/dist/diff.min.js delete mode 100644 part3/phonebook/node_modules/diff/lib/convert/dmp.js delete mode 100644 part3/phonebook/node_modules/diff/lib/convert/xml.js delete mode 100644 part3/phonebook/node_modules/diff/lib/diff/array.js delete mode 100644 part3/phonebook/node_modules/diff/lib/diff/base.js delete mode 100644 part3/phonebook/node_modules/diff/lib/diff/character.js delete mode 100644 part3/phonebook/node_modules/diff/lib/diff/css.js delete mode 100644 part3/phonebook/node_modules/diff/lib/diff/json.js delete mode 100644 part3/phonebook/node_modules/diff/lib/diff/line.js delete mode 100644 part3/phonebook/node_modules/diff/lib/diff/sentence.js delete mode 100644 part3/phonebook/node_modules/diff/lib/diff/word.js delete mode 100644 part3/phonebook/node_modules/diff/lib/index.es6.js delete mode 100644 part3/phonebook/node_modules/diff/lib/index.js delete mode 100644 part3/phonebook/node_modules/diff/lib/index.mjs delete mode 100644 part3/phonebook/node_modules/diff/lib/patch/apply.js delete mode 100644 part3/phonebook/node_modules/diff/lib/patch/create.js delete mode 100644 part3/phonebook/node_modules/diff/lib/patch/merge.js delete mode 100644 part3/phonebook/node_modules/diff/lib/patch/parse.js delete mode 100644 part3/phonebook/node_modules/diff/lib/util/array.js delete mode 100644 part3/phonebook/node_modules/diff/lib/util/distance-iterator.js delete mode 100644 part3/phonebook/node_modules/diff/lib/util/params.js delete mode 100644 part3/phonebook/node_modules/diff/package.json delete mode 100644 part3/phonebook/node_modules/diff/release-notes.md delete mode 100644 part3/phonebook/node_modules/diff/runtime.js delete mode 100644 part3/phonebook/node_modules/ejs/LICENSE delete mode 100644 part3/phonebook/node_modules/ejs/README.md delete mode 100755 part3/phonebook/node_modules/ejs/bin/cli.js delete mode 100644 part3/phonebook/node_modules/ejs/ejs.js delete mode 100644 part3/phonebook/node_modules/ejs/ejs.min.js delete mode 100644 part3/phonebook/node_modules/ejs/jakefile.js delete mode 100755 part3/phonebook/node_modules/ejs/lib/ejs.js delete mode 100644 part3/phonebook/node_modules/ejs/lib/utils.js delete mode 100644 part3/phonebook/node_modules/ejs/package.json delete mode 100644 part3/phonebook/node_modules/ejs/usage.txt delete mode 100644 part3/phonebook/node_modules/emoji-regex/LICENSE-MIT.txt delete mode 100644 part3/phonebook/node_modules/emoji-regex/README.md delete mode 100644 part3/phonebook/node_modules/emoji-regex/es2015/index.js delete mode 100644 part3/phonebook/node_modules/emoji-regex/es2015/text.js delete mode 100644 part3/phonebook/node_modules/emoji-regex/index.d.ts delete mode 100644 part3/phonebook/node_modules/emoji-regex/index.js delete mode 100644 part3/phonebook/node_modules/emoji-regex/package.json delete mode 100644 part3/phonebook/node_modules/emoji-regex/text.js delete mode 100644 part3/phonebook/node_modules/escalade/dist/index.js delete mode 100644 part3/phonebook/node_modules/escalade/dist/index.mjs delete mode 100644 part3/phonebook/node_modules/escalade/index.d.ts delete mode 100644 part3/phonebook/node_modules/escalade/license delete mode 100644 part3/phonebook/node_modules/escalade/package.json delete mode 100644 part3/phonebook/node_modules/escalade/readme.md delete mode 100644 part3/phonebook/node_modules/escalade/sync/index.d.ts delete mode 100644 part3/phonebook/node_modules/escalade/sync/index.js delete mode 100644 part3/phonebook/node_modules/escalade/sync/index.mjs delete mode 100644 part3/phonebook/node_modules/filelist/README.md delete mode 100644 part3/phonebook/node_modules/filelist/index.d.ts delete mode 100644 part3/phonebook/node_modules/filelist/index.js delete mode 100644 part3/phonebook/node_modules/filelist/jakefile.js delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/brace-expansion/.github/FUNDING.yml delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/brace-expansion/LICENSE delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/brace-expansion/README.md delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/brace-expansion/index.js delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/brace-expansion/package.json delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/minimatch/LICENSE delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/minimatch/README.md delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/minimatch/lib/path.js delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/minimatch/minimatch.js delete mode 100644 part3/phonebook/node_modules/filelist/node_modules/minimatch/package.json delete mode 100644 part3/phonebook/node_modules/filelist/package.json delete mode 100644 part3/phonebook/node_modules/get-caller-file/LICENSE.md delete mode 100644 part3/phonebook/node_modules/get-caller-file/README.md delete mode 100644 part3/phonebook/node_modules/get-caller-file/index.d.ts delete mode 100644 part3/phonebook/node_modules/get-caller-file/index.js delete mode 100644 part3/phonebook/node_modules/get-caller-file/index.js.map delete mode 100644 part3/phonebook/node_modules/get-caller-file/package.json delete mode 100644 part3/phonebook/node_modules/jake/Makefile delete mode 100644 part3/phonebook/node_modules/jake/README.md delete mode 100755 part3/phonebook/node_modules/jake/bin/bash_completion.sh delete mode 100755 part3/phonebook/node_modules/jake/bin/cli.js delete mode 100644 part3/phonebook/node_modules/jake/jakefile.js delete mode 100644 part3/phonebook/node_modules/jake/lib/api.js delete mode 100644 part3/phonebook/node_modules/jake/lib/jake.js delete mode 100644 part3/phonebook/node_modules/jake/lib/loader.js delete mode 100644 part3/phonebook/node_modules/jake/lib/namespace.js delete mode 100644 part3/phonebook/node_modules/jake/lib/package_task.js delete mode 100644 part3/phonebook/node_modules/jake/lib/parseargs.js delete mode 100644 part3/phonebook/node_modules/jake/lib/program.js delete mode 100644 part3/phonebook/node_modules/jake/lib/publish_task.js delete mode 100644 part3/phonebook/node_modules/jake/lib/rule.js delete mode 100644 part3/phonebook/node_modules/jake/lib/task/directory_task.js delete mode 100644 part3/phonebook/node_modules/jake/lib/task/file_task.js delete mode 100644 part3/phonebook/node_modules/jake/lib/task/index.js delete mode 100644 part3/phonebook/node_modules/jake/lib/task/task.js delete mode 100644 part3/phonebook/node_modules/jake/lib/test_task.js delete mode 100644 part3/phonebook/node_modules/jake/lib/utils/file.js delete mode 100644 part3/phonebook/node_modules/jake/lib/utils/index.js delete mode 100644 part3/phonebook/node_modules/jake/lib/utils/logger.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/ansi-styles/index.d.ts delete mode 100644 part3/phonebook/node_modules/jake/node_modules/ansi-styles/index.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/ansi-styles/license delete mode 100644 part3/phonebook/node_modules/jake/node_modules/ansi-styles/package.json delete mode 100644 part3/phonebook/node_modules/jake/node_modules/ansi-styles/readme.md delete mode 100644 part3/phonebook/node_modules/jake/node_modules/chalk/index.d.ts delete mode 100644 part3/phonebook/node_modules/jake/node_modules/chalk/license delete mode 100644 part3/phonebook/node_modules/jake/node_modules/chalk/package.json delete mode 100644 part3/phonebook/node_modules/jake/node_modules/chalk/readme.md delete mode 100644 part3/phonebook/node_modules/jake/node_modules/chalk/source/index.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/chalk/source/templates.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/chalk/source/util.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-convert/CHANGELOG.md delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-convert/LICENSE delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-convert/README.md delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-convert/conversions.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-convert/index.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-convert/package.json delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-convert/route.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-name/LICENSE delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-name/README.md delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-name/index.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/color-name/package.json delete mode 100644 part3/phonebook/node_modules/jake/node_modules/has-flag/index.d.ts delete mode 100644 part3/phonebook/node_modules/jake/node_modules/has-flag/index.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/has-flag/license delete mode 100644 part3/phonebook/node_modules/jake/node_modules/has-flag/package.json delete mode 100644 part3/phonebook/node_modules/jake/node_modules/has-flag/readme.md delete mode 100644 part3/phonebook/node_modules/jake/node_modules/supports-color/browser.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/supports-color/index.js delete mode 100644 part3/phonebook/node_modules/jake/node_modules/supports-color/license delete mode 100644 part3/phonebook/node_modules/jake/node_modules/supports-color/package.json delete mode 100644 part3/phonebook/node_modules/jake/node_modules/supports-color/readme.md delete mode 100644 part3/phonebook/node_modules/jake/package.json delete mode 100644 part3/phonebook/node_modules/jake/test/integration/concurrent.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/file.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/file_task.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/helpers.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/jakefile.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/jakelib/concurrent.jake.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/jakelib/publish.jake.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/jakelib/required_module.jake.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/jakelib/rule.jake.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/list_tasks.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/publish_task.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/rule.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/selfdep.js delete mode 100644 part3/phonebook/node_modules/jake/test/integration/task_base.js delete mode 100644 part3/phonebook/node_modules/jake/test/unit/jakefile.js delete mode 100644 part3/phonebook/node_modules/jake/test/unit/namespace.js delete mode 100644 part3/phonebook/node_modules/jake/test/unit/parseargs.js delete mode 100644 part3/phonebook/node_modules/jake/usage.txt delete mode 100644 part3/phonebook/node_modules/require-directory/.jshintrc delete mode 100644 part3/phonebook/node_modules/require-directory/.npmignore delete mode 100644 part3/phonebook/node_modules/require-directory/.travis.yml delete mode 100644 part3/phonebook/node_modules/require-directory/LICENSE delete mode 100644 part3/phonebook/node_modules/require-directory/README.markdown delete mode 100644 part3/phonebook/node_modules/require-directory/index.js delete mode 100644 part3/phonebook/node_modules/require-directory/package.json delete mode 100755 part3/phonebook/node_modules/wrap-ansi/index.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/license delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-regex/index.d.ts delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-regex/index.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-regex/license delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-regex/package.json delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-styles/index.d.ts delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-styles/index.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-styles/license delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-styles/package.json delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/ansi-styles/readme.md delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-convert/CHANGELOG.md delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-convert/LICENSE delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-convert/README.md delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-convert/conversions.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-convert/index.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-convert/package.json delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-convert/route.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-name/LICENSE delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-name/README.md delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-name/index.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/color-name/package.json delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/index.d.ts delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/index.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/license delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/package.json delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/readme.md delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/string-width/index.d.ts delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/string-width/index.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/string-width/license delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/string-width/package.json delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/string-width/readme.md delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/strip-ansi/index.d.ts delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/strip-ansi/index.js delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/strip-ansi/license delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/strip-ansi/package.json delete mode 100644 part3/phonebook/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md delete mode 100644 part3/phonebook/node_modules/wrap-ansi/package.json delete mode 100644 part3/phonebook/node_modules/wrap-ansi/readme.md delete mode 100644 part3/phonebook/node_modules/y18n/CHANGELOG.md delete mode 100644 part3/phonebook/node_modules/y18n/LICENSE delete mode 100644 part3/phonebook/node_modules/y18n/README.md delete mode 100644 part3/phonebook/node_modules/y18n/build/index.cjs delete mode 100644 part3/phonebook/node_modules/y18n/build/lib/cjs.js delete mode 100644 part3/phonebook/node_modules/y18n/build/lib/index.js delete mode 100644 part3/phonebook/node_modules/y18n/build/lib/platform-shims/node.js delete mode 100644 part3/phonebook/node_modules/y18n/index.mjs delete mode 100644 part3/phonebook/node_modules/y18n/package.json delete mode 100644 part3/phonebook/node_modules/yargs-parser/CHANGELOG.md delete mode 100644 part3/phonebook/node_modules/yargs-parser/LICENSE.txt delete mode 100644 part3/phonebook/node_modules/yargs-parser/README.md delete mode 100644 part3/phonebook/node_modules/yargs-parser/browser.js delete mode 100644 part3/phonebook/node_modules/yargs-parser/build/index.cjs delete mode 100644 part3/phonebook/node_modules/yargs-parser/build/lib/index.js delete mode 100644 part3/phonebook/node_modules/yargs-parser/build/lib/string-utils.js delete mode 100644 part3/phonebook/node_modules/yargs-parser/build/lib/tokenize-arg-string.js delete mode 100644 part3/phonebook/node_modules/yargs-parser/build/lib/yargs-parser-types.js delete mode 100644 part3/phonebook/node_modules/yargs-parser/build/lib/yargs-parser.js delete mode 100644 part3/phonebook/node_modules/yargs-parser/package.json delete mode 100644 part3/phonebook/node_modules/yargs/LICENSE delete mode 100644 part3/phonebook/node_modules/yargs/README.md delete mode 100644 part3/phonebook/node_modules/yargs/browser.d.ts delete mode 100644 part3/phonebook/node_modules/yargs/browser.mjs delete mode 100644 part3/phonebook/node_modules/yargs/build/index.cjs delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/argsert.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/command.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/completion-templates.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/completion.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/middleware.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/parse-command.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/typings/common-types.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/typings/yargs-parser-types.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/usage.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/utils/apply-extends.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/utils/is-promise.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/utils/levenshtein.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/utils/maybe-async-result.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/utils/obj-filter.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/utils/process-argv.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/utils/set-blocking.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/utils/which-module.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/validation.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/yargs-factory.js delete mode 100644 part3/phonebook/node_modules/yargs/build/lib/yerror.js delete mode 100644 part3/phonebook/node_modules/yargs/helpers/helpers.mjs delete mode 100644 part3/phonebook/node_modules/yargs/helpers/index.js delete mode 100644 part3/phonebook/node_modules/yargs/helpers/package.json delete mode 100644 part3/phonebook/node_modules/yargs/index.cjs delete mode 100644 part3/phonebook/node_modules/yargs/index.mjs delete mode 100644 part3/phonebook/node_modules/yargs/lib/platform-shims/browser.mjs delete mode 100644 part3/phonebook/node_modules/yargs/lib/platform-shims/esm.mjs delete mode 100644 part3/phonebook/node_modules/yargs/locales/be.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/cs.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/de.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/en.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/es.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/fi.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/fr.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/hi.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/hu.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/id.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/it.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/ja.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/ko.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/nb.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/nl.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/nn.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/pirate.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/pl.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/pt.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/pt_BR.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/ru.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/th.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/tr.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/uk_UA.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/uz.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/zh_CN.json delete mode 100644 part3/phonebook/node_modules/yargs/locales/zh_TW.json delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/ansi-regex/index.d.ts delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/ansi-regex/index.js delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/ansi-regex/license delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/ansi-regex/package.json delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/ansi-regex/readme.md delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/is-fullwidth-code-point/index.d.ts delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/is-fullwidth-code-point/index.js delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/is-fullwidth-code-point/license delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/is-fullwidth-code-point/package.json delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/is-fullwidth-code-point/readme.md delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/string-width/index.d.ts delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/string-width/index.js delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/string-width/license delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/string-width/package.json delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/string-width/readme.md delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/strip-ansi/index.d.ts delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/strip-ansi/index.js delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/strip-ansi/license delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/strip-ansi/package.json delete mode 100644 part3/phonebook/node_modules/yargs/node_modules/strip-ansi/readme.md delete mode 100644 part3/phonebook/node_modules/yargs/package.json delete mode 100644 part3/phonebook/node_modules/yargs/yargs delete mode 100644 part3/phonebook/node_modules/yargs/yargs.mjs diff --git a/.gitignore b/.gitignore index 6ecb1c4..d206639 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .vscode/settings.json -part2/countries/.env +part3/phonebook/.env +part3/phonebook/node_modules test diff --git a/part3/phonebook/.eslintignore b/part3/phonebook/.eslintignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/part3/phonebook/.eslintignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/part3/phonebook/.eslintrc.js b/part3/phonebook/.eslintrc.js new file mode 100644 index 0000000..802a90c --- /dev/null +++ b/part3/phonebook/.eslintrc.js @@ -0,0 +1,40 @@ +module.exports = { + 'env': { + 'node': true, + 'commonjs': true, + 'es2021': true + }, + 'extends': 'eslint:recommended', + 'overrides': [ + ], + 'parserOptions': { + 'ecmaVersion': 'latest' + }, + 'rules': { + 'indent': [ + 'error', + 2 + ], + 'linebreak-style': [ + 'error', + 'unix' + ], + 'quotes': [ + 'error', + 'single' + ], + 'semi': [ + 'error', + 'never' + ], + 'eqeqeq': 'error', + 'no-trailing-spaces': 'error', + 'object-curly-spacing': [ + 'error', 'always' + ], + 'arrow-spacing': [ + 'error', { 'before': true, 'after': true } + ], + 'no-console': 0 + } +} \ No newline at end of file diff --git a/part3/phonebook/README.md b/part3/phonebook/README.md new file mode 100644 index 0000000..c59a997 --- /dev/null +++ b/part3/phonebook/README.md @@ -0,0 +1,3 @@ +# Phonebook + + diff --git a/part3/phonebook/index.js b/part3/phonebook/index.js index 1c27c17..2d8c23a 100644 --- a/part3/phonebook/index.js +++ b/part3/phonebook/index.js @@ -1,104 +1,105 @@ -const express = require("express"); -const app = express(); -const cors = require("cors"); -const morgan = require("morgan"); +/* eslint-disable no-unused-vars */ +require('dotenv').config() +const express = require('express') +const app = express() +const cors = require('cors') +const morgan = require('morgan') +const Phonebook = require('./models/phonebook') -app.use(express.json()); -app.use(cors()); +app.use(cors()) +app.use(express.json()) app.use(express.static('build')) -morgan.token("body", function (req, res) { - return req.method === "POST" ? JSON.stringify(req.body) : ""; -}); +morgan.token('body', function (req, res) { + return req.method === 'POST' ? JSON.stringify(req.body) : '' +}) app.use( - morgan(":method :url :status :res[content-length] - :response-time ms :body") -); + morgan(':method :url :status :res[content-length] - :response-time ms :body') +) -let persons = [ - { - id: 1, - name: "Arto Hellas", - number: "040-123456", - }, - { - id: 2, - name: "Ada Lovelace", - number: "39-44-5323523", - }, - { - id: 3, - name: "Dan Abramov", - number: "12-43-234345", - }, - { - id: 4, - name: "Mary Poppendieck", - number: "39-23-6423122", - }, -]; +app.get('/api/persons', (req, res) => { + Phonebook.find({}).then(result => { + res.json(result) + }) +}) -app.get("/api/persons", (req, res) => { - res.json(persons); -}); +app.get('/info', (req, res) => { + Phonebook.find({}).then(result => { + res.send(`

Phonebook has info for ${result.length} people

${Date()}

`) + }) +}) -app.get("/info", (req, res) => { - const date = new Date(); - res.send( - `

Phonebook has info for ${persons.length} people

${date}

` - ); -}); +app.get('/api/persons/:id', (req, res, next) => { + Phonebook.findById(req.params.id) + .then(result => { + if (result) { + res.json(result) + } else { + res.status(404).end() + } + }) + .catch(error => next(error)) +}) -app.get("/api/persons/:id", (req, res) => { - const id = Number(req.params.id); - const person = persons.find((person) => { - return person.id === id; - }); - if (person) { - res.json(person); - } else { - res.status(404).end(); - } -}); +app.put('/api/persons/:id', (req, res, next) => { + const { name, number } = req.body -app.delete("/api/persons/:id", (req, res) => { - const id = Number(req.params.id); - persons = persons.filter((person) => person.id !== id); - res.status(204).end(); -}); + Phonebook.findByIdAndUpdate( + req.params.id, + { name, number }, + { new: true, runValidators: true, context: 'query' } + ) + .then(updatedPerson => { + res.json(updatedPerson) + }) + .catch(error => next(error)) +}) -const generateId = () => { - const maxId = persons.length > 0 ? Math.max(...persons.map((n) => n.id)) : 0; - return maxId + 1; -}; +app.delete('/api/persons/:id', (req, res, next) => { + Phonebook.findByIdAndRemove(req.params.id) + .then(() => { + res.status(204).end() + }) + .catch(error => next(error)) +}) -app.post("/api/persons", (req, res) => { - const body = req.body; - if (!body.name || !body.number) { +app.post('/api/persons', (req, res, next) => { + const { name, number } = req.body + if ( name || number) { return res.status(400).json({ - error: "name or number is missing", - }); - } else if (persons.find((person) => person.name === body.name)) { - return res.status(400).json({ - error: "name must be unique", - }); + error: 'name or number is missing', + }) } - const person = { - id: generateId(), - name: body.name, - number: body.number, - }; - persons = persons.concat(person); - res.json(person); -}); + const phonebook = new Phonebook({ + name: name, + number: number, + }) + phonebook.save().then(result => { + res.json(result) + }).catch(error => next(error)) +}) const unknownEndpoint = (req, res) => { - res.status(404).send({ error: "unknown endpoint" }); -}; + res.status(404).send({ error: 'unknown endpoint' }) +} -app.use(unknownEndpoint); +app.use(unknownEndpoint) -const PORT = process.env.PORT || 3001; +const errorHandler = (error, res, next) => { + console.error(error.message) + + if (error.name === 'CastError') { + return res.status(400).send({ error: 'malformatted id' }) + } else if (error.name === 'ValidationError') { + return res.status(400).json({ error: error.message }) + } + next(error) +} + +app.use(errorHandler) + +const PORT = process.env.PORT app.listen(PORT, () => { - console.log(`Server running on port ${PORT}`); -}); + console.log(`Server running on port ${PORT}`) +}) \ No newline at end of file diff --git a/part3/phonebook/models/phonebook.js b/part3/phonebook/models/phonebook.js new file mode 100644 index 0000000..3bd601b --- /dev/null +++ b/part3/phonebook/models/phonebook.js @@ -0,0 +1,37 @@ +const mongoose = require('mongoose') +const dotenv = require('dotenv') + +dotenv.config() + +const url = + `${process.env.MONGODB_URI}` +console.log('connecting to', url) +mongoose.set('strictQuery',false) +mongoose.connect(url).then(() => { console.log('connected to MongoDB') }) .catch((error) => { console.log('error connecting to MongoDB:', error.message) }) + +const phonebookSchema = new mongoose.Schema({ + name: { + type: String, + minlength: 3, + required: true, + }, + number: { + type: String, + validate: { + validator: (v) => /^\d{2}-\d{6,}|\d{3}-\d{5,}|(? `\`${props.value}\` is not a valid phone number.`, + }, + minlength: 8, + required: true, + }, +}) + +phonebookSchema.set('toJSON', { + transform: (document, returnedObject) => { + returnedObject.id = returnedObject._id.toString() + delete returnedObject._id + delete returnedObject.__v + } +}) + +module.exports = mongoose.model('Phonebook', phonebookSchema) \ No newline at end of file diff --git a/part3/phonebook/node_modules/.bin/dockerfile b/part3/phonebook/node_modules/.bin/dockerfile deleted file mode 120000 index 9753a5d..0000000 --- a/part3/phonebook/node_modules/.bin/dockerfile +++ /dev/null @@ -1 +0,0 @@ -../@flydotio/dockerfile/index.js \ No newline at end of file diff --git a/part3/phonebook/node_modules/.bin/ejs b/part3/phonebook/node_modules/.bin/ejs deleted file mode 120000 index 88e80d0..0000000 --- a/part3/phonebook/node_modules/.bin/ejs +++ /dev/null @@ -1 +0,0 @@ -../ejs/bin/cli.js \ No newline at end of file diff --git a/part3/phonebook/node_modules/.bin/jake b/part3/phonebook/node_modules/.bin/jake deleted file mode 120000 index 3626745..0000000 --- a/part3/phonebook/node_modules/.bin/jake +++ /dev/null @@ -1 +0,0 @@ -../jake/bin/cli.js \ No newline at end of file diff --git a/part3/phonebook/node_modules/.package-lock.json b/part3/phonebook/node_modules/.package-lock.json index 6746100..6d41c24 100644 --- a/part3/phonebook/node_modules/.package-lock.json +++ b/part3/phonebook/node_modules/.package-lock.json @@ -4,34 +4,193 @@ "lockfileVersion": 3, "requires": true, "packages": { - "node_modules/@flydotio/dockerfile": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@flydotio/dockerfile/-/dockerfile-0.2.5.tgz", - "integrity": "sha512-sIuGnkn9X7GlYIF+aPXW3h3q0QIhRz4ESA+i5zZLgVliP5HU30eX4YT1us5XCbW+pgycSwbvIyAPH27rLRJxbA==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { - "chalk": "^5.2.0", - "diff": "^5.1.0", - "ejs": "^3.1.9", - "yargs": "^17.7.2" - }, - "bin": { - "dockerfile": "index.js" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@flydotio/dockerfile/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", "dev": true, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", + "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/node": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" } }, "node_modules/abbrev": { @@ -52,6 +211,67 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -65,17 +285,17 @@ "node": ">= 8" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -152,6 +372,14 @@ "node": ">=8" } }, + "node_modules/bson": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", + "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==", + "engines": { + "node": ">=14.20.1" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -172,6 +400,52 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -199,63 +473,23 @@ "fsevents": "~2.3.2" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12" + "node": ">=7.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -307,6 +541,20 @@ "node": ">= 0.10" } }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -315,6 +563,12 @@ "ms": "2.0.0" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -332,13 +586,24 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, "engines": { - "node": ">=0.3.1" + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" } }, "node_modules/ee-first": { @@ -346,27 +611,6 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -375,20 +619,201 @@ "node": ">= 0.8" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", + "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.41.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -438,34 +863,43 @@ "node": ">= 0.10.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { - "minimatch": "^5.0.1" + "reusify": "^1.0.4" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/fill-range": { @@ -497,6 +931,41 @@ "node": ">= 0.8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -513,20 +982,17 @@ "node": ">= 0.6" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -541,6 +1007,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -553,6 +1039,27 @@ "node": ">= 6" } }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -621,17 +1128,66 @@ "node": ">=0.10.0" } }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -682,94 +1238,87 @@ "node": ">=0.12.0" } }, - "node_modules/jake": { - "version": "10.8.6", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.6.tgz", - "integrity": "sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -778,6 +1327,12 @@ "node": ">= 0.6" } }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -833,6 +1388,73 @@ "node": "*" } }, + "node_modules/mongodb": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.5.0.tgz", + "integrity": "sha512-XgrkUgAAdfnZKQfk5AsYL8j7O99WHd4YXPxYxnh8dZxD+ekYWFRA3JktUsBnfg+455Smf75/+asoU/YLwNGoQQ==", + "dependencies": { + "bson": "^5.3.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "saslprep": "^1.0.3" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.201.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongoose": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.2.1.tgz", + "integrity": "sha512-c2OOl+ch9NlmPeJw7UjSb2jHNjoOw1XXHyzwygIf4z1GmaBx1OYb8OYqHkYPivvEmfY/vUWZFCgePsDqZgFn2w==", + "dependencies": { + "bson": "^5.3.0", + "kareem": "2.5.1", + "mongodb": "5.5.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -859,11 +1481,57 @@ "node": ">= 0.8" } }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -974,6 +1642,74 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -982,6 +1718,33 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -999,6 +1762,15 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1017,6 +1789,14 @@ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -1031,6 +1811,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -1065,15 +1865,63 @@ "node": ">=8.10.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1098,6 +1946,18 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -1154,6 +2014,27 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -1167,6 +2048,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, "node_modules/simple-update-notifier": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", @@ -1188,6 +2074,37 @@ "semver": "bin/semver.js" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -1196,6 +2113,30 @@ "node": ">= 0.8" } }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1208,6 +2149,12 @@ "node": ">=4" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1240,6 +2187,41 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1266,6 +2248,15 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1282,178 +2273,66 @@ "node": ">= 0.8" } }, - "node_modules/wrap-ansi": { + "node_modules/webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">= 8" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "engines": { "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } diff --git a/part3/phonebook/node_modules/@flydotio/dockerfile/README.md b/part3/phonebook/node_modules/@flydotio/dockerfile/README.md deleted file mode 100644 index 04e8121..0000000 --- a/part3/phonebook/node_modules/@flydotio/dockerfile/README.md +++ /dev/null @@ -1,59 +0,0 @@ -[![stability-beta](https://img.shields.io/badge/stability-beta-33bbff.svg)](https://github.com/mkenney/software-guides/blob/master/STABILITY-BADGES.md#beta) - -## Overview - -Provides a Node.js generator to produce Dockerfiles and related files. It is intended to support any framework that lists its dependencies, includes a `start` script in `package.json`, and optionally includes a `build` script. - -See [test](./test) for a list of frameworks and examples of Dockerfiles produced based on the associated `package.json` and lock files. - -See [blog post](https://fly.io/blog/flydotio-heart-js/) for more information. - -## Usage - -To run once: - -``` -npx --yes @flydotio/dockerfile@latest -``` - -Or install it with your favorite package manager: - -``` -npm install @flydotio/dockerfile --save-dev -pnpm add -D @flydotio/dockerfile -yarn add @flydotio/dockerfile --dev -``` - -Once installed, you can run and re-run using: - -``` -npx dockerfile -``` - -Options are saved between runs into `package.json`. To invert a boolean options, add or remove a no- prefix from the option name. - -### Options: - -* `--ignore-scripts` - do not execute any scripts defined in the project `package.json` and its dependencies. -* `--force` - overwrite existing files -* `--legacy-peer-deps` - [ignore peer dependencies](https://docs.npmjs.com/cli/v7/using-npm/config#legacy-peer-deps). -* `--swap=n` - allocate swap space. See [falloc options](https://man7.org/linux/man-pages/man1/fallocate.1.html#OPTIONS) for suffixes -* `--windows` - make Dockerfile work for Windows users that may have set `git config --global core.autocrlf true`. - -## Testing - -A single invocation of `npm test` will run all of the tests defined. Additionally `npm run eslint` will run eslint. - -The current integration testing strategy is to run the dockerfile generator against various configurations and compare the generated artifacts with expected results. `ARG` values in `Dockerfiles` are masked before comparison. - -To assis with this process, outputs of tests can be captured automatically. This is useful when adding new tests and when making a change that affects many tests. Be sure to inspect the output (e.g., by using `git diff`) before committing. - -``` -npm run test:capture -``` - -Additionally, each the outputs in each test directory can be directly tested to ensure that they can be successfully built by running docker buildx directory passing in the necessary build arguments. For example: - -``` -docker buildx build . --build-arg NODE_VERSION=18 -``` diff --git a/part3/phonebook/node_modules/@flydotio/dockerfile/gdf.js b/part3/phonebook/node_modules/@flydotio/dockerfile/gdf.js deleted file mode 100755 index 5c042bf..0000000 --- a/part3/phonebook/node_modules/@flydotio/dockerfile/gdf.js +++ /dev/null @@ -1,417 +0,0 @@ -#!/usr/bin/env node - -import fs from 'node:fs' -import url from 'node:url' -import path from 'node:path' -import { execSync } from 'node:child_process' - -import * as ejs from 'ejs' -import chalk from 'chalk' -import * as Diff from 'diff' -import * as readline from 'node:readline' - -const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) - -// Generate Dockerfile class -export class GDF { - static templates = path.join(__dirname, 'templates') - - // Where the app is. Used both for scanning and is updated with new files. - #appdir - - // Parsed package.json file contents. - #pj - - // which packager is used (npm, pnpm, yarn) - #packager - - // previous answer to conflict prompt - #answer = '' - - // Does this application use remix.run? - get remix() { - return !!(this.#pj.dependencies?.remix || - this.#pj.dependencies?.['@remix-run/node']) - } - - // Does this application use prisma? - get prisma() { - return !!(this.#pj.dependencies?.['@prisma/client'] || - this.#pj.devDependencies?.prisma) - } - - // Does this application use next.js? - get nextjs() { - return !!this.#pj.dependencies?.next - } - - // Does this application use nuxt.js? - get nuxtjs() { - return !!this.#pj.dependencies?.nuxt - } - - // Does this application use gatsby? - get gatsby() { - return !!this.#pj.dependencies?.gatsby - } - - // Does this application use nest? - get nestjs() { - return !!this.#pj.dependencies?.['@nestjs/core'] - } - - // what node version should be used? - get nodeVersion() { - const ltsVersion = '18.16.0' - - try { - return execSync('node -v', { encoding: 'utf8' }) - .match(/\d+\.\d+\.\d+/)?.[0] || ltsVersion - } catch { - return ltsVersion - } - } - - // classic version of yarn (installed by default) - yarnClassic = '1.22.19' - - // What yarn version should be used? - get yarnVersion() { - const version = this.#pj.packageManager?.match(/(\d+\.\d+\.\d+)/)?.[0] // Should return something like "1.22.10" - - if (version !== undefined) { - return version - } else { - try { - return execSync('yarn --version', { encoding: 'utf8' }) - .match(/\d+\.\d+\.\d+/)?.[0] || this.yarnClassic - } catch { - return this.yarnClassic - } - } - } - - // What pnpm version should be used? - get pnpmVersion() { - try { - return execSync('pnpm --version', { encoding: 'utf8' }) - .match(/\d+\.\d+\.\d+/)?.[0] || 'latest' - } catch { - return 'latest' - } - } - - // List of package files needed to install - get packageFiles() { - const result = ['package.json'] - - for (const file of ['package-lock.json', 'pnpm-lock.yaml', 'yarn.lock']) { - if (fs.statSync(path.join(this.#appdir, file), { throwIfNoEntry: false })) { - result.push(file) - } - } - - return result - } - - // Which packager should be used? - get packager() { - if (this.#packager !== undefined) return this.#packager - - const packageFiles = this.packageFiles - - if (packageFiles.includes('yarn.lock')) { - this.#packager = 'yarn' - } else if (packageFiles.includes('pnpm-lock.yaml')) { - this.#packager = 'pnpm' - } else { - this.#packager = 'npm' - } - - return this.#packager - } - - // install all dependencies in package.json - get packagerInstall() { - let install = `${this.packager} install` - - const packageFiles = this.packageFiles - - // clean install - if (this.packager === 'npm' && packageFiles.includes('package-lock.json')) { - install = 'npm ci' - } else if (packageFiles.includes('yarn.lock')) { - if (this.yarnVersion.startsWith('1.')) { - install += ' --frozen-lockfile' - } else if (this.yarnVersion.startsWith('2.')) { - install += ' --immutable --immutable-cache --check-cache' - } else { - // yarn 3+ - install += ' --immutable' - } - } else if (packageFiles.includes('pnpm-lock.yaml')) { - install += ' --frozen-lockfile' - } - - // optionally include dev dependencies - if (this.devDependencies && !this.pnpm) { - if (this.yarn) { - install += ' --production=false' - } else { - install += ' --include=dev' - } - } - - // optionally include legacy peer dependencies - if (this.options.legacyPeerDeps) { - if (this.npm) { - install += ' --legacy-peer-deps' - } else if (this.yarn && !this.yarnVersion.startsWith('1.')) { - install += ' --legacy-peer-deps' - } - } - - // optionally include scripts - if (this.options.ignoreScripts) { - install += ' --ignore-scripts' - } - - return install - } - - // Prune development dependencies - get packagerPrune() { - let prune - - if (this.yarn) { - prune = 'yarn install --production=true' - - if (this.options.legacyPeerDeps && !this.yarnVersion.startsWith('1.')) { - prune += ' --legacy-peer-deps' - } - } else if (this.pnpm) { - prune = 'pnpm prune --prod' - } else { - prune = 'npm prune --omit=dev' - - if (this.options.legacyPeerDeps) prune += ' --legacy-peer-deps' - } - - return prune - } - - // Is the packager yarn? - get yarn() { - return this.packager === 'yarn' - } - - // Is the packager npm? - get npm() { - return this.packager === 'npm' - } - - // Is the packager pnpm? - get pnpm() { - return this.packager === 'pnpm' - } - - // How to install python (switched from buster to bullseye) - get python() { - return parseInt(this.nodeVersion.split('.')[0]) > 16 ? 'python-is-python3' : 'python' - } - - // Are there any development dependencies? - get devDependencies() { - return !!this.#pj.devDependencies - } - - // Is there a build script? - get build() { - return !!this.#pj.scripts?.build - } - - // Descriptive form of detected runtime - get runtime() { - let runtime = 'Node.js' - - if (this.remix) runtime = 'Remix' - if (this.nextjs) runtime = 'Next.js' - if (this.nuxtjs) runtime = 'Nuxt.js' - if (this.nestjs) runtime = 'NestJS' - if (this.gatsby) runtime = 'Gatsby' - - if (this.prisma) runtime += '/Prisma' - - return runtime - } - - get user() { - return this.runtime.split('/')[0].replaceAll('.', '').toLowerCase() - } - - // command to start the web server - get startCommand() { - if (this.gatsby) { - return ['npx', 'gatsby', 'serve', '-H', '0.0.0.0'] - } else if (this.runtime === 'Node.js' && this.#pj.scripts?.start?.includes('fastify')) { - let start = this.#pj.scripts.start - if (!start.includes('-a') && !start.includes('--address')) { - start = start.replace('start', 'start --address 0.0.0.0') - } - - start = start.split(' ') - start.unshift('npx') - return start - } else { - return [this.packager, 'run', 'start'] - } - } - - // Does this Dockerfile need an entrypoint script? - get entrypoint() { - return this.prisma || this.options.swap - } - - // determine if the entrypoint needs to be adjusted to run on Linux - // generally only needed when developing on windows - get entrypointFixups() { - const fixups = [] - - const entrypoint = path.join(this.#appdir, 'docker-entrypoint') - - const stat = fs.statSync(entrypoint, { throwIfNoEntry: false }) - if (!stat) return fixups - - if (this.options.windows || !(stat.mode & fs.constants.S_IXUSR)) { - fixups.push('chmod +x ./docker-entrypoint') - } - - if (this.options.windows || fs.readFileSync(entrypoint, 'utf-8').includes('\r')) { - fixups.push('sed -i "s/\\r$//g" ./docker-entrypoint') - } - - return fixups - } - - // Port to be used - get port() { - let port = 3000 - - if (this.gatsby) port = 8080 - if (this.remix) port = 8080 - - return port - } - - // render each template and write to the destination dir - async run(appdir, options = {}) { - this.options = options - this.#appdir = appdir - this.#pj = JSON.parse(fs.readFileSync(path.join(appdir, 'package.json'), 'utf-8')) - - if (options.force) this.#answer = 'a' - - // select and render templates - const templates = ['Dockerfile.ejs'] - if (this.entrypoint) templates.unshift('docker-entrypoint.ejs') - - for (const template of templates) { - const dest = await this.#writeTemplateFile(template) - - if (template === 'docker-entrypoint.ejs') fs.chmodSync(dest, 0o755) - } - - // ensure that there is a dockerignore file - try { - fs.statSync(path.join(appdir, '.dockerignore')) - } catch { - try { - fs.copyFileSync( - path.join(appdir, '.gitignore'), - path.join(appdir, '.dockerignore') - ) - } catch { - await this.#writeTemplateFile('.dockerignore.ejs') - } - } - } - - // write template file, prompting when there is a conflict - async #writeTemplateFile(template) { - const proposed = await ejs.renderFile(path.join(GDF.templates, template), this) - const name = template.replace(/\.ejs$/m, '') - const dest = path.join(this.#appdir, name) - - if (fs.statSync(dest, { throwIfNoEntry: false })) { - const current = fs.readFileSync(dest, 'utf-8') - - if (current === proposed) { - console.log(` ${chalk.bold.blue('identical')} ${name}`) - return dest - } - - let prompt - let question - - try { - if (this.#answer !== 'a') { - console.log(`${chalk.bold.red('conflict'.padStart(11))} ${name}`) - - prompt = readline.createInterface({ - input: process.stdin, - output: process.stdout - }) - - // support node 16 which doesn't have a promisfied readline interface - question = query => { - return new Promise(resolve => { - prompt.question(query, resolve) - }) - } - } - - while (true) { - if (question) { - this.#answer = await question(`Overwrite ${dest}? (enter "h" for help) [Ynaqdh] `) - } - - switch (this.#answer.toLocaleLowerCase()) { - case '': - case 'y': - case 'a': - console.log(`${chalk.bold.yellow('force'.padStart(11, ' '))} ${name}`) - fs.writeFileSync(dest, proposed) - return dest - - case 'n': - console.log(`${chalk.bold.yellow('skip'.padStart(11, ' '))} ${name}`) - return dest - - case 'q': - process.exit(0) - break - - case 'd': - console.log(Diff.createPatch(name, current, proposed, 'current', 'proposed').trimEnd() + '\n') - break - - default: - console.log(' Y - yes, overwrite') - console.log(' n - no, do not overwrite') - console.log(' a - all, overwrite this and all others') - console.log(' q - quit, abort') - console.log(' d - diff, show the differences between the old and the new') - console.log(' h - help, show this help') - } - } - } finally { - if (prompt) prompt.close() - } - } else { - console.log(`${chalk.bold.green('create'.padStart(11, ' '))} ${name}`) - fs.writeFileSync(dest, proposed) - } - - return dest - } -} diff --git a/part3/phonebook/node_modules/@flydotio/dockerfile/index.js b/part3/phonebook/node_modules/@flydotio/dockerfile/index.js deleted file mode 100755 index 09cab48..0000000 --- a/part3/phonebook/node_modules/@flydotio/dockerfile/index.js +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env node - -import fs from 'node:fs' -import process from 'node:process' - -import yargs from 'yargs' -import { hideBin } from 'yargs/helpers' - -import { GDF } from './gdf.js' - -// defaults for all the flags that will be saved -const defaults = { - ignoreScripts: false, - legacyPeerDeps: false, - swap: '', - windows: false -} - -// read previous values from package.json -let pj = null -try { - pj = JSON.parse(fs.readFileSync('package.json', 'utf-8')) -} catch { -} - -// parse command line for options -const options = yargs((hideBin(process.argv))) - .usage('$0 [args]') - .epilog('Options are saved between runs into package.json. more info:\n https://github.com/fly-apps/dockerfile-node#readme') - .option('force', { - describe: 'force overwrite of existing files', - type: 'boolean' - }) - .option('ignore-scripts', { - alias: 'i', - describe: 'ignore scripts', - type: 'boolean' - }) - .option('legacy-peer-deps', { - alias: 'l', - describe: 'ignore peer dependencies', - type: 'boolean' - }) - .option('swap', { - alias: 's', - describe: 'allocate swap space (eg. 1G, 1GiB, 1024M)', - type: 'string' - }) - .option('windows', { - alias: 'w', - describe: 'make Dockerfile work for Windows users that may have set `git config --global core.autocrlf true`', - type: 'boolean' - }) - .parse() - -// parse and update package.json for default options -let save = false -if (pj) { - pj.dockerfile ||= {} - - for (const prop in defaults) { - if (prop in options && options[prop] !== pj.dockerfile[prop]) { - if (options[prop] === defaults[prop]) { - delete pj.dockerfile[prop] - } else { - pj.dockerfile[prop] = options[prop] - } - save = true - } - } - - Object.assign(defaults, pj.dockerfile) - - if (save) { - if (Object.keys(pj.dockerfile).length === 0) delete pj.dockerfile - fs.writeFileSync('package.json', JSON.stringify(pj, null, 2), 'utf-8') - } -} - -// generate dockerfile and related artifacts -new GDF().run(process.cwd(), { ...defaults, ...options }) diff --git a/part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/license b/part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/license deleted file mode 100644 index fa7ceba..0000000 --- a/part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/package.json b/part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/package.json deleted file mode 100644 index ddcf758..0000000 --- a/part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "chalk", - "version": "5.2.0", - "description": "Terminal string styling done right", - "license": "MIT", - "repository": "chalk/chalk", - "funding": "https://github.com/chalk/chalk?sponsor=1", - "type": "module", - "main": "./source/index.js", - "exports": "./source/index.js", - "imports": { - "#ansi-styles": "./source/vendor/ansi-styles/index.js", - "#supports-color": { - "node": "./source/vendor/supports-color/index.js", - "default": "./source/vendor/supports-color/browser.js" - } - }, - "types": "./source/index.d.ts", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "scripts": { - "test": "xo && c8 ava && tsd", - "bench": "matcha benchmark.js" - }, - "files": [ - "source", - "!source/index.test-d.ts" - ], - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "ansi", - "style", - "styles", - "tty", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "devDependencies": { - "@types/node": "^16.11.10", - "ava": "^3.15.0", - "c8": "^7.10.0", - "color-convert": "^2.0.1", - "execa": "^6.0.0", - "log-update": "^5.0.0", - "matcha": "^0.7.0", - "tsd": "^0.19.0", - "xo": "^0.53.0", - "yoctodelay": "^2.0.0" - }, - "xo": { - "rules": { - "unicorn/prefer-string-slice": "off", - "@typescript-eslint/consistent-type-imports": "off", - "@typescript-eslint/consistent-type-exports": "off", - "@typescript-eslint/consistent-type-definitions": "off" - } - }, - "c8": { - "reporter": [ - "text", - "lcov" - ], - "exclude": [ - "source/vendor" - ] - } -} diff --git a/part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/readme.md b/part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/readme.md deleted file mode 100644 index 93511c0..0000000 --- a/part3/phonebook/node_modules/@flydotio/dockerfile/node_modules/chalk/readme.md +++ /dev/null @@ -1,325 +0,0 @@ -

-
-
- Chalk -
-
-
-

- -> Terminal string styling done right - -[![Coverage Status](https://codecov.io/gh/chalk/chalk/branch/main/graph/badge.svg)](https://codecov.io/gh/chalk/chalk) -[![npm dependents](https://badgen.net/npm/dependents/chalk)](https://www.npmjs.com/package/chalk?activeTab=dependents) -[![Downloads](https://badgen.net/npm/dt/chalk)](https://www.npmjs.com/package/chalk) -[![run on repl.it](https://img.shields.io/badge/Run_on_Replit-f26207?logo=replit&logoColor=white)](https://repl.it/github/chalk/chalk) - -![](media/screenshot.png) - -
- ---- - -
-

-

- - Sindre Sorhus' open source work is supported by the community on GitHub Sponsors - -

- Special thanks to: -
-
- - - -
-
- - - -
-
- -
- Strapi -
- Strapi is the leading open-source headless CMS. -
- It’s 100% JavaScript, fully customizable, and developer-first. -
-
-
-
- -
- StackAid -
- Fund your open source dependencies -
-
-
-

-
- ---- - -
- -## Highlights - -- Expressive API -- Highly performant -- No dependencies -- Ability to nest styles -- [256/Truecolor color support](#256-and-truecolor-color-support) -- Auto-detects color support -- Doesn't extend `String.prototype` -- Clean and focused -- Actively maintained -- [Used by ~86,000 packages](https://www.npmjs.com/browse/depended/chalk) as of October 4, 2022 - -## Install - -```sh -npm install chalk -``` - -**IMPORTANT:** Chalk 5 is ESM. If you want to use Chalk with TypeScript or a build tool, you will probably want to use Chalk 4 for now. [Read more.](https://github.com/chalk/chalk/releases/tag/v5.0.0) - -## Usage - -```js -import chalk from 'chalk'; - -console.log(chalk.blue('Hello world!')); -``` - -Chalk comes with an easy to use composable API where you just chain and nest the styles you want. - -```js -import chalk from 'chalk'; - -const log = console.log; - -// Combine styled and normal strings -log(chalk.blue('Hello') + ' World' + chalk.red('!')); - -// Compose multiple styles using the chainable API -log(chalk.blue.bgRed.bold('Hello world!')); - -// Pass in multiple arguments -log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz')); - -// Nest styles -log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!')); - -// Nest styles of the same type even (color, underline, background) -log(chalk.green( - 'I am a green line ' + - chalk.blue.underline.bold('with a blue substring') + - ' that becomes green again!' -)); - -// ES2015 template literal -log(` -CPU: ${chalk.red('90%')} -RAM: ${chalk.green('40%')} -DISK: ${chalk.yellow('70%')} -`); - -// Use RGB colors in terminal emulators that support it. -log(chalk.rgb(123, 45, 67).underline('Underlined reddish color')); -log(chalk.hex('#DEADED').bold('Bold gray!')); -``` - -Easily define your own themes: - -```js -import chalk from 'chalk'; - -const error = chalk.bold.red; -const warning = chalk.hex('#FFA500'); // Orange color - -console.log(error('Error!')); -console.log(warning('Warning!')); -``` - -Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args): - -```js -import chalk from 'chalk'; - -const name = 'Sindre'; -console.log(chalk.green('Hello %s'), name); -//=> 'Hello Sindre' -``` - -## API - -### chalk.`