diff --git a/.github/workflows/axon-tools-tests.yml b/.github/workflows/axon-tools-tests.yml index 753c5c59..3ec92aa0 100644 --- a/.github/workflows/axon-tools-tests.yml +++ b/.github/workflows/axon-tools-tests.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x, 20.x] + node-version: [18.x, 20.x, 22.x, 24.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: diff --git a/.github/workflows/mdctl-core-tests.yml b/.github/workflows/mdctl-core-tests.yml index 0f67e3ee..97499696 100644 --- a/.github/workflows/mdctl-core-tests.yml +++ b/.github/workflows/mdctl-core-tests.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x, 20.x] + node-version: [18.x, 20.x, 22.x, 24.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..209e3ef4 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 diff --git a/lerna.json b/lerna.json index b0990203..2aca4091 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "packages": [ "packages/*" ], - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "npmClient": "npm", "npmClientArgs": [ "--production", diff --git a/package-lock.json b/package-lock.json index feb737fa..b0fa62f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3998,7 +3998,8 @@ "node_modules/abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true }, "node_modules/abort-controller": { "version": "3.0.0", @@ -4112,14 +4113,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "engines": { - "node": ">=0.4.2" - } - }, "node_modules/ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", @@ -4181,12 +4174,14 @@ "node_modules/aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, "node_modules/are-we-there-yet": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -4200,11 +4195,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg==" - }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -4447,14 +4437,6 @@ "node": ">=0.10.0" } }, - "node_modules/ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", @@ -5076,14 +5058,6 @@ "node": ">=0.10.0" } }, - "node_modules/base62": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz", - "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==", - "engines": { - "node": "*" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -5117,6 +5091,21 @@ "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", "dev": true }, + "node_modules/better-sqlite3": { + "version": "12.9.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.9.0.tgz", + "integrity": "sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -5129,6 +5118,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -5300,7 +5299,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/buffer-xor": { "version": "1.0.3", @@ -5705,14 +5705,6 @@ "node": ">=0.8" } }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -5867,48 +5859,6 @@ "node": ">= 6" } }, - "node_modules/commoner": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "integrity": "sha512-3/qHkNMM6o/KGXHITA14y78PcfmXh4+AOCJpSoF73h4VY1JpdGv3CHMS5+JW6SwLhfJt4RhNmLAa7+RRX/62EQ==", - "dependencies": { - "commander": "^2.5.0", - "detective": "^4.3.1", - "glob": "^5.0.15", - "graceful-fs": "^4.1.2", - "iconv-lite": "^0.4.5", - "mkdirp": "^0.5.0", - "private": "^0.1.6", - "q": "^1.1.2", - "recast": "^0.11.17" - }, - "bin": { - "commonize": "bin/commonize" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commoner/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/commoner/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -5989,7 +5939,8 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", @@ -6944,14 +6895,6 @@ "node": ">=0.10.0" } }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -6963,7 +6906,8 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "node_modules/deprecation": { "version": "2.3.1", @@ -7010,26 +6954,6 @@ "node": ">=8" } }, - "node_modules/detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "dependencies": { - "acorn": "^5.2.1", - "defined": "^1.0.0" - } - }, - "node_modules/detective/node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", @@ -7389,28 +7313,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es3ify": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.2.2.tgz", - "integrity": "sha512-QQ6yXmQM/cfWYj9/DM3hPRcHBZdWCoJU+35CoaMqw53sH2uqr29EZ0ne1PF/3LIG/cmawn1SbCPqcZE+siHmwg==", - "dependencies": { - "esprima": "^2.7.1", - "jstransform": "~11.0.0", - "through": "~2.3.4" - } - }, - "node_modules/es3ify/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -7907,11 +7809,6 @@ "node": ">=4" } }, - "node_modules/esmangle-evaluator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz", - "integrity": "sha512-wG16Qv6u5Let+nMeQ+HDwlZYa2fAUD0uiWOy6719n2sMGHnCs+vzxwsLHOIUR3qU6Fxpex+WLNpnZukYJuZi5A==" - }, "node_modules/espree": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", @@ -7938,18 +7835,6 @@ "node": ">=4" } }, - "node_modules/esprima-fb": { - "version": "15001.1.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", - "integrity": "sha512-59dDGQo2b3M/JfKIws0/z8dcXH2mnVHkfSPRhCYS91JNGfGNwr7GsSF6qzWZuOGvw5Ii0w9TtylrX07MGmlOoQ==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -8270,36 +8155,6 @@ "node >=0.6.0" ] }, - "node_modules/falafel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz", - "integrity": "sha512-oKyHugGk3tYQcZmj3+J+0PlcU59JYOZL60Lr3dYwsLDDYYR/+GYvAhW5WO3NTfh2FJOcGRoXJxxtGpda1qE5Sg==", - "dependencies": { - "acorn": "^1.0.3", - "foreach": "^2.0.5", - "isarray": "0.0.1", - "object-keys": "^1.0.6" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/falafel/node_modules/acorn": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", - "integrity": "sha512-FsqWmApWGMGLKKNpHt12PMc5AK7BaZee0WRh04fCysmTzHe+rrKOa2MKjORhnzfpe4r0JnfdqHn02iDA9Dqj2A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/falafel/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8368,17 +8223,6 @@ "bser": "2.1.1" } }, - "node_modules/fetch-cookie": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", - "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", - "dependencies": { - "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -8409,6 +8253,13 @@ "node": ">=4" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "license": "MIT" + }, "node_modules/fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -8552,11 +8403,6 @@ "node": ">=0.10.0" } }, - "node_modules/foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" - }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -8627,6 +8473,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, "dependencies": { "minipass": "^2.6.0" } @@ -8722,6 +8569,7 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, "dependencies": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -8737,6 +8585,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8745,6 +8594,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "dependencies": { "number-is-nan": "^1.0.0" }, @@ -8756,6 +8606,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -8769,6 +8620,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "dependencies": { "ansi-regex": "^2.0.0" }, @@ -9766,7 +9618,8 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true }, "node_modules/has-value": { "version": "1.0.0", @@ -10011,15 +9864,11 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, "dependencies": { "minimatch": "^3.0.4" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -10192,45 +10041,6 @@ "validate-npm-package-name": "^3.0.0" } }, - "node_modules/inline-process-browser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz", - "integrity": "sha512-DyFIA2uFCdhB57k1blue0nbd/syuws7NIlE0UkWSWbiM++mbo8W6Zl0QZ/7DwveucRC7YUi87OgJvJyERnwCbg==", - "dependencies": { - "falafel": "^1.0.1", - "through2": "^0.6.5" - } - }, - "node_modules/inline-process-browser/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/inline-process-browser/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/inline-process-browser/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/inline-process-browser/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, "node_modules/inquirer": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", @@ -16880,43 +16690,6 @@ "node": ">=0.6.0" } }, - "node_modules/jstransform": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", - "integrity": "sha512-LGm87w0A8E92RrcXt94PnNHkFqHmgDy3mKHvNZOG7QepKCTCH/VB6S+IEN+bT4uLN3gVpOT0vvOOVd96osG71g==", - "dependencies": { - "base62": "^1.1.0", - "commoner": "^0.10.1", - "esprima-fb": "^15001.1.0-dev-harmony-fb", - "object-assign": "^2.0.0", - "source-map": "^0.4.2" - }, - "bin": { - "jstransform": "bin/jstransform" - }, - "engines": { - "node": ">=0.8.8" - } - }, - "node_modules/jstransform/node_modules/object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jstransform/node_modules/source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -17330,17 +17103,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lie": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.0.4.tgz", - "integrity": "sha512-i21Zz/APyOIeouLMMCvXPKxibClh0AmLLqnmPg51GAeDJgmkwKkyATdVEVejDsXi8n+vJLlu1GyE5V/pZi3uUA==", - "dependencies": { - "es3ify": "^0.2.2", - "immediate": "~3.0.5", - "inline-process-browser": "^1.0.0", - "unreachable-branch-transform": "^0.3.0" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -18215,6 +17977,7 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, "dependencies": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -18224,6 +17987,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, "dependencies": { "minipass": "^2.9.0" } @@ -18276,6 +18040,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -19051,11 +18816,6 @@ "thenify-all": "^1.0.0" } }, - "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" - }, "node_modules/nanoid": { "version": "3.1.32", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", @@ -19121,30 +18881,6 @@ "through2": "^2.0.2" } }, - "node_modules/needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -19340,61 +19076,12 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node_modules/node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", - "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/node-pre-gyp/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/node-pre-gyp/node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, - "node_modules/noop-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz", - "integrity": "sha512-pQ8vODlgXt2e7A3mIbFDlizkr46r75V+BJxVAyat8Jl7YmI513gG5cfyRL0FedKraoZ+VAouI1h4/IWpus5pcQ==" - }, "node_modules/nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -19444,6 +19131,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" } @@ -19467,7 +19155,8 @@ "node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true }, "node_modules/npm-package-arg": { "version": "6.1.1", @@ -19485,6 +19174,7 @@ "version": "1.4.8", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, "dependencies": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1", @@ -19517,6 +19207,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, "dependencies": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -19550,6 +19241,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -19618,6 +19310,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -19813,6 +19506,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -19855,6 +19549,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -20258,618 +19953,6 @@ "node": ">=0.10.0" } }, - "node_modules/pouchdb-abstract-mapreduce": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz", - "integrity": "sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w==", - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-mapreduce-utils": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-abstract-mapreduce/node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/pouchdb-abstract-mapreduce/node_modules/pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "dependencies": { - "buffer-from": "1.1.2" - } - }, - "node_modules/pouchdb-abstract-mapreduce/node_modules/pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "node_modules/pouchdb-abstract-mapreduce/node_modules/pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "dependencies": { - "inherits": "2.0.4" - } - }, - "node_modules/pouchdb-abstract-mapreduce/node_modules/pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "node_modules/pouchdb-abstract-mapreduce/node_modules/pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "dependencies": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "node_modules/pouchdb-abstract-mapreduce/node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "node_modules/pouchdb-abstract-mapreduce/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/pouchdb-adapter-node-websql": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-node-websql/-/pouchdb-adapter-node-websql-7.0.0.tgz", - "integrity": "sha512-fNaOMO8bvMrRTSfmH4RSLSpgnKahRcCA7Z0jg732PwRbGvvMdGbreZwvKPPD1fg2tm2ZwwiXWK2G3+oXyoqZYw==", - "dependencies": { - "pouchdb-adapter-websql-core": "7.0.0", - "pouchdb-utils": "7.0.0", - "websql": "1.0.0" - } - }, - "node_modules/pouchdb-adapter-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.0.0.tgz", - "integrity": "sha512-UWKPC6jkz6mHUzZefrU7P5X8ZGvBC8LSNZ7BIp0hWvJE6c20cnpDwedTVDpZORcCbVJpDmFOHBYnOqEIblPtbA==", - "dependencies": { - "pouchdb-binary-utils": "7.0.0", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-md5": "7.0.0", - "pouchdb-merge": "7.0.0", - "pouchdb-utils": "7.0.0" - } - }, - "node_modules/pouchdb-adapter-websql-core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-7.0.0.tgz", - "integrity": "sha512-NyMaH0bl20SdJdOCzd+fwXo8JZ15a48/MAwMcIbXzsRHE4DjFNlRcWAcjUP6uN4Ezc+Gx+r2tkBBMf71mIz1Aw==", - "dependencies": { - "pouchdb-adapter-utils": "7.0.0", - "pouchdb-binary-utils": "7.0.0", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-json": "7.0.0", - "pouchdb-merge": "7.0.0", - "pouchdb-utils": "7.0.0" - } - }, - "node_modules/pouchdb-binary-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz", - "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==", - "dependencies": { - "buffer-from": "1.1.0" - } - }, - "node_modules/pouchdb-binary-utils/node_modules/buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" - }, - "node_modules/pouchdb-changes-filter": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-changes-filter/-/pouchdb-changes-filter-7.3.1.tgz", - "integrity": "sha512-C31zsslhlxyFdlKPdZ0013Z4GIsWjoSTgptfamrPnXEtOS6EX4jLtcmiGURCIXmZlcDGKRm8qWHL3vikwITalA==", - "dependencies": { - "pouchdb-errors": "7.3.1", - "pouchdb-selector-core": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-changes-filter/node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/pouchdb-changes-filter/node_modules/pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "dependencies": { - "buffer-from": "1.1.2" - } - }, - "node_modules/pouchdb-changes-filter/node_modules/pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "node_modules/pouchdb-changes-filter/node_modules/pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "dependencies": { - "inherits": "2.0.4" - } - }, - "node_modules/pouchdb-changes-filter/node_modules/pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "node_modules/pouchdb-changes-filter/node_modules/pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "dependencies": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "node_modules/pouchdb-changes-filter/node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "node_modules/pouchdb-changes-filter/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/pouchdb-collate": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.3.1.tgz", - "integrity": "sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ==" - }, - "node_modules/pouchdb-collections": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz", - "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==" - }, - "node_modules/pouchdb-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-core/-/pouchdb-core-7.3.1.tgz", - "integrity": "sha512-9jRZ70+4wrDohJQQ2OA8T9zzanefWf03ugGis5NJL24cpar8LjvQnceRo8X4KCQfVJr9su9LFe4L6YBqneE1VA==", - "dependencies": { - "argsarray": "0.0.1", - "inherits": "2.0.4", - "pouchdb-changes-filter": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-merge": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-core/node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/pouchdb-core/node_modules/pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "dependencies": { - "buffer-from": "1.1.2" - } - }, - "node_modules/pouchdb-core/node_modules/pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "node_modules/pouchdb-core/node_modules/pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "dependencies": { - "inherits": "2.0.4" - } - }, - "node_modules/pouchdb-core/node_modules/pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "node_modules/pouchdb-core/node_modules/pouchdb-merge": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.3.1.tgz", - "integrity": "sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw==" - }, - "node_modules/pouchdb-core/node_modules/pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "dependencies": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "node_modules/pouchdb-core/node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "node_modules/pouchdb-core/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/pouchdb-errors": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz", - "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/pouchdb-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/pouchdb-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pouchdb-extend/-/pouchdb-extend-0.1.2.tgz", - "integrity": "sha512-aGWbcFJNQLAdv30hExdFE8fhjsoOsyxv5s1TBNPSc6noTu4MX9n0s3h+YhWyJaE75SOTFbpmimuvXx9qONjI8w==" - }, - "node_modules/pouchdb-fetch": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.3.1.tgz", - "integrity": "sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag==", - "dependencies": { - "abort-controller": "3.0.0", - "fetch-cookie": "0.11.0", - "node-fetch": "2.6.7" - } - }, - "node_modules/pouchdb-find": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-7.3.1.tgz", - "integrity": "sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA==", - "dependencies": { - "pouchdb-abstract-mapreduce": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-selector-core": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-find/node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/pouchdb-find/node_modules/pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "dependencies": { - "buffer-from": "1.1.2" - } - }, - "node_modules/pouchdb-find/node_modules/pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "node_modules/pouchdb-find/node_modules/pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "dependencies": { - "inherits": "2.0.4" - } - }, - "node_modules/pouchdb-find/node_modules/pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "node_modules/pouchdb-find/node_modules/pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "dependencies": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "node_modules/pouchdb-find/node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "node_modules/pouchdb-find/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/pouchdb-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.0.0.tgz", - "integrity": "sha512-w0bNRu/7VmmCrFWMYAm62n30wvJJUT2SokyzeTyj3hRohj4GFwTRg1mSZ+iAmxgRKOFE8nzZstLG/WAB4Ymjew==", - "dependencies": { - "vuvuzela": "1.0.3" - } - }, - "node_modules/pouchdb-mapreduce-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.1.tgz", - "integrity": "sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg==", - "dependencies": { - "argsarray": "0.0.1", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-mapreduce-utils/node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/pouchdb-mapreduce-utils/node_modules/pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "dependencies": { - "buffer-from": "1.1.2" - } - }, - "node_modules/pouchdb-mapreduce-utils/node_modules/pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "node_modules/pouchdb-mapreduce-utils/node_modules/pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "dependencies": { - "inherits": "2.0.4" - } - }, - "node_modules/pouchdb-mapreduce-utils/node_modules/pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "node_modules/pouchdb-mapreduce-utils/node_modules/pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "dependencies": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "node_modules/pouchdb-mapreduce-utils/node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "node_modules/pouchdb-mapreduce-utils/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/pouchdb-md5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz", - "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==", - "dependencies": { - "pouchdb-binary-utils": "7.0.0", - "spark-md5": "3.0.0" - } - }, - "node_modules/pouchdb-merge": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.0.0.tgz", - "integrity": "sha512-tci5u6NpznQhGcPv4ho1h0miky9rs+ds/T9zQ9meQeDZbUojXNaX1Jxsb0uYEQQ+HMqdcQs3Akdl0/u0mgwPGg==" - }, - "node_modules/pouchdb-promise": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-5.4.3.tgz", - "integrity": "sha512-7WNPDutzlYiu/mF430nrK6K/eIewwEofxcU2P9h058dYXUP3zRo0Qp0UjuYP4wYt2r0DtyFtLFciZvxnXQZdXA==", - "dependencies": { - "lie": "3.0.4" - } - }, - "node_modules/pouchdb-selector-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.3.1.tgz", - "integrity": "sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w==", - "dependencies": { - "pouchdb-collate": "7.3.1", - "pouchdb-utils": "7.3.1" - } - }, - "node_modules/pouchdb-selector-core/node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/pouchdb-selector-core/node_modules/pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "dependencies": { - "buffer-from": "1.1.2" - } - }, - "node_modules/pouchdb-selector-core/node_modules/pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "node_modules/pouchdb-selector-core/node_modules/pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "dependencies": { - "inherits": "2.0.4" - } - }, - "node_modules/pouchdb-selector-core/node_modules/pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "dependencies": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "node_modules/pouchdb-selector-core/node_modules/pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "dependencies": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "node_modules/pouchdb-selector-core/node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "node_modules/pouchdb-selector-core/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/pouchdb-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz", - "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==", - "dependencies": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.0.6", - "inherits": "2.0.3", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-md5": "7.0.0", - "uuid": "3.2.1" - } - }, - "node_modules/pouchdb-utils/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/pouchdb-utils/node_modules/uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/pouchdb-wrappers": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pouchdb-wrappers/-/pouchdb-wrappers-4.1.0.tgz", - "integrity": "sha512-L94K7zgb2tFSvU/iAj1EHK8fC13vKWzzy8kc9HBu9s1jtZSfD34cbWG6qUIvlu61Fso2byp8fsOvp+l5hFiRmg==", - "dependencies": { - "promise-nodify": "^1.0.2" - } - }, "node_modules/prebuild-install": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", @@ -21076,14 +20159,6 @@ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -21104,11 +20179,6 @@ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, - "node_modules/promise-nodify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise-nodify/-/promise-nodify-1.0.2.tgz", - "integrity": "sha512-j9RWp/40Ttja+wxiEjS5Ud5liHQxAA5K+STc9Vh09mF4zpNEuXTR35U6Uk5qVCsf6qp2v5UnLWa7SNmZ6M1ewQ==" - }, "node_modules/promise-retry": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", @@ -21254,6 +20324,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -21487,32 +20558,6 @@ "node": ">=8.10.0" } }, - "node_modules/recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==", - "dependencies": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/recast/node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -21950,11 +20995,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -22507,11 +21547,6 @@ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "deprecated": "See https://github.com/lydell/source-map-url#deprecated" }, - "node_modules/spark-md5": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", - "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==" - }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -22604,16 +21639,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "node_modules/sqlite3": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", - "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", - "hasInstallScript": true, - "dependencies": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.11.0" - } - }, "node_modules/sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -22795,6 +21820,7 @@ "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", @@ -22808,6 +21834,7 @@ "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" } @@ -22815,12 +21842,14 @@ "node_modules/string-width/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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string-width/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" } @@ -22829,6 +21858,7 @@ "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" }, @@ -23099,6 +22129,7 @@ "version": "4.4.19", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, "dependencies": { "chownr": "^1.1.4", "fs-minipass": "^1.2.7", @@ -23319,11 +22350,6 @@ "xtend": "~4.0.1" } }, - "node_modules/tiny-queue": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", - "integrity": "sha512-EijGsv7kzd9I9g0ByCl6h42BWNGUZrlCSejfrb3AKeHC33SGbASu1VDf5O3rRiiUOhAC9CHdZxFPbZu0HmR70A==" - }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -23419,26 +22445,6 @@ "punycode": "^2.1.0" } }, - "node_modules/transform-pouch": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/transform-pouch/-/transform-pouch-1.1.5.tgz", - "integrity": "sha512-X8hcWl3GnvSG3QMSBwsvVRCg9yRP3rSQd0wvZx2ZCGtZSrPxxe/l2wsjvETppD48rgA83XycxfPQ2fyOYRMU2w==", - "dependencies": { - "argsarray": "0.0.1", - "es3ify": "0.2.2", - "immediate": "~3.0.5", - "inherits": "2.0.1", - "lie": "3.0.4", - "pouchdb-extend": "0.1.2", - "pouchdb-promise": "5.4.3", - "pouchdb-wrappers": "4.1.0" - } - }, - "node_modules/transform-pouch/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" - }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -23718,80 +22724,6 @@ "node": ">= 4.0.0" } }, - "node_modules/unreachable-branch-transform": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz", - "integrity": "sha512-vza0JqnYAxuiynTpibnaaJsQ/FOKo7oJSXnWT96gIGsvQOfv0QHil8dRcRqONFnYK3YXaqVdbGz36bgCAm0qVg==", - "dependencies": { - "esmangle-evaluator": "^1.0.0", - "recast": "^0.10.1", - "through2": "^0.6.2" - } - }, - "node_modules/unreachable-branch-transform/node_modules/ast-types": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz", - "integrity": "sha512-8WsusRFHT6D2CpPTCLLLeIp4dN4pMEgmVX/jaSBsbMFObktStNdGOE1ZW4x8V/RABr1VtqruQgpabZyvzrrrww==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unreachable-branch-transform/node_modules/esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha512-m7OsYzocA8OQ3+9CxmhIv7NPHtyDR2ixaLCO7kLZ+YH+xQ/BpaZmll9EXmc+kBxzWA8BRBXbNEuEQqQ6vfsgDw==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/unreachable-branch-transform/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/unreachable-branch-transform/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/unreachable-branch-transform/node_modules/recast": { - "version": "0.10.43", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz", - "integrity": "sha512-GC1g4P336t8WOpzVGFOo83m14xQfHbVqe+eDus+4oubobkWb/kONwMWSG6+K3BUtBOoUdUU+GT9kmNCSOBv9+g==", - "dependencies": { - "ast-types": "0.8.15", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unreachable-branch-transform/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/unreachable-branch-transform/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, "node_modules/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -23999,11 +22931,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, - "node_modules/vuvuzela": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", - "integrity": "sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==" - }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -24049,23 +22976,6 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, - "node_modules/websql": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/websql/-/websql-1.0.0.tgz", - "integrity": "sha512-7iZ+u28Ljw5hCnMiq0BCOeSYf0vCFQe/ORY0HgscTiKjQed8WqugpBUggJ2NTnB9fahn1kEnPRX2jf8Px5PhJw==", - "dependencies": { - "argsarray": "^0.0.1", - "immediate": "^3.2.2", - "noop-fn": "^1.0.0", - "sqlite3": "^4.0.0", - "tiny-queue": "^0.2.1" - } - }, - "node_modules/websql/node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -24196,6 +23106,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -24467,7 +23378,8 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -24706,11 +23618,11 @@ }, "packages/mdctl-api": { "name": "@medable/mdctl-api", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "axios": "^0.21.1", "axios-cookiejar-support": "^0.5.0", "clone": "^2.1.2", @@ -24743,7 +23655,7 @@ }, "packages/mdctl-api-driver": { "name": "@medable/mdctl-api-driver", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { "@medable/mdctl-api": "^1.0.73-alpha.0", @@ -24855,7 +23767,7 @@ }, "packages/mdctl-api-ws": { "name": "@medable/mdctl-api-ws", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { "@medable/mdctl-core": "^1.0.73-alpha.0", @@ -24944,13 +23856,13 @@ }, "packages/mdctl-axon-tools": { "name": "@medable/mdctl-axon-tools", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-api": "^1.0.74-alpha.0", - "@medable/mdctl-api-driver": "^1.0.74-alpha.0", - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-api": "1.0.75-alpha.0", + "@medable/mdctl-api-driver": "1.0.75-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "async-iter-stream": "^1.2.0", "globby": "^9.1.0", "inflection": "^1.12.0", @@ -26570,22 +25482,22 @@ }, "packages/mdctl-cli": { "name": "@medable/mdctl-cli", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-api": "^1.0.74-alpha.0", - "@medable/mdctl-axon-tools": "^1.0.74-alpha.0", - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-keychain": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-pouchdb": "^1.0.74-alpha.0", - "@medable/mdctl-docs": "^1.0.74-alpha.0", - "@medable/mdctl-export-adapter-console": "^1.0.74-alpha.0", - "@medable/mdctl-export-adapter-tree": "^1.0.74-alpha.0", - "@medable/mdctl-import-adapter": "^1.0.74-alpha.0", - "@medable/mdctl-manifest": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", - "@medable/mdctl-sandbox": "^1.0.74-alpha.0", + "@medable/mdctl-api": "1.0.75-alpha.0", + "@medable/mdctl-axon-tools": "1.0.75-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-keychain": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-pouchdb": "^1.0.75-alpha.0", + "@medable/mdctl-docs": "1.0.75-alpha.0", + "@medable/mdctl-export-adapter-console": "1.0.75-alpha.0", + "@medable/mdctl-export-adapter-tree": "1.0.75-alpha.0", + "@medable/mdctl-import-adapter": "1.0.75-alpha.0", + "@medable/mdctl-manifest": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", + "@medable/mdctl-sandbox": "1.0.75-alpha.0", "async": "^2.6.3", "cli-table": "^0.3.1", "clone": "^2.1.2", @@ -26627,11 +25539,11 @@ }, "packages/mdctl-core": { "name": "@medable/mdctl-core", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-secrets": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-secrets": "1.0.75-alpha.0", "clone": "^2.1.2", "create-hmac": "^1.1.7", "jsonpath": "^1.1.1", @@ -26665,11 +25577,11 @@ }, "packages/mdctl-core-schemas": { "name": "@medable/mdctl-core-schemas", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "lodash": "^4.17.21", "lodash.isplainobject": "^4.0.6" }, @@ -26693,7 +25605,7 @@ }, "packages/mdctl-core-utils": { "name": "@medable/mdctl-core-utils", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { "create-hmac": "^1.1.7", @@ -26724,11 +25636,11 @@ }, "packages/mdctl-credentials-provider-keychain": { "name": "@medable/mdctl-credentials-provider-keychain", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "keytar": "^7.9.0" }, "devDependencies": { @@ -26751,21 +25663,18 @@ }, "packages/mdctl-credentials-provider-pouchdb": { "name": "@medable/mdctl-credentials-provider-pouchdb", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", + "deprecated": "Renamed package incoming: this will become @medable/mdctl-credentials-provider-file. The current package continues to work as a drop-in replacement; PouchDB is no longer used.", "license": "MIT", "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "async": "^2.6.3", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "browserify-aes": "^1.2.0", "create-hash": "^1.2.0", - "pouchdb-adapter-node-websql": "^7.0.0", - "pouchdb-core": "^7.1.1", - "pouchdb-find": "^7.1.1", - "randombytes": "^2.1.0", - "transform-pouch": "^1.1.4" + "randombytes": "^2.1.0" }, "devDependencies": { + "better-sqlite3": "^12.0.0", "chai": "^4.1.2", "eslint": "^5.16.0", "eslint-config-airbnb": "^17.1.1", @@ -26779,13 +25688,16 @@ "sinon": "^7.4.2" }, "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">=18", + "npm": ">=8" + }, + "optionalDependencies": { + "better-sqlite3": "^12.0.0" } }, "packages/mdctl-docs": { "name": "@medable/mdctl-docs", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { "handlebars": "^4.7.7", @@ -26811,10 +25723,10 @@ }, "packages/mdctl-export-adapter-console": { "name": "@medable/mdctl-export-adapter-console", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0" + "@medable/mdctl-core-utils": "1.0.75-alpha.0" }, "devDependencies": { "chai": "^4.1.2", @@ -26836,12 +25748,12 @@ }, "packages/mdctl-export-adapter-tree": { "name": "@medable/mdctl-export-adapter-tree", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", "globby": "^10.0.1", "jsonpath": "^1.1.1", "lodash": "^4.17.21", @@ -27008,12 +25920,12 @@ }, "packages/mdctl-import-adapter": { "name": "@medable/mdctl-import-adapter", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", "clone": "^2.1.2", "globby": "^9.1.0", "jsonpath": "^1.1.1", @@ -28636,13 +27548,13 @@ }, "packages/mdctl-manifest": { "name": "@medable/mdctl-manifest", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-schemas": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-schemas": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", "lodash": "^4.17.21", "pluralize": "^8.0.0" }, @@ -28674,12 +27586,12 @@ }, "packages/mdctl-node-utils": { "name": "@medable/mdctl-node-utils", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-keychain": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-pouchdb": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-keychain": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-pouchdb": "^1.0.75-alpha.0", "create-hash": "^1.2.0", "js-yaml": "^3.13.1", "lodash": "^4.17.21" @@ -28704,12 +27616,12 @@ }, "packages/mdctl-sandbox": { "name": "@medable/mdctl-sandbox", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-api": "^1.0.74-alpha.0", - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-api": "1.0.75-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "lodash": "^4.17.21", "request": "^2.88.0" }, @@ -28733,10 +27645,10 @@ }, "packages/mdctl-secrets": { "name": "@medable/mdctl-secrets", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "license": "MIT", "dependencies": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "create-hmac": "^1.1.7", "jsonwebtoken": "^8.4.0" }, @@ -31243,8 +30155,8 @@ "@medable/mdctl-api": { "version": "file:packages/mdctl-api", "requires": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "axios": "^0.21.1", "axios-cookiejar-support": "^0.5.0", "chai": "^4.1.2", @@ -31433,10 +30345,10 @@ "@medable/mdctl-axon-tools": { "version": "file:packages/mdctl-axon-tools", "requires": { - "@medable/mdctl-api": "^1.0.74-alpha.0", - "@medable/mdctl-api-driver": "^1.0.74-alpha.0", - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-api": "1.0.75-alpha.0", + "@medable/mdctl-api-driver": "1.0.75-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "async-iter-stream": "^1.2.0", "chai": "^4.1.2", "eslint": "^5.8.0", @@ -32648,19 +31560,19 @@ "@medable/mdctl-cli": { "version": "file:packages/mdctl-cli", "requires": { - "@medable/mdctl-api": "^1.0.74-alpha.0", - "@medable/mdctl-axon-tools": "^1.0.74-alpha.0", - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-keychain": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-pouchdb": "^1.0.74-alpha.0", - "@medable/mdctl-docs": "^1.0.74-alpha.0", - "@medable/mdctl-export-adapter-console": "^1.0.74-alpha.0", - "@medable/mdctl-export-adapter-tree": "^1.0.74-alpha.0", - "@medable/mdctl-import-adapter": "^1.0.74-alpha.0", - "@medable/mdctl-manifest": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", - "@medable/mdctl-sandbox": "^1.0.74-alpha.0", + "@medable/mdctl-api": "1.0.75-alpha.0", + "@medable/mdctl-axon-tools": "1.0.75-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-keychain": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-pouchdb": "^1.0.75-alpha.0", + "@medable/mdctl-docs": "1.0.75-alpha.0", + "@medable/mdctl-export-adapter-console": "1.0.75-alpha.0", + "@medable/mdctl-export-adapter-tree": "1.0.75-alpha.0", + "@medable/mdctl-import-adapter": "1.0.75-alpha.0", + "@medable/mdctl-manifest": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", + "@medable/mdctl-sandbox": "1.0.75-alpha.0", "async": "^2.6.3", "babel-eslint": "^10.1.0", "chai": "^4.1.2", @@ -32694,8 +31606,8 @@ "@medable/mdctl-core": { "version": "file:packages/mdctl-core", "requires": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-secrets": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-secrets": "1.0.75-alpha.0", "chai": "^4.1.2", "clone": "^2.1.2", "create-hmac": "^1.1.7", @@ -32724,8 +31636,8 @@ "@medable/mdctl-core-schemas": { "version": "file:packages/mdctl-core-schemas", "requires": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "chai": "^4.1.2", "eslint": "^5.16.0", "eslint-config-airbnb": "^17.1.1", @@ -32767,8 +31679,8 @@ "@medable/mdctl-credentials-provider-keychain": { "version": "file:packages/mdctl-credentials-provider-keychain", "requires": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "chai": "^4.1.2", "eslint": "^5.16.0", "eslint-config-airbnb": "^17.1.1", @@ -32786,9 +31698,9 @@ "@medable/mdctl-credentials-provider-pouchdb": { "version": "file:packages/mdctl-credentials-provider-pouchdb", "requires": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "async": "^2.6.3", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "better-sqlite3": "^12.0.0", "browserify-aes": "^1.2.0", "chai": "^4.1.2", "create-hash": "^1.2.0", @@ -32801,12 +31713,8 @@ "eslint-plugin-standard": "^4.0.1", "istanbul": "^1.0.0-alpha", "mocha": "^10.3.0", - "pouchdb-adapter-node-websql": "^7.0.0", - "pouchdb-core": "^7.1.1", - "pouchdb-find": "^7.1.1", "randombytes": "^2.1.0", - "sinon": "^7.4.2", - "transform-pouch": "^1.1.4" + "sinon": "^7.4.2" } }, "@medable/mdctl-docs": { @@ -32830,7 +31738,7 @@ "@medable/mdctl-export-adapter-console": { "version": "file:packages/mdctl-export-adapter-console", "requires": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "chai": "^4.1.2", "eslint": "^5.16.0", "eslint-config-airbnb": "^17.1.1", @@ -32847,9 +31755,9 @@ "@medable/mdctl-export-adapter-tree": { "version": "file:packages/mdctl-export-adapter-tree", "requires": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", "chai": "^4.1.2", "eslint": "^5.8.0", "eslint-config-airbnb": "^17.1.0", @@ -32974,9 +31882,9 @@ "@medable/mdctl-import-adapter": { "version": "file:packages/mdctl-import-adapter", "requires": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", "chai": "^4.1.2", "clone": "^2.1.2", "eslint": "^5.8.0", @@ -34191,10 +33099,10 @@ "@medable/mdctl-manifest": { "version": "file:packages/mdctl-manifest", "requires": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-schemas": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-schemas": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", "chai": "^4.1.2", "eslint": "^5.16.0", "eslint-config-airbnb": "^17.1.1", @@ -34220,9 +33128,9 @@ "@medable/mdctl-node-utils": { "version": "file:packages/mdctl-node-utils", "requires": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-keychain": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-pouchdb": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-keychain": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-pouchdb": "^1.0.75-alpha.0", "chai": "^4.1.2", "create-hash": "^1.2.0", "eslint": "^5.8.0", @@ -34242,9 +33150,9 @@ "@medable/mdctl-sandbox": { "version": "file:packages/mdctl-sandbox", "requires": { - "@medable/mdctl-api": "^1.0.74-alpha.0", - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-api": "1.0.75-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "chai": "^4.1.2", "eslint": "^5.16.0", "eslint-config-airbnb": "^17.1.1", @@ -34263,7 +33171,7 @@ "@medable/mdctl-secrets": { "version": "file:packages/mdctl-secrets", "requires": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "chai": "^4.1.2", "create-hmac": "^1.1.7", "eslint": "^5.16.0", @@ -34921,7 +33829,8 @@ "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true }, "abort-controller": { "version": "3.0.0", @@ -35007,11 +33916,6 @@ "uri-js": "^4.2.2" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" - }, "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", @@ -35058,12 +33962,14 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, "are-we-there-yet": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -35077,11 +33983,6 @@ "sprintf-js": "~1.0.2" } }, - "argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg==" - }, "aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -35261,11 +34162,6 @@ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==" - }, "ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", @@ -35770,11 +34666,6 @@ } } }, - "base62": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz", - "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==" - }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -35794,12 +34685,31 @@ "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", "dev": true }, + "better-sqlite3": { + "version": "12.9.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.9.0.tgz", + "integrity": "sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==", + "dev": true, + "requires": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + } + }, "binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -35932,7 +34842,8 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "buffer-xor": { "version": "1.0.3", @@ -36243,11 +35154,6 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==" - }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -36376,41 +35282,6 @@ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true }, - "commoner": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "integrity": "sha512-3/qHkNMM6o/KGXHITA14y78PcfmXh4+AOCJpSoF73h4VY1JpdGv3CHMS5+JW6SwLhfJt4RhNmLAa7+RRX/62EQ==", - "requires": { - "commander": "^2.5.0", - "detective": "^4.3.1", - "glob": "^5.0.15", - "graceful-fs": "^4.1.2", - "iconv-lite": "^0.4.5", - "mkdirp": "^0.5.0", - "private": "^0.1.6", - "q": "^1.1.2", - "recast": "^0.11.17" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -36484,7 +35355,8 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true }, "conventional-changelog-angular": { "version": "5.0.13", @@ -37239,11 +36111,6 @@ } } }, - "defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -37252,7 +36119,8 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "deprecation": { "version": "2.3.1", @@ -37287,22 +36155,6 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, - "detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "requires": { - "acorn": "^5.2.1", - "defined": "^1.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" - } - } - }, "dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", @@ -37608,23 +36460,6 @@ "is-symbol": "^1.0.2" } }, - "es3ify": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.2.2.tgz", - "integrity": "sha512-QQ6yXmQM/cfWYj9/DM3hPRcHBZdWCoJU+35CoaMqw53sH2uqr29EZ0ne1PF/3LIG/cmawn1SbCPqcZE+siHmwg==", - "requires": { - "esprima": "^2.7.1", - "jstransform": "~11.0.0", - "through": "~2.3.4" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==" - } - } - }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -38007,11 +36842,6 @@ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, - "esmangle-evaluator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz", - "integrity": "sha512-wG16Qv6u5Let+nMeQ+HDwlZYa2fAUD0uiWOy6719n2sMGHnCs+vzxwsLHOIUR3qU6Fxpex+WLNpnZukYJuZi5A==" - }, "espree": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", @@ -38028,11 +36858,6 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "esprima-fb": { - "version": "15001.1.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", - "integrity": "sha512-59dDGQo2b3M/JfKIws0/z8dcXH2mnVHkfSPRhCYS91JNGfGNwr7GsSF6qzWZuOGvw5Ii0w9TtylrX07MGmlOoQ==" - }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -38291,29 +37116,6 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" }, - "falafel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz", - "integrity": "sha512-oKyHugGk3tYQcZmj3+J+0PlcU59JYOZL60Lr3dYwsLDDYYR/+GYvAhW5WO3NTfh2FJOcGRoXJxxtGpda1qE5Sg==", - "requires": { - "acorn": "^1.0.3", - "foreach": "^2.0.5", - "isarray": "0.0.1", - "object-keys": "^1.0.6" - }, - "dependencies": { - "acorn": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", - "integrity": "sha512-FsqWmApWGMGLKKNpHt12PMc5AK7BaZee0WRh04fCysmTzHe+rrKOa2MKjORhnzfpe4r0JnfdqHn02iDA9Dqj2A==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - } - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -38380,14 +37182,6 @@ "bser": "2.1.1" } }, - "fetch-cookie": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", - "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", - "requires": { - "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" - } - }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -38411,6 +37205,12 @@ "flat-cache": "^2.0.1" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -38520,11 +37320,6 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, - "foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -38583,6 +37378,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, "requires": { "minipass": "^2.6.0" } @@ -38659,6 +37455,7 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -38673,12 +37470,14 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -38687,6 +37486,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -38697,6 +37497,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -39440,7 +38241,8 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true }, "has-value": { "version": "1.0.0", @@ -39636,15 +38438,11 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, "requires": { "minimatch": "^3.0.4" } }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -39777,47 +38575,6 @@ "validate-npm-package-name": "^3.0.0" } }, - "inline-process-browser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz", - "integrity": "sha512-DyFIA2uFCdhB57k1blue0nbd/syuws7NIlE0UkWSWbiM++mbo8W6Zl0QZ/7DwveucRC7YUi87OgJvJyERnwCbg==", - "requires": { - "falafel": "^1.0.1", - "through2": "^0.6.5" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, "inquirer": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", @@ -44790,33 +43547,6 @@ "verror": "1.10.0" } }, - "jstransform": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", - "integrity": "sha512-LGm87w0A8E92RrcXt94PnNHkFqHmgDy3mKHvNZOG7QepKCTCH/VB6S+IEN+bT4uLN3gVpOT0vvOOVd96osG71g==", - "requires": { - "base62": "^1.1.0", - "commoner": "^0.10.1", - "esprima-fb": "^15001.1.0-dev-harmony-fb", - "object-assign": "^2.0.0", - "source-map": "^0.4.2" - }, - "dependencies": { - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g==" - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -45152,17 +43882,6 @@ "type-check": "~0.3.2" } }, - "lie": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.0.4.tgz", - "integrity": "sha512-i21Zz/APyOIeouLMMCvXPKxibClh0AmLLqnmPg51GAeDJgmkwKkyATdVEVejDsXi8n+vJLlu1GyE5V/pZi3uUA==", - "requires": { - "es3ify": "^0.2.2", - "immediate": "~3.0.5", - "inline-process-browser": "^1.0.0", - "unreachable-branch-transform": "^0.3.0" - } - }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -45853,6 +44572,7 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -45862,6 +44582,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, "requires": { "minipass": "^2.9.0" } @@ -45907,6 +44628,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -46483,11 +45205,6 @@ "thenify-all": "^1.0.0" } }, - "nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" - }, "nanoid": { "version": "3.1.32", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", @@ -46543,26 +45260,6 @@ } } }, - "needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -46727,50 +45424,12 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - }, - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } - } - }, "node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, - "noop-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz", - "integrity": "sha512-pQ8vODlgXt2e7A3mIbFDlizkr46r75V+BJxVAyat8Jl7YmI513gG5cfyRL0FedKraoZ+VAouI1h4/IWpus5pcQ==" - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -46808,6 +45467,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, "requires": { "npm-normalize-package-bin": "^1.0.1" } @@ -46831,7 +45491,8 @@ "npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true }, "npm-package-arg": { "version": "6.1.1", @@ -46849,6 +45510,7 @@ "version": "1.4.8", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1", @@ -46878,6 +45540,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -46904,7 +45567,8 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, "object-copy": { "version": "0.1.0", @@ -46953,7 +45617,8 @@ "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object-visit": { "version": "1.0.1", @@ -47094,7 +45759,8 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true }, "os-locale": { "version": "3.1.0", @@ -47125,6 +45791,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -47435,614 +46102,6 @@ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, - "pouchdb-abstract-mapreduce": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz", - "integrity": "sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w==", - "requires": { - "pouchdb-binary-utils": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-mapreduce-utils": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-utils": "7.3.1" - }, - "dependencies": { - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "requires": { - "buffer-from": "1.1.2" - } - }, - "pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "requires": { - "inherits": "2.0.4" - } - }, - "pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "requires": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "pouchdb-adapter-node-websql": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-node-websql/-/pouchdb-adapter-node-websql-7.0.0.tgz", - "integrity": "sha512-fNaOMO8bvMrRTSfmH4RSLSpgnKahRcCA7Z0jg732PwRbGvvMdGbreZwvKPPD1fg2tm2ZwwiXWK2G3+oXyoqZYw==", - "requires": { - "pouchdb-adapter-websql-core": "7.0.0", - "pouchdb-utils": "7.0.0", - "websql": "1.0.0" - } - }, - "pouchdb-adapter-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.0.0.tgz", - "integrity": "sha512-UWKPC6jkz6mHUzZefrU7P5X8ZGvBC8LSNZ7BIp0hWvJE6c20cnpDwedTVDpZORcCbVJpDmFOHBYnOqEIblPtbA==", - "requires": { - "pouchdb-binary-utils": "7.0.0", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-md5": "7.0.0", - "pouchdb-merge": "7.0.0", - "pouchdb-utils": "7.0.0" - } - }, - "pouchdb-adapter-websql-core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-7.0.0.tgz", - "integrity": "sha512-NyMaH0bl20SdJdOCzd+fwXo8JZ15a48/MAwMcIbXzsRHE4DjFNlRcWAcjUP6uN4Ezc+Gx+r2tkBBMf71mIz1Aw==", - "requires": { - "pouchdb-adapter-utils": "7.0.0", - "pouchdb-binary-utils": "7.0.0", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-json": "7.0.0", - "pouchdb-merge": "7.0.0", - "pouchdb-utils": "7.0.0" - } - }, - "pouchdb-binary-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz", - "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==", - "requires": { - "buffer-from": "1.1.0" - }, - "dependencies": { - "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" - } - } - }, - "pouchdb-changes-filter": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-changes-filter/-/pouchdb-changes-filter-7.3.1.tgz", - "integrity": "sha512-C31zsslhlxyFdlKPdZ0013Z4GIsWjoSTgptfamrPnXEtOS6EX4jLtcmiGURCIXmZlcDGKRm8qWHL3vikwITalA==", - "requires": { - "pouchdb-errors": "7.3.1", - "pouchdb-selector-core": "7.3.1", - "pouchdb-utils": "7.3.1" - }, - "dependencies": { - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "requires": { - "buffer-from": "1.1.2" - } - }, - "pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "requires": { - "inherits": "2.0.4" - } - }, - "pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "requires": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "pouchdb-collate": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.3.1.tgz", - "integrity": "sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ==" - }, - "pouchdb-collections": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz", - "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==" - }, - "pouchdb-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-core/-/pouchdb-core-7.3.1.tgz", - "integrity": "sha512-9jRZ70+4wrDohJQQ2OA8T9zzanefWf03ugGis5NJL24cpar8LjvQnceRo8X4KCQfVJr9su9LFe4L6YBqneE1VA==", - "requires": { - "argsarray": "0.0.1", - "inherits": "2.0.4", - "pouchdb-changes-filter": "7.3.1", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-merge": "7.3.1", - "pouchdb-utils": "7.3.1" - }, - "dependencies": { - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "requires": { - "buffer-from": "1.1.2" - } - }, - "pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "requires": { - "inherits": "2.0.4" - } - }, - "pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "requires": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "pouchdb-merge": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.3.1.tgz", - "integrity": "sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw==" - }, - "pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "pouchdb-errors": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz", - "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - } - } - }, - "pouchdb-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pouchdb-extend/-/pouchdb-extend-0.1.2.tgz", - "integrity": "sha512-aGWbcFJNQLAdv30hExdFE8fhjsoOsyxv5s1TBNPSc6noTu4MX9n0s3h+YhWyJaE75SOTFbpmimuvXx9qONjI8w==" - }, - "pouchdb-fetch": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.3.1.tgz", - "integrity": "sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag==", - "requires": { - "abort-controller": "3.0.0", - "fetch-cookie": "0.11.0", - "node-fetch": "2.6.7" - } - }, - "pouchdb-find": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-7.3.1.tgz", - "integrity": "sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA==", - "requires": { - "pouchdb-abstract-mapreduce": "7.3.1", - "pouchdb-collate": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-fetch": "7.3.1", - "pouchdb-md5": "7.3.1", - "pouchdb-selector-core": "7.3.1", - "pouchdb-utils": "7.3.1" - }, - "dependencies": { - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "requires": { - "buffer-from": "1.1.2" - } - }, - "pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "requires": { - "inherits": "2.0.4" - } - }, - "pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "requires": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "pouchdb-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.0.0.tgz", - "integrity": "sha512-w0bNRu/7VmmCrFWMYAm62n30wvJJUT2SokyzeTyj3hRohj4GFwTRg1mSZ+iAmxgRKOFE8nzZstLG/WAB4Ymjew==", - "requires": { - "vuvuzela": "1.0.3" - } - }, - "pouchdb-mapreduce-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.1.tgz", - "integrity": "sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg==", - "requires": { - "argsarray": "0.0.1", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-utils": "7.3.1" - }, - "dependencies": { - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "requires": { - "buffer-from": "1.1.2" - } - }, - "pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "requires": { - "inherits": "2.0.4" - } - }, - "pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "requires": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "pouchdb-md5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz", - "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==", - "requires": { - "pouchdb-binary-utils": "7.0.0", - "spark-md5": "3.0.0" - } - }, - "pouchdb-merge": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.0.0.tgz", - "integrity": "sha512-tci5u6NpznQhGcPv4ho1h0miky9rs+ds/T9zQ9meQeDZbUojXNaX1Jxsb0uYEQQ+HMqdcQs3Akdl0/u0mgwPGg==" - }, - "pouchdb-promise": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-5.4.3.tgz", - "integrity": "sha512-7WNPDutzlYiu/mF430nrK6K/eIewwEofxcU2P9h058dYXUP3zRo0Qp0UjuYP4wYt2r0DtyFtLFciZvxnXQZdXA==", - "requires": { - "lie": "3.0.4" - } - }, - "pouchdb-selector-core": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.3.1.tgz", - "integrity": "sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w==", - "requires": { - "pouchdb-collate": "7.3.1", - "pouchdb-utils": "7.3.1" - }, - "dependencies": { - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "pouchdb-binary-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz", - "integrity": "sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==", - "requires": { - "buffer-from": "1.1.2" - } - }, - "pouchdb-collections": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz", - "integrity": "sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==" - }, - "pouchdb-errors": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz", - "integrity": "sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==", - "requires": { - "inherits": "2.0.4" - } - }, - "pouchdb-md5": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz", - "integrity": "sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==", - "requires": { - "pouchdb-binary-utils": "7.3.1", - "spark-md5": "3.0.2" - } - }, - "pouchdb-utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz", - "integrity": "sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==", - "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.1", - "pouchdb-errors": "7.3.1", - "pouchdb-md5": "7.3.1", - "uuid": "8.3.2" - } - }, - "spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "pouchdb-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz", - "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==", - "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.0.6", - "inherits": "2.0.3", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-md5": "7.0.0", - "uuid": "3.2.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" - } - } - }, - "pouchdb-wrappers": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pouchdb-wrappers/-/pouchdb-wrappers-4.1.0.tgz", - "integrity": "sha512-L94K7zgb2tFSvU/iAj1EHK8fC13vKWzzy8kc9HBu9s1jtZSfD34cbWG6qUIvlu61Fso2byp8fsOvp+l5hFiRmg==", - "requires": { - "promise-nodify": "^1.0.2" - } - }, "prebuild-install": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", @@ -48211,11 +46270,6 @@ "resolved": "https://registry.npmjs.org/primus-emitter/-/primus-emitter-3.1.1.tgz", "integrity": "sha512-SWDfSkz+JXKssNCMMwMHK+/2UBdqFmOecXJRlGVtKA3A41rg65g4axdNmI/mbUsXMojazbdB98H38ssSIVwavw==" }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -48233,11 +46287,6 @@ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, - "promise-nodify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise-nodify/-/promise-nodify-1.0.2.tgz", - "integrity": "sha512-j9RWp/40Ttja+wxiEjS5Ud5liHQxAA5K+STc9Vh09mF4zpNEuXTR35U6Uk5qVCsf6qp2v5UnLWa7SNmZ6M1ewQ==" - }, "promise-retry": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", @@ -48364,7 +46413,8 @@ "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true }, "qs": { "version": "6.5.2", @@ -48549,24 +46599,6 @@ "picomatch": "^2.2.1" } }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==", - "requires": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==" - } - } - }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -48892,11 +46924,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -49333,11 +47360,6 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, - "spark-md5": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", - "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==" - }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -49420,15 +47442,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "sqlite3": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", - "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.11.0" - } - }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -49587,6 +47600,7 @@ "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, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -49596,22 +47610,26 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "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==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "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, "requires": { "ansi-regex": "^5.0.1" } @@ -49816,6 +47834,7 @@ "version": "4.4.19", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, "requires": { "chownr": "^1.1.4", "fs-minipass": "^1.2.7", @@ -49997,11 +48016,6 @@ "xtend": "~4.0.1" } }, - "tiny-queue": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", - "integrity": "sha512-EijGsv7kzd9I9g0ByCl6h42BWNGUZrlCSejfrb3AKeHC33SGbASu1VDf5O3rRiiUOhAC9CHdZxFPbZu0HmR70A==" - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -50078,28 +48092,6 @@ "punycode": "^2.1.0" } }, - "transform-pouch": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/transform-pouch/-/transform-pouch-1.1.5.tgz", - "integrity": "sha512-X8hcWl3GnvSG3QMSBwsvVRCg9yRP3rSQd0wvZx2ZCGtZSrPxxe/l2wsjvETppD48rgA83XycxfPQ2fyOYRMU2w==", - "requires": { - "argsarray": "0.0.1", - "es3ify": "0.2.2", - "immediate": "~3.0.5", - "inherits": "2.0.1", - "lie": "3.0.4", - "pouchdb-extend": "0.1.2", - "pouchdb-promise": "5.4.3", - "pouchdb-wrappers": "4.1.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" - } - } - }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -50322,69 +48314,6 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, - "unreachable-branch-transform": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz", - "integrity": "sha512-vza0JqnYAxuiynTpibnaaJsQ/FOKo7oJSXnWT96gIGsvQOfv0QHil8dRcRqONFnYK3YXaqVdbGz36bgCAm0qVg==", - "requires": { - "esmangle-evaluator": "^1.0.0", - "recast": "^0.10.1", - "through2": "^0.6.2" - }, - "dependencies": { - "ast-types": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz", - "integrity": "sha512-8WsusRFHT6D2CpPTCLLLeIp4dN4pMEgmVX/jaSBsbMFObktStNdGOE1ZW4x8V/RABr1VtqruQgpabZyvzrrrww==" - }, - "esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha512-m7OsYzocA8OQ3+9CxmhIv7NPHtyDR2ixaLCO7kLZ+YH+xQ/BpaZmll9EXmc+kBxzWA8BRBXbNEuEQqQ6vfsgDw==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "recast": { - "version": "0.10.43", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz", - "integrity": "sha512-GC1g4P336t8WOpzVGFOo83m14xQfHbVqe+eDus+4oubobkWb/kONwMWSG6+K3BUtBOoUdUU+GT9kmNCSOBv9+g==", - "requires": { - "ast-types": "0.8.15", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "private": "~0.1.5", - "source-map": "~0.5.0" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -50542,11 +48471,6 @@ } } }, - "vuvuzela": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", - "integrity": "sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==" - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -50588,25 +48512,6 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, - "websql": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/websql/-/websql-1.0.0.tgz", - "integrity": "sha512-7iZ+u28Ljw5hCnMiq0BCOeSYf0vCFQe/ORY0HgscTiKjQed8WqugpBUggJ2NTnB9fahn1kEnPRX2jf8Px5PhJw==", - "requires": { - "argsarray": "^0.0.1", - "immediate": "^3.2.2", - "noop-fn": "^1.0.0", - "sqlite3": "^4.0.0", - "tiny-queue": "^0.2.1" - }, - "dependencies": { - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - } - } - }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -50718,6 +48623,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -50924,7 +48830,8 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "yaml": { "version": "1.10.2", diff --git a/packages/mdctl-api-driver/package.json b/packages/mdctl-api-driver/package.json index 52e8ef1e..08b6b27a 100644 --- a/packages/mdctl-api-driver/package.json +++ b/packages/mdctl-api-driver/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-api-driver", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Api DB Driver", "repository": { "type": "git", diff --git a/packages/mdctl-api-ws/package.json b/packages/mdctl-api-ws/package.json index c420d852..8071ccd4 100644 --- a/packages/mdctl-api-ws/package.json +++ b/packages/mdctl-api-ws/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-api-ws", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Websocket Client", "repository": { "type": "git", diff --git a/packages/mdctl-api/package.json b/packages/mdctl-api/package.json index 5d9674b5..66e4eab4 100644 --- a/packages/mdctl-api/package.json +++ b/packages/mdctl-api/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-api", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: API", "repository": { "type": "git", @@ -25,8 +25,8 @@ "author": "Medable, Inc. ", "license": "MIT", "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "axios": "^0.21.1", "axios-cookiejar-support": "^0.5.0", "clone": "^2.1.2", diff --git a/packages/mdctl-axon-tools/package.json b/packages/mdctl-axon-tools/package.json index daba1652..9bb531be 100644 --- a/packages/mdctl-axon-tools/package.json +++ b/packages/mdctl-axon-tools/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-axon-tools", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Axon Tools :: Tools For interaction with Axon orgs", "repository": { "type": "git", @@ -24,10 +24,10 @@ "lint": "eslint *.js" }, "dependencies": { - "@medable/mdctl-api": "^1.0.74-alpha.0", - "@medable/mdctl-api-driver": "^1.0.74-alpha.0", - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-api": "1.0.75-alpha.0", + "@medable/mdctl-api-driver": "1.0.75-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "async-iter-stream": "^1.2.0", "globby": "^9.1.0", "inflection": "^1.12.0", diff --git a/packages/mdctl-cli/package.json b/packages/mdctl-cli/package.json index 38903df1..780842e0 100644 --- a/packages/mdctl-cli/package.json +++ b/packages/mdctl-cli/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-cli", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Tools :: Cli tool", "repository": { "type": "git", @@ -28,19 +28,19 @@ "lint": "eslint . --ext .js" }, "dependencies": { - "@medable/mdctl-api": "^1.0.74-alpha.0", - "@medable/mdctl-axon-tools": "^1.0.74-alpha.0", - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-keychain": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-pouchdb": "^1.0.74-alpha.0", - "@medable/mdctl-docs": "^1.0.74-alpha.0", - "@medable/mdctl-export-adapter-console": "^1.0.74-alpha.0", - "@medable/mdctl-export-adapter-tree": "^1.0.74-alpha.0", - "@medable/mdctl-import-adapter": "^1.0.74-alpha.0", - "@medable/mdctl-manifest": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", - "@medable/mdctl-sandbox": "^1.0.74-alpha.0", + "@medable/mdctl-api": "1.0.75-alpha.0", + "@medable/mdctl-axon-tools": "1.0.75-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-keychain": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-pouchdb": "^1.0.75-alpha.0", + "@medable/mdctl-docs": "1.0.75-alpha.0", + "@medable/mdctl-export-adapter-console": "1.0.75-alpha.0", + "@medable/mdctl-export-adapter-tree": "1.0.75-alpha.0", + "@medable/mdctl-import-adapter": "1.0.75-alpha.0", + "@medable/mdctl-manifest": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", + "@medable/mdctl-sandbox": "1.0.75-alpha.0", "async": "^2.6.3", "cli-table": "^0.3.1", "clone": "^2.1.2", diff --git a/packages/mdctl-core-schemas/package.json b/packages/mdctl-core-schemas/package.json index 92078546..c10823eb 100644 --- a/packages/mdctl-core-schemas/package.json +++ b/packages/mdctl-core-schemas/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-core-schemas", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Schemas", "repository": { "type": "git", @@ -25,8 +25,8 @@ "lint": "eslint *.js" }, "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "lodash": "^4.17.21", "lodash.isplainobject": "^4.0.6" }, diff --git a/packages/mdctl-core-utils/package.json b/packages/mdctl-core-utils/package.json index 6c737767..ef4bc209 100644 --- a/packages/mdctl-core-utils/package.json +++ b/packages/mdctl-core-utils/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-core-utils", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Utils", "repository": { "type": "git", diff --git a/packages/mdctl-core/package.json b/packages/mdctl-core/package.json index 2086a6ee..9f4ec5f2 100644 --- a/packages/mdctl-core/package.json +++ b/packages/mdctl-core/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-core", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Core", "repository": { "type": "git", @@ -25,8 +25,8 @@ "lint": "eslint *.js test" }, "dependencies": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-secrets": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-secrets": "1.0.75-alpha.0", "clone": "^2.1.2", "create-hmac": "^1.1.7", "jsonpath": "^1.1.1", diff --git a/packages/mdctl-credentials-provider-keychain/package.json b/packages/mdctl-credentials-provider-keychain/package.json index 8f1eaea5..fec4e18a 100644 --- a/packages/mdctl-credentials-provider-keychain/package.json +++ b/packages/mdctl-credentials-provider-keychain/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-credentials-provider-keychain", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Keychain Creds Provider", "repository": { "type": "git", @@ -25,8 +25,8 @@ "lint": "eslint *.js" }, "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "keytar": "^7.9.0" }, "devDependencies": { diff --git a/packages/mdctl-credentials-provider-pouchdb/README.md b/packages/mdctl-credentials-provider-pouchdb/README.md index 14edddce..01d74bc6 100644 --- a/packages/mdctl-credentials-provider-pouchdb/README.md +++ b/packages/mdctl-credentials-provider-pouchdb/README.md @@ -1,31 +1,138 @@ # mdctl-credentials-provider-pouchdb -Developer Tools Credential Provider using PouchDB for Medable - -This module will let you store your credentials into PouchDB storage. +> **Deprecated package name.** This package no longer uses PouchDB. It will +> be renamed to `@medable/mdctl-credentials-provider-file` in a future +> release. The exported class name and constructor signature remain +> unchanged so consumers continue to work as a drop-in upgrade. + +A small encrypted-at-rest credentials provider for the Medable Developer +Tools, backed by a single JSON file on disk. + +Credentials are encrypted with AES-256-CBC using a key supplied by the +caller (typically stored in the OS keychain by `mdctl`). The store itself +never sees plaintext secrets. ## Usage -``` +```js const PouchDbCredentialsProvider = require('@medable/mdctl-credentials-provider-pouchdb'), provider = new PouchDbCredentialsProvider({ name: path.join(os.homedir(), '.medable/mdctl.db'), - key: 'whatEv3rY0uW4nt@here' + key: 'whatEv3rY0uW4nt@here' // 32 bytes }) - -// clear credentials. -await provider.clear() -// add a new credential await provider.add('env', { - apiKey: 'abcdefghijklmnopqrstuv', - username: 'test@medable.com', - password: 'password' - }) - -// get the list of credentials that matches with these filters. -await provider.list('env', { - type: 'password', - username: 'test@medable.com' - }) + apiKey: 'abcdefghijklmnopqrstuv', + username: 'test@medable.com', + password: 'password' +}) + +await provider.list('env', { type: 'password' }) +``` + +The constructor signature, exported class name, and the `CredentialsProvider` +API surface are identical to the previous PouchDB-backed implementation. + +## What changed + +The previous implementation used PouchDB with the +`pouchdb-adapter-node-websql` adapter, which transitively pulled in +`sqlite3@4.2.0`. That dependency is unmaintained and no longer compiles +against modern V8 headers, breaking installs on Node 22 and 24. See +the discussion in +[Medable/mdctl#xxx](https://github.com/Medable/mdctl/issues) for the +incident. + +The new implementation: + +- Stores credentials in a single JSON file at `.json` (e.g. + `~/.medable/mdctl.db.json`). +- Has no native dependencies for normal operation. `better-sqlite3` is + declared as an `optionalDependency` and is used **only** to read the + legacy SQLite store during one-shot migration. +- Performs atomic writes (write-temp + `fsync` + `rename`). +- Uses an `mkdir`-based exclusive lock around mutations and migration to + prevent concurrent processes from corrupting the store. +- Verifies the encryption key on every `load` (via a stored `keyCheck` + hash, identical to the previous implementation). + +## Migration from the legacy PouchDB store + +When the provider initialises and finds a legacy SQLite database at +`` but no `.json`, it migrates automatically with the +following safety properties: + +1. The legacy file is opened in **read-only** mode via `better-sqlite3`. +2. The supplied encryption key is verified against the stored `keyCheck` + doc **before any other work**. A wrong key aborts the migration; the + legacy file is left untouched. +3. Every credential is **decrypted as an integrity check** during + migration. If any credential fails to decrypt the migration aborts + and the legacy file is left untouched. +4. Tombstoned (`deleted=1`), `_design/...`, `_local/...` and `config` + documents are skipped. Only winning revisions of `type: 'service'` + documents are migrated. +5. The new JSON file is written atomically and re-read to verify it + parses and matches the expected `keyCheck` and credential count. + **Only after this verification succeeds** is the legacy file touched. +6. The legacy file is **renamed** to `.legacy-`, + not deleted. PouchDB's `mrview` index sidecars are renamed alongside + it. A `.legacy-.README.txt` is written next to + the archive describing how to roll back. + +The migration is idempotent: a second `initialise()` after a successful +migration is a no-op (the JSON file already exists, so the legacy path +is skipped entirely). + +### If `better-sqlite3` is unavailable + +The migration path requires `better-sqlite3`. It is declared as an +`optionalDependency` so its install failures will not fail +`npm install` for users on platforms without prebuilds. + +If a legacy file is found but `better-sqlite3` is not loadable, the +provider throws an error with code `ECREDSDRIVERMISSING` and instructions +to either install `better-sqlite3` or rename the legacy file aside. +The provider deliberately refuses to silently start fresh while there +is a legacy file present, to avoid the user thinking their stored +credentials were lost. + +### Manual rollback + +The legacy file is preserved as `.legacy-`. To roll +back: + +1. Stop any running `mdctl` processes. +2. Delete or move aside `.json`. +3. `mv .legacy- `. +4. Reinstall a version of `mdctl` that predates the migration. + +## On-disk format + +```json +{ + "version": 1, + "keyCheck": "", + "credentials": [ + { + "_id": "", + "type": "service", + "service": "password", + "account": "", + "password": { "iv": "", "data": "" } + } + ] +} ``` + +The encryption format (`{iv, data}` AES-256-CBC) is **byte-compatible** +with the previous PouchDB-backed store, so migrated payloads are +preserved verbatim and never re-encrypted. + +The file is written with mode `0600` on POSIX systems. + +## Environment variables + +| Variable | Effect | +|---------------------------------------|---------------------------------------------------| +| `MDCTL_SUPPRESS_POUCHDB_DEPRECATION` | Suppress the package-name deprecation warning. | diff --git a/packages/mdctl-credentials-provider-pouchdb/index.js b/packages/mdctl-credentials-provider-pouchdb/index.js index 4723f462..e1a5c2d2 100644 --- a/packages/mdctl-credentials-provider-pouchdb/index.js +++ b/packages/mdctl-credentials-provider-pouchdb/index.js @@ -1,270 +1,151 @@ -const PouchDB = require('pouchdb-core') - .plugin(require('pouchdb-adapter-node-websql')) - .plugin(require('pouchdb-find')) - .plugin(require('transform-pouch')), - async = require('async'), - { - createCipheriv, createDecipheriv, listCiphers - } = require('browserify-aes'), - cipherModes = require('browserify-aes/modes'), - createHash = require('create-hash'), - randomBytes = require('randombytes'), +const { isSet, rString } = require('@medable/mdctl-core-utils/values'), { privatesAccessor } = require('@medable/mdctl-core-utils/privates'), - { isSet, rString, rPath } = require('@medable/mdctl-core-utils/values'), { CredentialsProvider } = require('@medable/mdctl-core/credentials/provider'), - { Fault } = require('@medable/mdctl-core') - -class EncryptionTransformer { - - constructor(input) { - - const options = isSet(input) ? input : {}, - cipher = 'aes-256-cbc', - key = Buffer.from(rString(options.key, '')), - ciphers = listCiphers() - - if (!ciphers.includes(cipher)) { - throw Fault.create('kInvalidArgument', { reason: `Invalid cipher "${cipher}"` }) - } - - if ((key.length * 8) !== 256) { - throw Fault.create('kInvalidArgument', { reason: `Invalid key length. Expected ${cipherModes[cipher].key} key but got ${key.length * 8}` }) - } - - Object.assign( - privatesAccessor(this), { - key, - keyCheck: sha256(key), - cipher - } - ) - - } - - get keyCheck() { - return privatesAccessor(this).keyCheck - } - - encrypt(data) { - const privates = privatesAccessor(this), - { cipher, key } = privates, - iv = randomBytes(16), - encipher = createCipheriv(cipher, key, iv), - encrypted = encipher.update(data) - - return { - iv: iv.toString('hex'), - data: Buffer.concat([encrypted, encipher.final()]).toString('hex') - } - } - - decrypt(doc) { - const privates = privatesAccessor(this), - { cipher, key } = privates, - { iv, data } = doc || {}, - decipher = createDecipheriv(cipher, key, Buffer.from(iv, 'hex')), - decrypted = decipher.update(Buffer.from(data, 'hex')) - - return Buffer.concat([decrypted, decipher.final()]).toString() - } - - incoming(doc) { - if (doc.password) { - doc.password = this.encrypt(doc.password) // eslint-disable-line no-param-reassign - } - return doc - } - - outgoing(doc) { - if (doc.password) { - doc.password = this.decrypt(doc.password) // eslint-disable-line no-param-reassign - } - return doc - } - + { Fault } = require('@medable/mdctl-core'), + { EncryptionTransformer } = require('./lib/encryption'), + { FileStore } = require('./lib/store'), + { migrate, looksLikeLegacySqlite } = require('./lib/migrate') + +let deprecationWarned = false + +function warnDeprecated() { + if (deprecationWarned) return + deprecationWarned = true + if (process.env.MDCTL_SUPPRESS_POUCHDB_DEPRECATION) return + process.emitWarning( + '@medable/mdctl-credentials-provider-pouchdb is deprecated. The package ' + + 'now stores credentials in a JSON file (PouchDB has been removed) and ' + + 'will be renamed to @medable/mdctl-credentials-provider-file in a ' + + 'future release. The exported class name and API remain unchanged.', + 'DeprecationWarning', + 'MDCTL_DEP_POUCHDB_PROVIDER' + ) } +// Drop-in replacement for the previous PouchDB-backed credentials +// provider. Constructor signature is unchanged: `{ name, key }`. +// +// `name` is interpreted as it was before: an absolute file path. The +// new JSON store lives at `.json`. If a legacy SQLite file is +// found at `` (the previous adapter's database file), it is +// migrated on first use; the legacy file is renamed to +// `.legacy-` afterwards but never deleted. class PouchDbCredentialsProvider extends CredentialsProvider { - /** - * - * @param input - * name: database name - * key: encryption key - */ constructor(input) { super() + warnDeprecated() const options = isSet(input) ? input : {}, - { name, key } = options, - encryption = new EncryptionTransformer({ key }), - privates = privatesAccessor(this) + name = rString(options.name, ''), + { key } = options + + if (!name) { + throw Fault.create('kInvalidArgument', { reason: '`name` is required (path to credentials store).' }) + } + + const encryption = new EncryptionTransformer({ key }), + store = new FileStore(`${name}.json`), + legacyPath = name - Object.assign(privates, { + Object.assign(privatesAccessor(this), { encryption, - name, - initializing: false + store, + legacyPath, + initializing: false, + initPromise: null }) } async initialize() { - const privates = privatesAccessor(this), - { name, encryption } = privates, - { keyCheck } = encryption - - let { db } = privates - - if (!db) { - - // make this re-entrant - if (privates.initializing) { - return new Promise((resolve, reject) => { - async.whilst( - () => privates.initializing, - async() => sleep(10), - () => (privates.err ? reject(privates.err) : resolve()) - ) - }) - } - - privates.initializing = true - - let err - - try { - - db = new PouchDB(name, { adapter: 'websql', auto_compaction: true, revs_limit: 0 }) - - db.transform(encryption) - - await db.createIndex({ - index: { fields: ['type', 'service', 'account'] } - }) + const privates = privatesAccessor(this) - const config = rPath(await db.find({ - selector: { type: 'config' } - }), 'docs.0') + // Re-entrant: a second concurrent call awaits the first. + if (privates.initPromise) { + return privates.initPromise + } - if (config && config.keyCheck !== keyCheck) { - err = Fault.create('kInvalidArgument', { reason: 'The encryption key used for this provider doesn\'t match.' }) - } else if (!config) { - await db.put({ - _id: 'config', - type: 'config', - keyCheck - }) + if (privates.initialized) return true + + privates.initPromise = (async() => { + const { store, encryption, legacyPath } = privates + + await store.withLock(async() => { + + // Already initialised by another in-process caller while we waited + // for the lock. + if (privates.initialized) return + + if (store.exists()) { + // Existing JSON store: just load and verify keyCheck. + store.load(encryption.keyCheck) + } else if (looksLikeLegacySqlite(legacyPath)) { + // No JSON store yet but a legacy SQLite file is present. + // Migrate it. + migrate({ legacyPath, store, encryption }) + } else { + // Fresh install. Create an empty store with the keyCheck + // recorded so a later wrong-key attempt is detected. + store.load(encryption.keyCheck) // load() seeds empty state + store.persist() } - } catch (e) { - err = e - } + }) - privates.db = db - privates.initializing = false - if (err) { - privates.err = err - throw err - } + privates.initialized = true + })() + try { + await privates.initPromise + } finally { + privates.initPromise = null } return true - } async getCredentials(service) { - await this.initialize() - - const { db } = privatesAccessor(this), - { docs } = await db.find({ - selector: { - type: 'service', - service - } - }) - - return docs + const { store, encryption } = privatesAccessor(this) + return store.list(service).map(row => ({ + _id: row._id, + type: row.type, + service: row.service, + account: row.account, + password: encryption.decrypt(row.password) + })) } async setCredentials(service, account, password) { - await this.initialize() - - const { db } = privatesAccessor(this), - doc = rPath(await db.find({ - selector: { - type: 'service', - service, - account - }, - fields: ['_id', '_rev'] - }), 'docs.0'), - { _id, _rev } = doc || {} - - await db.put({ - _id: _id || md5(`${service}${account}`), - _rev, - type: 'service', - service, - account, - password + const { store, encryption } = privatesAccessor(this) + await store.withLock(async() => { + // Re-load before mutating so we don't clobber writes made by + // another process while we were idle. + store.load(encryption.keyCheck) + store.upsert(service, account, encryption.encrypt(password)) }) - } async deleteCredentials(service, account) { - await this.initialize() - - const { db } = privatesAccessor(this), - doc = rPath(await db.find({ - selector: { - type: 'service', - service, - account - }, - fields: ['_id', '_rev'] - }), 'docs.0'), - { _id, _rev } = doc || {} - - if (!doc) { - return false - } - await db.remove({ _id, _rev }) - - return true + const { store, encryption } = privatesAccessor(this) + let removed = false + await store.withLock(async() => { + store.load(encryption.keyCheck) + removed = store.remove(service, account) + }) + return removed } async close() { - const privates = privatesAccessor(this) - if (privates.db) { - await privates.db.close() - privates.db = null - } + privates.initialized = false return true - } } -function md5(buf) { - const hash = createHash('md5') - hash.update(buf) - return hash.digest('hex') -} - -function sha256(buf) { - const hash = createHash('sha256') - hash.update(buf) - return hash.digest('hex') -} - -function sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)) -} - module.exports = PouchDbCredentialsProvider diff --git a/packages/mdctl-credentials-provider-pouchdb/lib/encryption.js b/packages/mdctl-credentials-provider-pouchdb/lib/encryption.js new file mode 100644 index 00000000..2558a7e4 --- /dev/null +++ b/packages/mdctl-credentials-provider-pouchdb/lib/encryption.js @@ -0,0 +1,79 @@ +const { + createCipheriv, createDecipheriv, listCiphers + } = require('browserify-aes'), + cipherModes = require('browserify-aes/modes'), + createHash = require('create-hash'), + randomBytes = require('randombytes'), + { isSet, rString } = require('@medable/mdctl-core-utils/values'), + { privatesAccessor } = require('@medable/mdctl-core-utils/privates'), + { Fault } = require('@medable/mdctl-core') + +function sha256(buf) { + const hash = createHash('sha256') + hash.update(buf) + return hash.digest('hex') +} + +// Encryption format and on-disk shape are kept byte-compatible with the +// previous PouchDB-backed implementation so legacy stores can be migrated +// without re-encrypting any payloads. +class EncryptionTransformer { + + constructor(input) { + + const options = isSet(input) ? input : {}, + cipher = 'aes-256-cbc', + key = Buffer.from(rString(options.key, '')), + ciphers = listCiphers() + + if (!ciphers.includes(cipher)) { + throw Fault.create('kInvalidArgument', { reason: `Invalid cipher "${cipher}"` }) + } + + if ((key.length * 8) !== 256) { + throw Fault.create('kInvalidArgument', { reason: `Invalid key length. Expected ${cipherModes[cipher].key} key but got ${key.length * 8}` }) + } + + Object.assign( + privatesAccessor(this), { + key, + keyCheck: sha256(key), + cipher + } + ) + + } + + get keyCheck() { + return privatesAccessor(this).keyCheck + } + + encrypt(data) { + const privates = privatesAccessor(this), + { cipher, key } = privates, + iv = randomBytes(16), + encipher = createCipheriv(cipher, key, iv), + encrypted = encipher.update(data) + + return { + iv: iv.toString('hex'), + data: Buffer.concat([encrypted, encipher.final()]).toString('hex') + } + } + + decrypt(doc) { + const privates = privatesAccessor(this), + { cipher, key } = privates, + { iv, data } = doc || {}, + decipher = createDecipheriv(cipher, key, Buffer.from(iv, 'hex')), + decrypted = decipher.update(Buffer.from(data, 'hex')) + + return Buffer.concat([decrypted, decipher.final()]).toString() + } + +} + +module.exports = { + EncryptionTransformer, + sha256 +} diff --git a/packages/mdctl-credentials-provider-pouchdb/lib/migrate.js b/packages/mdctl-credentials-provider-pouchdb/lib/migrate.js new file mode 100644 index 00000000..153f035d --- /dev/null +++ b/packages/mdctl-credentials-provider-pouchdb/lib/migrate.js @@ -0,0 +1,275 @@ +const fs = require('fs'), + path = require('path'), + { STATE_VERSION, md5 } = require('./store') + +// Returns true when a legacy PouchDB-WebSQL store appears to exist at +// `legacyPath`. We use the SQLite magic header to be sure rather than +// just checking for file existence. +function looksLikeLegacySqlite(legacyPath) { + let fd + try { + fd = fs.openSync(legacyPath, 'r') + } catch (e) { + return false + } + try { + const header = Buffer.alloc(16) + const read = fs.readSync(fd, header, 0, 16, 0) + if (read < 16) return false + // "SQLite format 3\u0000" + return header.toString('utf8', 0, 15) === 'SQLite format 3' + } finally { + try { fs.closeSync(fd) } catch (e) { /* ignore */ } + } +} + +// Try to load better-sqlite3. Returned as null if unavailable so callers +// can produce an actionable error (rather than crashing on require). +function tryLoadDriver() { + try { + return require('better-sqlite3') // eslint-disable-line global-require + } catch (e) { + return null + } +} + +function legacyMissingDriverError(legacyPath) { + const e = new Error( + `A legacy credentials database was found at:\n ${legacyPath}\n\n` + + 'To migrate it, install better-sqlite3:\n' + + ' npm install better-sqlite3\n\n' + + 'If you don\'t need the existing credentials, you can move the legacy ' + + 'file aside (do NOT delete it until you are sure) to start fresh:\n' + + ` mv "${legacyPath}" "${legacyPath}.disabled"\n` + + 'and then re-run the command. You will be prompted to log in again.' + ) + e.code = 'ECREDSDRIVERMISSING' + return e +} + +// Read every winning revision out of the PouchDB-WebSQL document store. +// Returns an array of { id, doc, deleted }. +function readLegacyDocs(db) { + const stmt = db.prepare( + 'SELECT ds.id AS id, bs.json AS json, bs.deleted AS deleted ' + + 'FROM "document-store" ds ' + + 'JOIN "by-sequence" bs ON ds.winningseq = bs.seq' + ) + const rows = stmt.all() + return rows.map(r => ({ + id: r.id, + deleted: Number(r.deleted) === 1, + doc: r.json ? JSON.parse(r.json) : null + })) +} + +// Pulls credentials out of legacy docs, skipping tombstones, design +// documents and the config doc. Verifies every encrypted password +// decrypts cleanly with the supplied EncryptionTransformer; if anything +// fails to decrypt the migration is aborted so the source file is not +// touched. +function buildState(legacyDocs, encryption, expectedKeyCheck) { + + const configDoc = legacyDocs.find(r => !r.deleted && r.id === 'config' && r.doc && r.doc.type === 'config') + + if (!configDoc) { + const e = new Error('Legacy credentials store has no config document; cannot verify encryption key.') + e.code = 'ECREDSNOCONFIG' + throw e + } + + if (configDoc.doc.keyCheck !== expectedKeyCheck) { + const e = new Error('The encryption key used for this provider doesn\'t match.') + e.code = 'ECREDSKEYMISMATCH' + throw e + } + + const credentials = [] + + for (const row of legacyDocs) { + if (row.deleted) continue + if (!row.doc) continue + if (row.id.startsWith('_design/') || row.id.startsWith('_local/')) continue + if (row.doc.type !== 'service') continue + + const { service, account, password } = row.doc + + if (typeof service !== 'string' || typeof account !== 'string') continue + if (!password || typeof password !== 'object' + || typeof password.iv !== 'string' || typeof password.data !== 'string') { + const e = new Error( + `Legacy credential at id=${row.id} has an unexpected password shape; refusing to migrate.` + ) + e.code = 'ECREDSCORRUPT' + throw e + } + + // Round-trip the decrypt as a data-integrity smoke test. We discard + // the plaintext immediately and persist only the encrypted blob. + try { + encryption.decrypt(password) + } catch (err) { + const e = new Error( + `Failed to decrypt legacy credential at id=${row.id} during migration: ${err.message}. ` + + 'Migration aborted; the legacy file has not been modified.' + ) + e.code = 'ECREDSDECRYPT' + throw e + } + + credentials.push({ + _id: md5(`${service}${account}`), + type: 'service', + service, + account, + password + }) + } + + return { + version: STATE_VERSION, + keyCheck: expectedKeyCheck, + credentials + } +} + +// Sidecar files PouchDB's WebSQL adapter creates for MapReduce indexes, +// e.g. "-mrview-" plus their journal/wal companions. +function listLegacySidecarFiles(legacyPath) { + const dir = path.dirname(legacyPath), + base = path.basename(legacyPath), + prefix = `${base}-mrview-` + + let entries + try { + entries = fs.readdirSync(dir) + } catch (e) { + return [] + } + return entries + .filter(name => name.startsWith(prefix)) + .map(name => path.join(dir, name)) +} + +function timestampSuffix() { + return new Date().toISOString().replace(/[:.]/g, '-') +} + +function writeLegacyReadme(suffix, archivedPaths, originalPath) { + const readmePath = `${originalPath}.legacy-${suffix}.README.txt`, + body = [ + 'This directory contains a legacy PouchDB/SQLite credentials', + 'store that was migrated to a JSON-backed format.', + '', + `Migrated at: ${new Date().toISOString()}`, + '', + 'Archived files (these were renamed, not deleted):', + ...archivedPaths.map(p => ` ${p}`), + '', + 'New store location:', + ` ${originalPath}.json`, + '', + 'To roll back to the legacy store:', + ' 1. Stop any running mdctl processes.', + ` 2. Move ${originalPath}.json out of the way (or delete it).`, + ' 3. Rename the archived file back to its original name:', + ` mv "${originalPath}.legacy-${suffix}" "${originalPath}"`, + ' 4. Reinstall an mdctl version older than the one that performed', + ' the migration.', + '' + ].join('\n') + try { + fs.writeFileSync(readmePath, body, { mode: 0o600 }) + } catch (e) { /* readme is best-effort; do not fail migration over it */ } +} + +// Migrate a legacy PouchDB/WebSQL credentials database at `legacyPath` +// into the supplied `store`. Caller MUST hold the store lock. +// +// Safety properties: +// 1. Reads the legacy SQLite file in read-only mode. +// 2. Verifies the supplied encryption key matches before doing anything. +// 3. Decrypts every credential as an integrity check before writing. +// 4. Writes the new JSON store atomically (tmp + rename) BEFORE touching +// the legacy file. +// 5. The legacy file is renamed (with a timestamped suffix), never +// deleted; sidecar files are renamed alongside it. +// 6. Drops a README next to the archive describing how to roll back. +function migrate({ legacyPath, store, encryption }) { + + const Database = tryLoadDriver() + if (!Database) throw legacyMissingDriverError(legacyPath) + + let db + try { + db = new Database(legacyPath, { readonly: true, fileMustExist: true }) + } catch (err) { + const e = new Error(`Failed to open legacy credentials store at ${legacyPath}: ${err.message}`) + e.code = 'ECREDSOPENLEGACY' + throw e + } + + let newState + try { + const legacyDocs = readLegacyDocs(db) + newState = buildState(legacyDocs, encryption, encryption.keyCheck) + } finally { + try { db.close() } catch (e) { /* ignore */ } + } + + // 1. Persist the new JSON store atomically. Until this succeeds we + // have not modified anything on disk that the legacy adapter cared + // about. + store.setStateAndPersist(newState) + + // 2. Re-read it back and verify it parses and matches keyCheck. If + // this fails for any reason we leave the legacy file in place. + try { + const verify = JSON.parse(fs.readFileSync(store.path, 'utf8')) + if (verify.keyCheck !== encryption.keyCheck + || !Array.isArray(verify.credentials) + || verify.credentials.length !== newState.credentials.length) { + throw new Error('post-write verification mismatch') + } + } catch (err) { + const e = new Error( + `Wrote new credentials store at ${store.path} but verification failed (${err.message}). ` + + 'Legacy file has been left untouched.' + ) + e.code = 'ECREDSVERIFY' + throw e + } + + // 3. Rename (NOT delete) the legacy file and any sidecar files so + // that a manual rollback is always possible. + const suffix = timestampSuffix(), + archivedLegacy = `${legacyPath}.legacy-${suffix}`, + sidecarPaths = listLegacySidecarFiles(legacyPath), + archivedAll = [archivedLegacy] + + fs.renameSync(legacyPath, archivedLegacy) + + for (const sidecar of sidecarPaths) { + const archived = `${sidecar}.legacy-${suffix}` + try { + fs.renameSync(sidecar, archived) + archivedAll.push(archived) + } catch (e) { /* sidecars are derived; non-fatal if rename fails */ } + } + + writeLegacyReadme(suffix, archivedAll, legacyPath) + + return { + archivedLegacy, + archivedSidecars: archivedAll.slice(1), + migratedCount: newState.credentials.length + } +} + +module.exports = { + migrate, + looksLikeLegacySqlite, + // exposed for tests + buildState, + readLegacyDocs +} diff --git a/packages/mdctl-credentials-provider-pouchdb/lib/store.js b/packages/mdctl-credentials-provider-pouchdb/lib/store.js new file mode 100644 index 00000000..c21e787a --- /dev/null +++ b/packages/mdctl-credentials-provider-pouchdb/lib/store.js @@ -0,0 +1,243 @@ +const fs = require('fs'), + path = require('path'), + os = require('os'), + createHash = require('create-hash') + +const STATE_VERSION = 1, + LOCK_STALE_MS = 30 * 1000, + LOCK_RETRY_MS = 50, + LOCK_TIMEOUT_MS = 10 * 1000 + +function md5(buf) { + const hash = createHash('md5') + hash.update(buf) + return hash.digest('hex') +} + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function emptyState(keyCheck) { + return { + version: STATE_VERSION, + keyCheck, + credentials: [] + } +} + +// File-backed credentials store. Data shape on disk: +// { +// "version": 1, +// "keyCheck": "", +// "credentials": [ +// { "type": "service", "service": "...", "account": "...", +// "password": { "iv": "...", "data": "..." } }, +// ... +// ] +// } +// +// All `password` payloads are stored encrypted (AES-256-CBC, see +// EncryptionTransformer). The store itself never sees plaintext: callers +// pass the already-encrypted blob in via `set` and read the encrypted +// blob back via `get`/`list`. Decryption happens one layer up. +class FileStore { + + constructor(filePath) { + this.path = filePath + this.tmpPath = `${filePath}.tmp` + this.lockPath = `${filePath}.lock` + this.state = null + } + + exists() { + try { + fs.accessSync(this.path, fs.constants.R_OK) + return true + } catch (e) { + return false + } + } + + // Initialise from disk (or create empty). Verifies the supplied + // keyCheck matches the stored one when the file already exists. + // Throws if the keyCheck does not match. + load(keyCheck) { + + if (!this.exists()) { + this.state = emptyState(keyCheck) + return + } + + const raw = fs.readFileSync(this.path, 'utf8') + + let parsed + try { + parsed = JSON.parse(raw) + } catch (err) { + const e = new Error(`Credentials store at ${this.path} is corrupt and cannot be parsed: ${err.message}`) + e.code = 'ECREDSCORRUPT' + throw e + } + + if (!parsed || typeof parsed !== 'object' + || !Array.isArray(parsed.credentials) + || typeof parsed.keyCheck !== 'string') { + const e = new Error(`Credentials store at ${this.path} has an unrecognised shape.`) + e.code = 'ECREDSCORRUPT' + throw e + } + + if (parsed.keyCheck !== keyCheck) { + const e = new Error('The encryption key used for this provider doesn\'t match.') + e.code = 'ECREDSKEYMISMATCH' + throw e + } + + this.state = { + version: parsed.version || STATE_VERSION, + keyCheck: parsed.keyCheck, + credentials: parsed.credentials + } + + } + + // Replace the in-memory state wholesale and persist atomically. Used + // by the legacy migration path; not for normal mutations. + setStateAndPersist(state) { + this.state = state + this.persist() + } + + // Atomic write. Writes to a tmp file in the same directory, fsyncs, + // then renames over the target. fs.rename is atomic on POSIX, and on + // Windows (Node 16+) MoveFileEx with MOVEFILE_REPLACE_EXISTING is used. + persist() { + const dir = path.dirname(this.path) + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }) + } + + const json = JSON.stringify(this.state, null, 2), + fd = fs.openSync(this.tmpPath, 'w', 0o600) + try { + fs.writeSync(fd, json) + fs.fsyncSync(fd) + } finally { + fs.closeSync(fd) + } + + fs.renameSync(this.tmpPath, this.path) + } + + list(service) { + return this.state.credentials + .filter(c => c.type === 'service' && c.service === service) + .map(c => ({ + _id: c._id || md5(`${c.service}${c.account}`), + type: c.type, + service: c.service, + account: c.account, + password: c.password + })) + } + + upsert(service, account, encryptedPassword) { + const existingIdx = this.state.credentials.findIndex( + c => c.type === 'service' && c.service === service && c.account === account + ) + + const row = { + _id: md5(`${service}${account}`), + type: 'service', + service, + account, + password: encryptedPassword + } + + if (existingIdx >= 0) { + this.state.credentials[existingIdx] = row + } else { + this.state.credentials.push(row) + } + + this.persist() + } + + remove(service, account) { + const before = this.state.credentials.length + this.state.credentials = this.state.credentials.filter( + c => !(c.type === 'service' && c.service === service && c.account === account) + ) + if (this.state.credentials.length === before) { + return false + } + this.persist() + return true + } + + // mkdir-based exclusive lock. mkdir is atomic across all POSIX and NTFS + // filesystems, so two concurrent processes calling this will only ever + // see exactly one succeed. Released by removing the directory; stale + // locks (older than LOCK_STALE_MS) are reclaimed automatically. + async acquireLock() { + const start = Date.now() + while (true) { // eslint-disable-line no-constant-condition + try { + fs.mkdirSync(this.lockPath) + // record holder for diagnostics; failure to write metadata is + // non-fatal because lock ownership is established by mkdir alone. + try { + fs.writeFileSync( + path.join(this.lockPath, 'owner'), + JSON.stringify({ pid: process.pid, host: os.hostname(), at: new Date().toISOString() }) + ) + } catch (e) { /* ignore */ } + return + } catch (err) { + if (err.code !== 'EEXIST') { + throw err + } + // Lock exists. Check age and try to reclaim if stale. + try { + const stat = fs.statSync(this.lockPath) + if (Date.now() - stat.mtimeMs > LOCK_STALE_MS) { + this.releaseLock() + continue // retry mkdir immediately + } + } catch (statErr) { /* lock vanished between checks; retry */ } + + if (Date.now() - start > LOCK_TIMEOUT_MS) { + const e = new Error(`Timed out acquiring credentials store lock at ${this.lockPath}`) + e.code = 'ECREDSLOCKED' + throw e + } + await sleep(LOCK_RETRY_MS) + } + } + } + + releaseLock() { + try { + try { fs.unlinkSync(path.join(this.lockPath, 'owner')) } catch (e) { /* ignore */ } + fs.rmdirSync(this.lockPath) + } catch (e) { /* ignore */ } + } + + async withLock(fn) { + await this.acquireLock() + try { + return await fn() + } finally { + this.releaseLock() + } + } + +} + +module.exports = { + FileStore, + STATE_VERSION, + emptyState, + md5 +} diff --git a/packages/mdctl-credentials-provider-pouchdb/package.json b/packages/mdctl-credentials-provider-pouchdb/package.json index 74166a36..b1c3f21a 100644 --- a/packages/mdctl-credentials-provider-pouchdb/package.json +++ b/packages/mdctl-credentials-provider-pouchdb/package.json @@ -1,7 +1,8 @@ { "name": "@medable/mdctl-credentials-provider-pouchdb", - "version": "1.0.74-alpha.0", - "description": "Medable Developer Client Tools :: PouchDB Creds Provider", + "version": "1.0.75-alpha.0", + "description": "Medable Developer Client Tools :: File-backed Credentials Provider (formerly PouchDB-backed; PouchDB has been removed). DEPRECATED: this package will be renamed to @medable/mdctl-credentials-provider-file. The exported class name and API are unchanged.", + "deprecated": "Renamed package incoming: this will become @medable/mdctl-credentials-provider-file. The current package continues to work as a drop-in replacement; PouchDB is no longer used.", "repository": { "type": "git", "url": "git+https://github.com/Medable/mdctl.git" @@ -10,8 +11,8 @@ "url": "https://github.com/Medable/mdctl/issues" }, "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">=18", + "npm": ">=8" }, "author": "Medable, Inc. ", "license": "MIT", @@ -20,23 +21,21 @@ "test:prod": "npm run test", "test:only": "mocha --recursive", "test:watch": "npm run test:only -- --watch", - "test:examples": "node examples/", "cover": "istanbul cover ../../node_modules/mocha/bin/_mocha -- --recursive --timeout 10000", - "lint": "eslint *.js" + "lint": "eslint *.js lib/" }, "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "async": "^2.6.3", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "browserify-aes": "^1.2.0", "create-hash": "^1.2.0", - "pouchdb-adapter-node-websql": "^7.0.0", - "pouchdb-core": "^7.1.1", - "pouchdb-find": "^7.1.1", - "randombytes": "^2.1.0", - "transform-pouch": "^1.1.4" + "randombytes": "^2.1.0" + }, + "optionalDependencies": { + "better-sqlite3": "^12.0.0" }, "devDependencies": { + "better-sqlite3": "^12.0.0", "chai": "^4.1.2", "eslint": "^5.16.0", "eslint-config-airbnb": "^17.1.1", @@ -49,8 +48,5 @@ "mocha": "^10.3.0", "sinon": "^7.4.2" }, - "overrides": { - "nan": "^2.16.0" - }, "gitHead": "4d50c0a1a7e84d29ac2490436643434205ce3f6d" } diff --git a/packages/mdctl-credentials-provider-pouchdb/test/migrate.test.js b/packages/mdctl-credentials-provider-pouchdb/test/migrate.test.js new file mode 100644 index 00000000..fcacf1ec --- /dev/null +++ b/packages/mdctl-credentials-provider-pouchdb/test/migrate.test.js @@ -0,0 +1,243 @@ +/* eslint-env mocha */ + +const fs = require('fs'), + path = require('path'), + os = require('os'), + { expect } = require('chai'), + Database = require('better-sqlite3'), + PouchDbCredentialsProvider = require('..'), + { EncryptionTransformer } = require('../lib/encryption') + +const KEY = '0123456789abcdef0123456789abcdef' + +function tmpName() { + return path.join( + fs.mkdtempSync(path.join(os.tmpdir(), 'mdctl-creds-mig-')), + 'mdctl.db' + ) +} + +// Build a SQLite file with exactly the schema PouchDB-WebSQL produces +// (verified against a real on-disk legacy store) and seed it with the +// supplied logical documents. Each `doc` is written as the winning +// revision of an `id`. +function writeLegacySqlite(filePath, docs) { + const db = new Database(filePath) + try { + db.exec(` + CREATE TABLE IF NOT EXISTS 'attach-store' (digest UNIQUE, escaped TINYINT(1), body BLOB); + CREATE TABLE IF NOT EXISTS 'local-store' (id UNIQUE, rev, json); + CREATE TABLE IF NOT EXISTS 'attach-seq-store' (digest, seq INTEGER); + CREATE TABLE IF NOT EXISTS 'document-store' (id unique, json, winningseq, max_seq INTEGER UNIQUE); + CREATE INDEX IF NOT EXISTS 'attach-seq-seq-idx' ON 'attach-seq-store' (seq); + CREATE UNIQUE INDEX IF NOT EXISTS 'attach-seq-digest-idx' ON 'attach-seq-store' (digest, seq); + CREATE INDEX IF NOT EXISTS 'doc-winningseq-idx' ON 'document-store' (winningseq); + CREATE TABLE IF NOT EXISTS 'by-sequence' (seq INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, json, deleted TINYINT(1), doc_id, rev); + CREATE INDEX IF NOT EXISTS 'by-seq-deleted-idx' ON 'by-sequence' (seq, deleted); + CREATE UNIQUE INDEX IF NOT EXISTS 'by-seq-doc-id-rev' ON 'by-sequence' (doc_id, rev); + CREATE TABLE IF NOT EXISTS 'metadata-store' (dbid, db_version INTEGER); + `) + + const insertSeq = db.prepare( + 'INSERT INTO "by-sequence" (json, deleted, doc_id, rev) VALUES (?, ?, ?, ?)' + ) + const insertDoc = db.prepare( + 'INSERT INTO "document-store" (id, json, winningseq, max_seq) VALUES (?, ?, ?, ?)' + ) + + docs.forEach((entry) => { + const json = JSON.stringify(entry.doc), + deleted = entry.deleted ? 1 : 0, + rev = entry.rev || '1-aaaa', + info = insertSeq.run(json, deleted, entry.id, rev) + insertDoc.run(entry.id, '{}', info.lastInsertRowid, info.lastInsertRowid) + }) + } finally { + db.close() + } +} + +function seedLegacyStore(filePath, key, plaintextRows) { + const enc = new EncryptionTransformer({ key }), + docs = [] + + docs.push({ + id: 'config', + doc: { type: 'config', keyCheck: enc.keyCheck } + }) + + plaintextRows.forEach((row, i) => { + docs.push({ + id: `doc-${i}`, + doc: { + type: 'service', + service: row.service, + account: row.account, + password: enc.encrypt(row.password) + } + }) + }) + + writeLegacySqlite(filePath, docs) + return docs +} + +describe('legacy SQLite migration', () => { + + it('migrates active credentials, skipping deleted, _design, _local, and config docs', async() => { + const name = tmpName() + const enc = new EncryptionTransformer({ key: KEY }) + + writeLegacySqlite(name, [ + { id: 'config', doc: { type: 'config', keyCheck: enc.keyCheck } }, + { id: 'doc-1', doc: { type: 'service', service: 'password', account: 'a', password: enc.encrypt('p1') } }, + { id: 'doc-2', doc: { type: 'service', service: 'password', account: 'b', password: enc.encrypt('p2') } }, + // a deleted (tombstoned) credential should NOT be migrated + { id: 'doc-3', deleted: true, doc: { type: 'service', service: 'password', account: 'c', password: enc.encrypt('p3') } }, + // design docs should be ignored + { id: '_design/idx-x', doc: { language: 'query', views: {} } }, + // _local docs should be ignored + { id: '_local/checkpoint', doc: { _id: '_local/checkpoint', last_seq: 5 } } + ]) + + const provider = new PouchDbCredentialsProvider({ name, key: KEY }) + const list = await provider.getCredentials('password') + + const accountToPassword = Object.fromEntries(list.map(r => [r.account, r.password])) + expect(accountToPassword).to.deep.equal({ a: 'p1', b: 'p2' }) + }) + + it('renames the legacy file rather than deleting it', async() => { + const name = tmpName() + seedLegacyStore(name, KEY, [{ service: 'password', account: 'a', password: 'p1' }]) + const beforeBytes = fs.readFileSync(name) + + const provider = new PouchDbCredentialsProvider({ name, key: KEY }) + await provider.initialize() + + expect(fs.existsSync(name)).to.equal(false) + expect(fs.existsSync(`${name}.json`)).to.equal(true) + + const dir = path.dirname(name) + const archived = fs.readdirSync(dir).find(f => f.startsWith(`${path.basename(name)}.legacy-`)) + expect(archived, 'expected an archived legacy file').to.exist + const archivedBytes = fs.readFileSync(path.join(dir, archived)) + expect(Buffer.compare(archivedBytes, beforeBytes)).to.equal(0) + }) + + it('writes a rollback README next to the archived legacy file', async() => { + const name = tmpName() + seedLegacyStore(name, KEY, [{ service: 'password', account: 'a', password: 'p1' }]) + const provider = new PouchDbCredentialsProvider({ name, key: KEY }) + await provider.initialize() + + const dir = path.dirname(name) + const readme = fs.readdirSync(dir).find(f => f.includes('.legacy-') && f.endsWith('.README.txt')) + expect(readme).to.exist + const body = fs.readFileSync(path.join(dir, readme), 'utf8') + expect(body).to.include('roll back') + expect(body).to.include(name) + }) + + it('does not touch the legacy file when the encryption key is wrong', async() => { + const name = tmpName() + seedLegacyStore(name, KEY, [{ service: 'password', account: 'a', password: 'p1' }]) + const beforeStat = fs.statSync(name) + + const provider = new PouchDbCredentialsProvider({ name, key: 'wrongkeywrongkeywrongkeywrongkey' }) + let err + try { await provider.initialize() } catch (e) { err = e } + expect(err).to.exist + expect(err.message).to.match(/encryption key/i) + + expect(fs.existsSync(name)).to.equal(true) + expect(fs.existsSync(`${name}.json`)).to.equal(false) + expect(fs.statSync(name).size).to.equal(beforeStat.size) + }) + + it('does not touch the legacy file if any credential fails to decrypt', async() => { + const name = tmpName() + const enc = new EncryptionTransformer({ key: KEY }) + + writeLegacySqlite(name, [ + { id: 'config', doc: { type: 'config', keyCheck: enc.keyCheck } }, + { id: 'doc-good', doc: { type: 'service', service: 'password', account: 'a', password: enc.encrypt('p1') } }, + // tampered ciphertext: keyCheck still matches but this row will fail to decrypt + { id: 'doc-bad', doc: { type: 'service', service: 'password', account: 'b', password: { iv: 'deadbeef'.repeat(4), data: 'cafebabe'.repeat(8) } } } + ]) + + const provider = new PouchDbCredentialsProvider({ name, key: KEY }) + let err + try { await provider.initialize() } catch (e) { err = e } + expect(err).to.exist + expect(err.code).to.equal('ECREDSDECRYPT') + + expect(fs.existsSync(name)).to.equal(true) + expect(fs.existsSync(`${name}.json`)).to.equal(false) + }) + + it('is idempotent: a second initialise after migration is a no-op', async() => { + const name = tmpName() + seedLegacyStore(name, KEY, [{ service: 'password', account: 'a', password: 'p1' }]) + + const provider = new PouchDbCredentialsProvider({ name, key: KEY }) + await provider.initialize() + const dir = path.dirname(name) + const archivedBefore = fs.readdirSync(dir).filter(f => f.includes('.legacy-')).sort() + + // simulate restart + const provider2 = new PouchDbCredentialsProvider({ name, key: KEY }) + await provider2.initialize() + const archivedAfter = fs.readdirSync(dir).filter(f => f.includes('.legacy-')).sort() + + expect(archivedAfter).to.deep.equal(archivedBefore) + const list = await provider2.getCredentials('password') + expect(list.map(r => r.password)).to.deep.equal(['p1']) + }) + + it('renames mrview sidecar files alongside the main legacy file', async() => { + const name = tmpName() + seedLegacyStore(name, KEY, [{ service: 'password', account: 'a', password: 'p1' }]) + // Synthesize a mrview sidecar of the same shape PouchDB createIndex creates. + const sidecarPath = `${name}-mrview-deadbeef` + fs.writeFileSync(sidecarPath, 'sidecar bytes') + + const provider = new PouchDbCredentialsProvider({ name, key: KEY }) + await provider.initialize() + + expect(fs.existsSync(sidecarPath)).to.equal(false) + const dir = path.dirname(name) + const archivedSidecar = fs.readdirSync(dir).find(f => f.startsWith(`${path.basename(sidecarPath)}.legacy-`)) + expect(archivedSidecar, 'expected sidecar to be archived, not deleted').to.exist + }) + + it('migrates an empty (config-only) legacy store cleanly', async() => { + const name = tmpName() + seedLegacyStore(name, KEY, []) + + const provider = new PouchDbCredentialsProvider({ name, key: KEY }) + await provider.initialize() + const list = await provider.getCredentials('password') + expect(list).to.deep.equal([]) + + expect(fs.existsSync(`${name}.json`)).to.equal(true) + expect(fs.existsSync(name)).to.equal(false) + }) + + it('aborts when the legacy store has no config doc (cannot verify key)', async() => { + const name = tmpName() + writeLegacySqlite(name, [ + // no config doc on purpose + { id: 'doc-1', doc: { type: 'service', service: 'password', account: 'a', password: { iv: 'x', data: 'y' } } } + ]) + + const provider = new PouchDbCredentialsProvider({ name, key: KEY }) + let err + try { await provider.initialize() } catch (e) { err = e } + expect(err).to.exist + expect(err.code).to.equal('ECREDSNOCONFIG') + expect(fs.existsSync(name)).to.equal(true) + expect(fs.existsSync(`${name}.json`)).to.equal(false) + }) + +}) diff --git a/packages/mdctl-credentials-provider-pouchdb/test/store.test.js b/packages/mdctl-credentials-provider-pouchdb/test/store.test.js new file mode 100644 index 00000000..994caa94 --- /dev/null +++ b/packages/mdctl-credentials-provider-pouchdb/test/store.test.js @@ -0,0 +1,120 @@ +/* eslint-env mocha */ + +const fs = require('fs'), + path = require('path'), + os = require('os'), + { expect } = require('chai'), + PouchDbCredentialsProvider = require('..') + +const KEY = '0123456789abcdef0123456789abcdef' + +function tmpName() { + return path.join( + fs.mkdtempSync(path.join(os.tmpdir(), 'mdctl-creds-')), + 'mdctl.db' + ) +} + +describe('FileStore credentials provider', () => { + + it('round-trips a single credential', async() => { + const name = tmpName(), + provider = new PouchDbCredentialsProvider({ name, key: KEY }) + + await provider.setCredentials('password', 'acct-a', 'hunter2') + const list = await provider.getCredentials('password') + + expect(list).to.have.lengthOf(1) + expect(list[0]).to.include({ type: 'service', service: 'password', account: 'acct-a', password: 'hunter2' }) + + expect(fs.existsSync(`${name}.json`)).to.equal(true) + expect(fs.existsSync(name)).to.equal(false) + }) + + it('upserts (single row per service+account)', async() => { + const name = tmpName(), + provider = new PouchDbCredentialsProvider({ name, key: KEY }) + + await provider.setCredentials('password', 'acct-a', 'one') + await provider.setCredentials('password', 'acct-a', 'two') + await provider.setCredentials('password', 'acct-b', 'three') + + const list = await provider.getCredentials('password') + expect(list).to.have.lengthOf(2) + const a = list.find(r => r.account === 'acct-a') + const b = list.find(r => r.account === 'acct-b') + expect(a.password).to.equal('two') + expect(b.password).to.equal('three') + }) + + it('deletes by service+account and reports whether removal happened', async() => { + const name = tmpName(), + provider = new PouchDbCredentialsProvider({ name, key: KEY }) + + await provider.setCredentials('password', 'acct-a', 'one') + + const removed = await provider.deleteCredentials('password', 'acct-a') + expect(removed).to.equal(true) + const removedAgain = await provider.deleteCredentials('password', 'acct-a') + expect(removedAgain).to.equal(false) + + expect(await provider.getCredentials('password')).to.have.lengthOf(0) + }) + + it('persists across provider instances', async() => { + const name = tmpName() + + const a = new PouchDbCredentialsProvider({ name, key: KEY }) + await a.setCredentials('password', 'acct-a', 'hunter2') + await a.close() + + const b = new PouchDbCredentialsProvider({ name, key: KEY }) + const list = await b.getCredentials('password') + expect(list).to.have.lengthOf(1) + expect(list[0].password).to.equal('hunter2') + }) + + it('rejects when re-opened with a wrong encryption key', async() => { + const name = tmpName(), + a = new PouchDbCredentialsProvider({ name, key: KEY }) + await a.setCredentials('password', 'acct-a', 'hunter2') + + const wrongKey = 'wrongkeywrongkeywrongkeywrongkey', + b = new PouchDbCredentialsProvider({ name, key: wrongKey }) + + let err + try { await b.getCredentials('password') } catch (e) { err = e } + expect(err).to.exist + expect(err.message).to.match(/encryption key/i) + }) + + it('writes the json file with mode 0600', async function() { + if (process.platform === 'win32') return this.skip() + const name = tmpName(), + provider = new PouchDbCredentialsProvider({ name, key: KEY }) + await provider.setCredentials('password', 'acct-a', 'hunter2') + const stat = fs.statSync(`${name}.json`) + // eslint-disable-next-line no-bitwise + expect((stat.mode & 0o777)).to.equal(0o600) + }) + + it('does not store plaintext passwords on disk', async() => { + const name = tmpName(), + provider = new PouchDbCredentialsProvider({ name, key: KEY }) + await provider.setCredentials('password', 'acct-a', 'verysecretplaintext') + const raw = fs.readFileSync(`${name}.json`, 'utf8') + expect(raw).to.not.include('verysecretplaintext') + }) + + it('persists getCredentials result after re-load', async() => { + const name = tmpName(), + a = new PouchDbCredentialsProvider({ name, key: KEY }) + await a.setCredentials('token', 'acct-a', 'tok-a') + await a.setCredentials('token', 'acct-b', 'tok-b') + + const b = new PouchDbCredentialsProvider({ name, key: KEY }) + const list = await b.getCredentials('token') + expect(list.map(r => r.password).sort()).to.deep.equal(['tok-a', 'tok-b']) + }) + +}) diff --git a/packages/mdctl-docs/package.json b/packages/mdctl-docs/package.json index 67ef1e13..cd9b2ce1 100644 --- a/packages/mdctl-docs/package.json +++ b/packages/mdctl-docs/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-docs", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Documentation", "repository": { "type": "git", diff --git a/packages/mdctl-export-adapter-console/package.json b/packages/mdctl-export-adapter-console/package.json index 04ed1a6b..1c0edcdf 100644 --- a/packages/mdctl-export-adapter-console/package.json +++ b/packages/mdctl-export-adapter-console/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-export-adapter-console", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Export Console Adapter", "repository": { "type": "git", @@ -25,7 +25,7 @@ "lint": "eslint *.js" }, "dependencies": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0" + "@medable/mdctl-core-utils": "1.0.75-alpha.0" }, "devDependencies": { "chai": "^4.1.2", diff --git a/packages/mdctl-export-adapter-tree/package.json b/packages/mdctl-export-adapter-tree/package.json index d7c6bbbb..bfe0a999 100644 --- a/packages/mdctl-export-adapter-tree/package.json +++ b/packages/mdctl-export-adapter-tree/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-export-adapter-tree", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Export Tree Adapter", "repository": { "type": "git", @@ -25,9 +25,9 @@ "lint": "eslint *.js" }, "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", "globby": "^10.0.1", "jsonpath": "^1.1.1", "lodash": "^4.17.21", diff --git a/packages/mdctl-import-adapter/package.json b/packages/mdctl-import-adapter/package.json index c072c2ce..38f65807 100644 --- a/packages/mdctl-import-adapter/package.json +++ b/packages/mdctl-import-adapter/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-import-adapter", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Client Tools :: Import Adapter", "repository": { "type": "git", @@ -30,9 +30,9 @@ "lint": "eslint *.js" }, "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", "clone": "^2.1.2", "globby": "^9.1.0", "jsonpath": "^1.1.1", diff --git a/packages/mdctl-manifest/package.json b/packages/mdctl-manifest/package.json index 376d3443..118e6db3 100644 --- a/packages/mdctl-manifest/package.json +++ b/packages/mdctl-manifest/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-manifest", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Tools :: Manifest Manager", "repository": { "type": "git", @@ -25,10 +25,10 @@ "lint": "eslint *.js test" }, "dependencies": { - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-schemas": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-node-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-schemas": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-node-utils": "1.0.75-alpha.0", "lodash": "^4.17.21", "pluralize": "^8.0.0" }, diff --git a/packages/mdctl-node-utils/package.json b/packages/mdctl-node-utils/package.json index 60109c43..8cacc3e7 100644 --- a/packages/mdctl-node-utils/package.json +++ b/packages/mdctl-node-utils/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-node-utils", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Node Tools :: Utils", "repository": { "type": "git", @@ -25,9 +25,9 @@ "lint": "eslint *.js" }, "dependencies": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-keychain": "^1.0.74-alpha.0", - "@medable/mdctl-credentials-provider-pouchdb": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-keychain": "1.0.75-alpha.0", + "@medable/mdctl-credentials-provider-pouchdb": "^1.0.75-alpha.0", "create-hash": "^1.2.0", "js-yaml": "^3.13.1", "lodash": "^4.17.21" diff --git a/packages/mdctl-sandbox/package.json b/packages/mdctl-sandbox/package.json index 689eba40..59f484ae 100644 --- a/packages/mdctl-sandbox/package.json +++ b/packages/mdctl-sandbox/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-sandbox", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Tools :: Sandbox", "repository": { "type": "git", @@ -25,9 +25,9 @@ "lint": "eslint *.js" }, "dependencies": { - "@medable/mdctl-api": "^1.0.74-alpha.0", - "@medable/mdctl-core": "^1.0.74-alpha.0", - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-api": "1.0.75-alpha.0", + "@medable/mdctl-core": "1.0.75-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "lodash": "^4.17.21", "request": "^2.88.0" }, diff --git a/packages/mdctl-secrets/package.json b/packages/mdctl-secrets/package.json index b7466e2c..8be425e2 100644 --- a/packages/mdctl-secrets/package.json +++ b/packages/mdctl-secrets/package.json @@ -1,6 +1,6 @@ { "name": "@medable/mdctl-secrets", - "version": "1.0.74-alpha.0", + "version": "1.0.75-alpha.0", "description": "Medable Developer Tools :: Secrets", "repository": { "type": "git", @@ -25,7 +25,7 @@ "lint": "eslint *.js" }, "dependencies": { - "@medable/mdctl-core-utils": "^1.0.74-alpha.0", + "@medable/mdctl-core-utils": "1.0.75-alpha.0", "create-hmac": "^1.1.7", "jsonwebtoken": "^8.4.0" },