From 99c437f07b2eaa761d6b7b9587f8eb1277718bb3 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Wed, 16 Nov 2022 14:28:55 -0500 Subject: [PATCH 01/13] adding prettier and formatting code --- .eslintrc.json | 17 +- .prettierrc | 8 + package-lock.json | 2070 +++++++++++++++++++++++++++++----------- package.json | 14 +- src/Converter.js | 78 +- src/cli/cli.js | 4 +- src/cli/logger.js | 12 +- test/Converter.test.js | 14 +- test/helper.js | 5 +- 9 files changed, 1618 insertions(+), 604 deletions(-) create mode 100644 .prettierrc diff --git a/.eslintrc.json b/.eslintrc.json index ce42ca4..525fed9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -5,17 +5,20 @@ "es6": true, "jest": true }, - "extends": [ - "airbnb-base" - ], "globals": { "Atomics": "readonly", "SharedArrayBuffer": "readonly" }, - "parserOptions": { - "ecmaVersion": 2018 - }, - "rules": { + "extends": [ + "prettier" + ], + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "semi": ["error", "always"], + "quotes": ["error", "single", { "avoidEscape": true }], "class-methods-use-this": "off", "no-console": "off", "max-len": ["error", { "code": 200 }], diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..912f7bb --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "trailingComma": "none", + "arrowParens": "avoid", + "endOfLine": "auto", + "printWidth": 100, + "tabWidth": 2, + "singleQuote": true +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4bf3a29..200381b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,12 +19,13 @@ "devDependencies": { "@types/jest": "^26.0.14", "cross-env": "^7.0.0", - "eslint": "^6.6.0", - "eslint-config-airbnb-base": "^14.0.0", + "eslint": "^8.5.0", + "eslint-config-prettier": "^6.10.1", "eslint-plugin-import": "^2.18.2", "jest": "^26.6.3", "jest-when": "^2.7.0", "nock": "^11.7.0", + "prettier": "2.7.1", "rewire": "^5.0.0" } }, @@ -548,6 +549,80 @@ "kuler": "^2.0.0" } }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -766,33 +841,6 @@ "node": ">=8" } }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -1250,6 +1298,41 @@ "xmldoc": "^0.4.0" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -2231,18 +2314,6 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -2355,12 +2426,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -2803,85 +2868,75 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-airbnb-base": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "node_modules/eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" + "get-stdin": "^6.0.0" }, - "engines": { - "node": ">= 6" + "bin": { + "eslint-config-prettier-check": "bin/cli.js" }, "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1" + "eslint": ">=3.14.1" } }, "node_modules/eslint-import-resolver-node": { @@ -2984,118 +3039,293 @@ "dev": true }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=6" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" } }, "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "bin": { - "semver": "bin/semver" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/path-key": { + "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "shebang-regex": "^1.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/eslint/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "argparse": "^2.0.1" }, "bin": { - "which": "bin/which" + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=6.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/esprima": { @@ -3122,15 +3352,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3143,7 +3364,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -3152,15 +3373,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3492,6 +3704,15 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -3545,15 +3766,15 @@ } }, "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/fill-range": { @@ -3582,23 +3803,22 @@ } }, "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/fn.name": { @@ -3759,6 +3979,15 @@ "node": ">=8.0.0" } }, + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -3820,24 +4049,24 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -3846,12 +4075,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "devOptional": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -4064,9 +4311,9 @@ } }, "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "engines": { "node": ">= 4" @@ -4213,18 +4460,6 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4502,6 +4737,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -6673,6 +6917,12 @@ "node": ">=8" } }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6879,6 +7129,12 @@ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/logform": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", @@ -7398,20 +7654,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -7691,6 +7933,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -7806,6 +8063,26 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -7897,12 +8174,15 @@ } }, "node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { - "node": ">=6.5.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/remove-trailing-separator": { @@ -8026,6 +8306,16 @@ "node": ">=0.12" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rewire": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/rewire/-/rewire-5.0.0.tgz", @@ -8035,24 +8325,315 @@ "eslint": "^6.8.0" } }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "node_modules/rewire/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=6" } }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { + "node_modules/rewire/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/rewire/node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/rewire/node_modules/eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/rewire/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/rewire/node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/rewire/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rewire/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/rewire/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/rewire/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rewire/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rewire/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/rewire/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rewire/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rewire/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rewire/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rewire/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/rewire/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rewire/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rewire/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rewire/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/rewire/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { "node": "6.* || >= 7.*" } }, @@ -8065,6 +8646,29 @@ "node": ">=0.12.0" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -9046,18 +9650,6 @@ "node": ">=10" } }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string-to-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz", @@ -9108,18 +9700,6 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.trimend": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", @@ -9149,24 +9729,15 @@ } }, "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "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": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -9287,6 +9858,15 @@ "node": ">=6.0.0" } }, + "node_modules/table/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/table/node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -9316,6 +9896,18 @@ "node": ">=6" } }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -9964,18 +10556,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -10093,6 +10673,18 @@ "engines": { "node": ">=6" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -10487,6 +11079,63 @@ "kuler": "^2.0.0" } }, + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -10655,24 +11304,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "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" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11034,6 +11665,32 @@ "xmldoc": "^0.4.0" } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -11809,17 +12466,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "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" - } - } } }, "co": { @@ -11914,12 +12560,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -12261,123 +12901,210 @@ "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" }, "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "color-convert": "^2.0.1" } }, - "path-key": { + "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "isexe": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" } } } }, - "eslint-config-airbnb-base": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" + "get-stdin": "^6.0.0" } }, "eslint-import-resolver-node": { @@ -12469,39 +13196,55 @@ } }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + } } }, "esprima": { @@ -12516,14 +13259,6 @@ "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "esrecurse": { @@ -12533,20 +13268,12 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -12818,6 +13545,15 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -12861,12 +13597,12 @@ } }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "fill-range": { @@ -12889,20 +13625,19 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "fn.name": { @@ -13012,6 +13747,12 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -13052,21 +13793,29 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } } }, "graceful-fs": { @@ -13075,6 +13824,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "devOptional": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -13237,9 +13992,9 @@ } }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { @@ -13344,15 +14099,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "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" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13545,6 +14291,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -15196,6 +15948,12 @@ } } }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -15357,6 +16115,12 @@ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "logform": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", @@ -15775,17 +16539,6 @@ "object-keys": "^1.1.1" } }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -15984,6 +16737,12 @@ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, "pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -16077,6 +16836,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -16146,9 +16911,9 @@ } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "remove-trailing-separator": { @@ -16243,6 +17008,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rewire": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/rewire/-/rewire-5.0.0.tgz", @@ -16250,12 +17021,232 @@ "dev": true, "requires": { "eslint": "^6.8.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -16273,6 +17264,15 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -17072,17 +18072,6 @@ "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "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" - } - } } }, "string-to-stream": { @@ -17132,17 +18121,6 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "dependencies": { - "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" - } - } } }, "string.prototype.trimend": { @@ -17168,20 +18146,12 @@ } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "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": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - } + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -17268,6 +18238,12 @@ "string-width": "^3.0.0" }, "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -17290,6 +18266,15 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, @@ -17811,15 +18796,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "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" - } } } }, @@ -17917,6 +18893,12 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 626a744..02b6e09 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,11 @@ "scripts": { "start": "node src/cli/cli.js", "lint": "eslint \"./**/*.js\"", - "lint-fix": "eslint \"./**/*.js\" --fix", + "lint:fix": "eslint \"./**/*.js\" --fix", "test": "cross-env LOGGING=none jest", - "test:watch": "cross-env LOGGING=none jest --watchAll" + "test:watch": "cross-env LOGGING=none jest --watchAll", + "prettier": "prettier --check \"**/*.{js,ts}\"", + "prettier:fix": "prettier --write \"**/*.{js,ts}\"" }, "author": "", "license": "Apache-2.0", @@ -23,12 +25,14 @@ "devDependencies": { "@types/jest": "^26.0.14", "cross-env": "^7.0.0", - "eslint": "^6.6.0", - "eslint-config-airbnb-base": "^14.0.0", + "eslint": "^8.5.0", + "eslint-config-prettier": "^6.10.1", "eslint-plugin-import": "^2.18.2", "jest": "^26.6.3", "jest-when": "^2.7.0", "nock": "^11.7.0", - "rewire": "^5.0.0" + "rewire": "^5.0.0", + "prettier" :"2.7.1" + } } \ No newline at end of file diff --git a/src/Converter.js b/src/Converter.js index 3cee9d1..d51513b 100644 --- a/src/Converter.js +++ b/src/Converter.js @@ -15,10 +15,11 @@ class Converter { convertToFHIR(cqlLibraries = {}, elms = {}) { const fhirLibraries = {}; - Object.keys(cqlLibraries).forEach((key) => { + Object.keys(cqlLibraries).forEach(key => { const cql = cqlLibraries[key]; const elm = elms[key]; - fhirLibraries[`${elm.library.identifier.id}_${elm.library.identifier.version}`] = this.libraryTemplate(cql, elm); + fhirLibraries[`${elm.library.identifier.id}_${elm.library.identifier.version}`] = + this.libraryTemplate(cql, elm); }); return fhirLibraries; } @@ -42,65 +43,72 @@ class Converter { } libraryTemplate(cql, elm) { - if (!cql || !elm) { return false; } + if (!cql || !elm) { + return false; + } // const id = crypto.randomUUID(); - const relatedArtifacts = [{ - type: 'documentation', - url: 'https://github.com/cqframework/clinical_quality_language/wiki/FHIRHelpers', - document: { + const relatedArtifacts = [ + { + type: 'documentation', url: 'https://github.com/cqframework/clinical_quality_language/wiki/FHIRHelpers', + document: { + url: 'https://github.com/cqframework/clinical_quality_language/wiki/FHIRHelpers' + } }, - }, - { - type: 'depends-on', - resource: 'http://hl7.org/fhir/Library/FHIR-ModelInfo', - }, + { + type: 'depends-on', + resource: 'http://hl7.org/fhir/Library/FHIR-ModelInfo' + } ]; // look at the elm file for includes and pull in the // libraries that this one depends on if (elm.library.includes && elm.library.includes.def) { - elm.library.includes.def.forEach((include) => { - relatedArtifacts.push( - { - type: 'depends-on', - resource: include.path, - }, - ); + elm.library.includes.def.forEach(include => { + relatedArtifacts.push({ + type: 'depends-on', + resource: include.path + }); }); } return { resourceType: 'Library', id: elm.library.identifier.id, url: '', - identifier: [{ - use: 'official', - value: 'FHIRHelpers', - }], + identifier: [ + { + use: 'official', + value: 'FHIRHelpers' + } + ], version: elm.library.identifier.version, name: elm.library.identifier.id, title: elm.library.identifier.id, status: 'active', experimental: false, type: { - coding: [{ - code: 'logic-library', - }], + coding: [ + { + code: 'logic-library' + } + ] }, relatedArtifact: relatedArtifacts, - content: [{ - contentType: 'text/cql', - data: Buffer.from(cql.cql).toString('base64'), - }, - { - contentType: 'application/elm+json', - data: Buffer.from(JSON.stringify(elm)).toString('base64'), - }], + content: [ + { + contentType: 'text/cql', + data: Buffer.from(cql.cql).toString('base64') + }, + { + contentType: 'application/elm+json', + data: Buffer.from(JSON.stringify(elm)).toString('base64') + } + ] }; } } module.exports = { - Converter, + Converter }; diff --git a/src/cli/cli.js b/src/cli/cli.js index f1e54e8..d6d9560 100644 --- a/src/cli/cli.js +++ b/src/cli/cli.js @@ -25,7 +25,7 @@ function getCqlFiles() { const cqlFiles = []; if (fs.lstatSync(file).isDirectory()) { const files = fs.readdirSync(file); - files.forEach((f) => { + files.forEach(f => { const name = `${file}/${f}`; cqlFiles.push(fs.readFileSync(name)); }); @@ -50,7 +50,7 @@ async function runApp() { const libraries = await converter.convert(cqlFiles); // For each bundle in our extractedData, write it to our output directory - Object.keys(libraries).forEach((key) => { + Object.keys(libraries).forEach(key => { const lib = libraries[key]; const outputFile = path.join(output, `${lib.title}.json`); logger.info(`Writting resource to ${outputFile}`); diff --git a/src/cli/logger.js b/src/cli/logger.js index a193af2..825fe18 100644 --- a/src/cli/logger.js +++ b/src/cli/logger.js @@ -1,7 +1,9 @@ const { loggers, format, transports } = require('winston'); const LOGGER_NAME = 'cli'; -const logFormat = format.printf(({ level, message, timestamp }) => (`${timestamp} [${level}]: ${message}`)); +const logFormat = format.printf( + ({ level, message, timestamp }) => `${timestamp} [${level}]: ${message}` +); if (!loggers.has(LOGGER_NAME)) { loggers.add(LOGGER_NAME, { @@ -10,13 +12,13 @@ if (!loggers.has(LOGGER_NAME)) { format.colorize(), format.timestamp({ format: 'HH:mm:ss.SS' }), format.align(), - logFormat, + logFormat ), transports: [ new transports.Console({ - silent: process.env.LOGGING === 'none', - }), - ], + silent: process.env.LOGGING === 'none' + }) + ] }); } diff --git a/test/Converter.test.js b/test/Converter.test.js index 3f36972..4dbb1c5 100644 --- a/test/Converter.test.js +++ b/test/Converter.test.js @@ -21,21 +21,27 @@ describe('Converter', () => { test('Should be able to convert cql to FHIR library', async () => { // setup mocked out requests const testHeader = 'multipart/form-data;boundary=Boundary_1'; - axios.post.mockImplementation(() => Promise.resolve({ headers: { 'content-type': testHeader }, data: getTestResponse() })); + axios.post.mockImplementation(() => + Promise.resolve({ headers: { 'content-type': testHeader }, data: getTestResponse() }) + ); const converter = new Converter('http://localhost'); const cqlData = getCqlFiles(`${__dirname}/fixtures/cql`); const fhirLibraries = await converter.convert(cqlData); - Object.keys(testELM).forEach((key) => { + Object.keys(testELM).forEach(key => { const elm = testELM[key]; const lib = fhirLibraries[`${elm.library.identifier.id}_${elm.library.identifier.version}`]; expect(lib).toBeDefined(); expect(fhirpath.evaluate(lib, 'Library.id')[0]).toEqual(elm.library.identifier.id); expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual(elm.library.identifier.version); expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual(elm.library.identifier.id); - expect(fhirpath.evaluate(lib, "Library.content.where(contentType='text/cql').data")[0]).toBeDefined(); - expect(fhirpath.evaluate(lib, "Library.content.where(contentType='application/elm+json').data")[0]).toBeDefined(); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='text/cql').data")[0] + ).toBeDefined(); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='application/elm+json').data")[0] + ).toBeDefined(); }); }); }); diff --git a/test/helper.js b/test/helper.js index bdb2aa2..5157d1c 100644 --- a/test/helper.js +++ b/test/helper.js @@ -5,7 +5,7 @@ function getCqlFiles(input) { const cqlFiles = []; if (fs.lstatSync(input).isDirectory()) { const files = fs.readdirSync(input); - files.forEach((f) => { + files.forEach(f => { const name = `${input}/${f}`; cqlFiles.push(fs.readFileSync(name)); }); @@ -32,5 +32,6 @@ ${JSON.stringify(testELM.lib_2)} } module.exports = { - getCqlFiles, getTestResponse, + getCqlFiles, + getTestResponse }; From 65dffa806f1546434a0f8c03bced4ebe3b0b1ed0 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Wed, 16 Nov 2022 14:30:18 -0500 Subject: [PATCH 02/13] adding ci workflow --- .github/workflows/ci-workflow.yml | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/ci-workflow.yml diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml new file mode 100644 index 0000000..09dda75 --- /dev/null +++ b/.github/workflows/ci-workflow.yml @@ -0,0 +1,36 @@ +name: Lint and Test + +on: [push, pull_request] + +jobs: + lint: + name: Check tsc, lint, and prettier + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: '12.x' + - run: npm install + - run: npm run lint + - run: npm run prettier + env: + CI: true + test: + name: Test on node ${{ matrix.node-version }} and ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + node-version: [10, 12] + + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm test + env: + CI: true \ No newline at end of file From ec53d637c467099088e9d92e3d97405675f37e49 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Thu, 17 Nov 2022 09:20:12 -0500 Subject: [PATCH 03/13] scoping to node 12 --- .github/workflows/ci-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index 09dda75..a0ea4b9 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -22,7 +22,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [10, 12] + node-version: [12] steps: - uses: actions/checkout@v1 From 7f0e21cd873b6b832016bf3e1370b108edd6d95b Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Thu, 17 Nov 2022 09:26:45 -0500 Subject: [PATCH 04/13] scoping to node 16 --- .github/workflows/ci-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index a0ea4b9..0e15da0 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -22,7 +22,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [12] + node-version: [16] steps: - uses: actions/checkout@v1 From 874fb5f6e0c91254dc4404db0e8748ab9b6dac03 Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Wed, 22 Feb 2023 11:44:07 -0500 Subject: [PATCH 05/13] [REMS-318] CQL/ELM FHIR Library Creation Cleanup --- README.md | 5 ++- src/Converter.js | 89 +++++++++++++++++++++++++++++++++++++----------- src/cli/cli.js | 71 ++++++++++++++++++++++++++++++-------- 3 files changed, 129 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 0521272..5bb7395 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,10 @@ Usage: cli [options] Options: -f --file Path to cql file to translate -o, --output Output directory for generated resources (default: "output") - -u --url Specify url to cql-translation-service: (default: "http://localhost:3000") + -u, --url Specify url to cql-translation-service: (default: "http://localhost:3000") + -i, --id Specify the id of the output fhir library (default: cql library name or id of specified library) + -l, --lib Specify the library to embed the CQL/ELM + -d, --depends Path to the CQL dependency files -h, --help display help for command diff --git a/src/Converter.js b/src/Converter.js index d51513b..4ef28a2 100644 --- a/src/Converter.js +++ b/src/Converter.js @@ -5,25 +5,48 @@ class Converter { this.serviceUrl = serviceUrl; } - async convert(cql) { + async convert(cql, id) { const client = new Client(this.serviceUrl); const cqlLibraries = this.convertArrayToObject(cql); const elms = await client.convertCQL(cqlLibraries); - const fhirLibraries = this.convertToFHIR(cqlLibraries, elms); - return fhirLibraries; - } - convertToFHIR(cqlLibraries = {}, elms = {}) { + // error case with too few cqlLibraries + if (Object.keys(cqlLibraries).length < 1) { + console.warn("too feww CQL Libraries: " + String(Object.keys(cqlLibraries).length)); + return {}; + } + + const key = Object.keys(cqlLibraries)[0]; + const fhirLibraries = {}; - Object.keys(cqlLibraries).forEach(key => { - const cql = cqlLibraries[key]; - const elm = elms[key]; - fhirLibraries[`${elm.library.identifier.id}_${elm.library.identifier.version}`] = - this.libraryTemplate(cql, elm); - }); + const elm = elms[key]; + fhirLibraries[`${elm.library.identifier.id}_${elm.library.identifier.version}`] = + this.libraryTemplate(cqlLibraries[key], elm, id); + return fhirLibraries; } + async convertWithLib(cql, lib, id) { + const client = new Client(this.serviceUrl); + const cqlLibraries = this.convertArrayToObject(cql); + const elms = await client.convertCQL(cqlLibraries); + + // error case with too few cqlLibraries + if (Object.keys(cqlLibraries).length < 1) { + console.warn("too feww CQL Libraries: " + String(Object.keys(cqlLibraries).length)); + return {}; + } + + const key = Object.keys(cqlLibraries)[0]; + + // parse the provided FHIR Library + var fhirLibrary = JSON.parse(lib); + + // update the CQL/ELM in the provided FHIR Library + return this.updateFHIRLibrary(fhirLibrary, cqlLibraries[key], elms[key], id); + } + + // Treat all sumbissions as multiple cql files to make life easier convertArrayToObject(_cql) { let cql = _cql; @@ -42,10 +65,36 @@ class Converter { return cql; } - libraryTemplate(cql, elm) { + updateFHIRLibrary(library, cql, elm, id) { + // if an id is supplied, set it + if (id) { + library.id = id; + } + + library.content = [ + { + contentType: 'text/cql', + data: Buffer.from(cql.cql).toString('base64') + }, + { + contentType: 'application/elm+json', + data: Buffer.from(JSON.stringify(elm)).toString('base64') + } + ]; + + return library; + } + + libraryTemplate(cql, elm, id) { if (!cql || !elm) { return false; } + + // if an id is supplied, set it, otherwise use the cql library id + var libraryId = id; + if (!id) { + libraryId = elm.library.identifier.id; + } // const id = crypto.randomUUID(); const relatedArtifacts = [ @@ -68,20 +117,20 @@ class Converter { elm.library.includes.def.forEach(include => { relatedArtifacts.push({ type: 'depends-on', - resource: include.path + resource: 'Library/' + include.path }); }); } return { resourceType: 'Library', - id: elm.library.identifier.id, + id: libraryId, url: '', - identifier: [ - { - use: 'official', - value: 'FHIRHelpers' - } - ], + //identifier: [ + // { + // use: 'official', + // value: 'FHIRHelpers' + // } + //], version: elm.library.identifier.version, name: elm.library.identifier.id, title: elm.library.identifier.id, diff --git a/src/cli/cli.js b/src/cli/cli.js index d6d9560..27c1e75 100644 --- a/src/cli/cli.js +++ b/src/cli/cli.js @@ -10,11 +10,14 @@ const defaultPathToOutput = 'output'; program .usage('[options]') .option('-f --file ', 'Path to cql file to translate') - .option('-o, --output ', 'Output directory for generated resources', defaultPathToOutput) + .option('-o --output ', 'Output directory for generated resources', defaultPathToOutput) .option('-u --url ', 'Specify url to cql-translation-service:', defaultServiceUrl) + .option('-i --id ', 'Specify the id of the output fhir library') + .option('-l --lib ', 'Specify the library to embed the CQL/ELM') + .option('-d --depends ', 'Path to the CQL dependency files.') .parse(process.argv); -const { file, output, url } = program; +const { file, output, url, id, lib, depends } = program; function getCqlFiles() { try { @@ -22,19 +25,43 @@ function getCqlFiles() { } catch (e) { throw new Error(`CQL file(s) ${file} do not exist`); } + // assume single file const cqlFiles = []; if (fs.lstatSync(file).isDirectory()) { - const files = fs.readdirSync(file); - files.forEach(f => { - const name = `${file}/${f}`; - cqlFiles.push(fs.readFileSync(name)); - }); + // return error + throw new Error('Specify single CQL file, not a folder'); } else { cqlFiles.push(fs.readFileSync(file)); + + if (depends) { + try { + fs.lstatSync(depends); + } catch (e) { + throw new Error('CQL helper file(s) ${depends} do not exist'); + } + if (fs.lstatSync(depends).isDirectory()) { + const files = fs.readdirSync(depends); + files.forEach(f => { + const name = `${depends}/${f}`; + cqlFiles.push(fs.readFileSync(name)); + }); + } else { + throw new Error('Must specify a helper folder not single file'); + } + } } return cqlFiles; } +function getLibraryFile() { + try { + fs.lstatSync(lib); + } catch (e) { + throw new Error('Library file ${lib} does not exist'); + } + return fs.readFileSync(lib, {encoding:'utf8', flag:'r'}); +} + async function runApp() { try { const cqlFiles = getCqlFiles(); @@ -48,14 +75,28 @@ async function runApp() { fs.mkdirSync(output); } - const libraries = await converter.convert(cqlFiles); - // For each bundle in our extractedData, write it to our output directory - Object.keys(libraries).forEach(key => { - const lib = libraries[key]; - const outputFile = path.join(output, `${lib.title}.json`); - logger.info(`Writting resource to ${outputFile}`); - fs.writeFileSync(outputFile, JSON.stringify(lib), 'utf8'); - }); + if (lib) { + var libraryFile = getLibraryFile() + const fhirLibrary = await converter.convertWithLib(cqlFiles, libraryFile, id); + + // strip the folder off of the file path + const outputFile = path.join(output, path.parse(lib).base); + + // save the file + logger.info(`Writing resource to ${outputFile}`); + fs.writeFileSync(outputFile, JSON.stringify(fhirLibrary, null, 2), 'utf8'); + + } else { + const fhirLibraries = await converter.convert(cqlFiles, id); + // For each bundle in our extractedData, write it to our output directory + Object.keys(fhirLibraries).forEach(key => { + const lib = fhirLibraries[key]; + const outputFile = path.join(output, `Library-${lib.title}.json`); + logger.info(`Writing resource to ${outputFile}`); + fs.writeFileSync(outputFile, JSON.stringify(lib, null, 2), 'utf8'); + }); + } + } catch (e) { logger.error(e.message); logger.error(e.stack); From 3371fdfba67a5c7151547cf89cf2756ad7350a16 Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Wed, 22 Feb 2023 11:48:38 -0500 Subject: [PATCH 06/13] Fix linting issues --- src/Converter.js | 23 +++++++++++------------ src/cli/cli.js | 8 +++----- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/Converter.js b/src/Converter.js index 4ef28a2..30795b1 100644 --- a/src/Converter.js +++ b/src/Converter.js @@ -12,7 +12,7 @@ class Converter { // error case with too few cqlLibraries if (Object.keys(cqlLibraries).length < 1) { - console.warn("too feww CQL Libraries: " + String(Object.keys(cqlLibraries).length)); + console.warn('too feww CQL Libraries: ' + String(Object.keys(cqlLibraries).length)); return {}; } @@ -33,7 +33,7 @@ class Converter { // error case with too few cqlLibraries if (Object.keys(cqlLibraries).length < 1) { - console.warn("too feww CQL Libraries: " + String(Object.keys(cqlLibraries).length)); + console.warn('too feww CQL Libraries: ' + String(Object.keys(cqlLibraries).length)); return {}; } @@ -46,7 +46,6 @@ class Converter { return this.updateFHIRLibrary(fhirLibrary, cqlLibraries[key], elms[key], id); } - // Treat all sumbissions as multiple cql files to make life easier convertArrayToObject(_cql) { let cql = _cql; @@ -72,15 +71,15 @@ class Converter { } library.content = [ - { - contentType: 'text/cql', - data: Buffer.from(cql.cql).toString('base64') - }, - { - contentType: 'application/elm+json', - data: Buffer.from(JSON.stringify(elm)).toString('base64') - } - ]; + { + contentType: 'text/cql', + data: Buffer.from(cql.cql).toString('base64') + }, + { + contentType: 'application/elm+json', + data: Buffer.from(JSON.stringify(elm)).toString('base64') + } + ]; return library; } diff --git a/src/cli/cli.js b/src/cli/cli.js index 27c1e75..23a3020 100644 --- a/src/cli/cli.js +++ b/src/cli/cli.js @@ -59,7 +59,7 @@ function getLibraryFile() { } catch (e) { throw new Error('Library file ${lib} does not exist'); } - return fs.readFileSync(lib, {encoding:'utf8', flag:'r'}); + return fs.readFileSync(lib, { encoding: 'utf8', flag: 'r' }); } async function runApp() { @@ -76,7 +76,7 @@ async function runApp() { } if (lib) { - var libraryFile = getLibraryFile() + var libraryFile = getLibraryFile(); const fhirLibrary = await converter.convertWithLib(cqlFiles, libraryFile, id); // strip the folder off of the file path @@ -85,8 +85,7 @@ async function runApp() { // save the file logger.info(`Writing resource to ${outputFile}`); fs.writeFileSync(outputFile, JSON.stringify(fhirLibrary, null, 2), 'utf8'); - - } else { + } else { const fhirLibraries = await converter.convert(cqlFiles, id); // For each bundle in our extractedData, write it to our output directory Object.keys(fhirLibraries).forEach(key => { @@ -96,7 +95,6 @@ async function runApp() { fs.writeFileSync(outputFile, JSON.stringify(lib, null, 2), 'utf8'); }); } - } catch (e) { logger.error(e.message); logger.error(e.stack); From 3fe93331aaaad698eb0c0d35aac2f2db22630a78 Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Wed, 22 Feb 2023 17:26:31 -0500 Subject: [PATCH 07/13] Fix final lint error. --- src/cli/cli.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cli/cli.js b/src/cli/cli.js index 23a3020..c02278e 100644 --- a/src/cli/cli.js +++ b/src/cli/cli.js @@ -17,7 +17,9 @@ program .option('-d --depends ', 'Path to the CQL dependency files.') .parse(process.argv); -const { file, output, url, id, lib, depends } = program; +const { + file, output, url, id, lib, depends + } = program; function getCqlFiles() { try { From f7ece931322cd9f9ea95aa288087ac856c57b04f Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Wed, 22 Feb 2023 17:29:14 -0500 Subject: [PATCH 08/13] Fix README formatting --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5bb7395..82f6767 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ The cql parameter to the convert method may be of one of the following types: }}` ### Command line +``` Usage: cli [options] Options: @@ -43,7 +44,7 @@ Options: -l, --lib Specify the library to embed the CQL/ELM -d, --depends Path to the CQL dependency files -h, --help display help for command - +``` Example usage: From 1fe2a7bbca66f4b99aaa2f7d7bb9d482f590950e Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Mon, 27 Feb 2023 11:30:53 -0500 Subject: [PATCH 09/13] Update unit tests to handle new features. --- test/Converter.test.js | 123 +++++++++++++++--- .../Library-ChlamydiaScreening_Common.json | 40 ++++++ test/helper.js | 10 ++ 3 files changed, 156 insertions(+), 17 deletions(-) create mode 100644 test/fixtures/fhir/Library-ChlamydiaScreening_Common.json diff --git a/test/Converter.test.js b/test/Converter.test.js index 4dbb1c5..a4f31dd 100644 --- a/test/Converter.test.js +++ b/test/Converter.test.js @@ -1,7 +1,7 @@ const axios = require('axios'); const fhirpath = require('fhirpath'); const { Converter } = require('../src/Converter'); -const { getCqlFiles, getTestResponse } = require('./helper'); +const { getCqlFiles, getLibraryFile, getTestResponse } = require('./helper'); const testELM = require('./fixtures/elm/elms.json'); jest.mock('axios'); @@ -25,23 +25,112 @@ describe('Converter', () => { Promise.resolve({ headers: { 'content-type': testHeader }, data: getTestResponse() }) ); + const id = undefined; const converter = new Converter('http://localhost'); const cqlData = getCqlFiles(`${__dirname}/fixtures/cql`); - const fhirLibraries = await converter.convert(cqlData); - - Object.keys(testELM).forEach(key => { - const elm = testELM[key]; - const lib = fhirLibraries[`${elm.library.identifier.id}_${elm.library.identifier.version}`]; - expect(lib).toBeDefined(); - expect(fhirpath.evaluate(lib, 'Library.id')[0]).toEqual(elm.library.identifier.id); - expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual(elm.library.identifier.version); - expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual(elm.library.identifier.id); - expect( - fhirpath.evaluate(lib, "Library.content.where(contentType='text/cql').data")[0] - ).toBeDefined(); - expect( - fhirpath.evaluate(lib, "Library.content.where(contentType='application/elm+json').data")[0] - ).toBeDefined(); - }); + const fhirLibraries = await converter.convert(cqlData, id); + + // only the first converted CQL is returned + expect(Object.keys(fhirLibraries).length).toEqual(1); + + const key = Object.keys(testELM)[0]; + const elm = testELM[key]; + const lib = fhirLibraries[`${elm.library.identifier.id}_${elm.library.identifier.version}`]; + expect(lib).toBeDefined(); + expect(fhirpath.evaluate(lib, 'Library.id')[0]).toEqual(elm.library.identifier.id); + expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual(elm.library.identifier.version); + expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual(elm.library.identifier.id); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='text/cql').data")[0] + ).toBeDefined(); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='application/elm+json').data")[0] + ).toBeDefined(); + }); + + test('Should be able to convert cql to FHIR library with provided id', async () => { + // setup mocked out requests + const testHeader = 'multipart/form-data;boundary=Boundary_1'; + axios.post.mockImplementation(() => + Promise.resolve({ headers: { 'content-type': testHeader }, data: getTestResponse() }) + ); + + const id = "test_id"; + const converter = new Converter('http://localhost'); + const cqlData = getCqlFiles(`${__dirname}/fixtures/cql`); + const fhirLibraries = await converter.convert(cqlData, id); + + // only the first converted CQL is returned + expect(Object.keys(fhirLibraries).length).toEqual(1); + + const key = Object.keys(testELM)[0]; + const elm = testELM[key]; + const lib = fhirLibraries[`${elm.library.identifier.id}_${elm.library.identifier.version}`]; + expect(lib).toBeDefined(); + expect(fhirpath.evaluate(lib, 'Library.id')[0]).toEqual(id); + expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual(elm.library.identifier.version); + expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual(elm.library.identifier.id); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='text/cql').data")[0] + ).toBeDefined(); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='application/elm+json').data")[0] + ).toBeDefined(); + }) + + test('Should be able to convert cql to FHIR library with provided library to insert cql', async () => { + // setup mocked out requests + const testHeader = 'multipart/form-data;boundary=Boundary_1'; + axios.post.mockImplementation(() => + Promise.resolve({ headers: { 'content-type': testHeader }, data: getTestResponse() }) + ); + + const id = undefined; + const converter = new Converter('http://localhost'); + const cqlData = getCqlFiles(`${__dirname}/fixtures/cql`); + const libFileName = "Library-ChlamydiaScreening_Common.json"; + const fhirLibFile = getLibraryFile(`${__dirname}/fixtures/fhir/${libFileName}`); + const fhirLibrary = JSON.parse(fhirLibFile); + const lib = await converter.convertWithLib(cqlData, fhirLibFile, id); + + const key = Object.keys(testELM)[0]; + expect(lib).toBeDefined(); + expect(fhirpath.evaluate(lib, 'Library.id')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.id')[0]); + expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.version')[0]); + expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.title')[0]); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='text/cql').data")[0] + ).toBeDefined(); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='application/elm+json').data")[0] + ).toBeDefined(); + }); + + test('Should be able to convert cql to FHIR library with provided library to insert cql with provided id', async () => { + // setup mocked out requests + const testHeader = 'multipart/form-data;boundary=Boundary_1'; + axios.post.mockImplementation(() => + Promise.resolve({ headers: { 'content-type': testHeader }, data: getTestResponse() }) + ); + + const id = "test_id"; + const converter = new Converter('http://localhost'); + const cqlData = getCqlFiles(`${__dirname}/fixtures/cql`); + const libFileName = "Library-ChlamydiaScreening_Common.json"; + const fhirLibFile = getLibraryFile(`${__dirname}/fixtures/fhir/${libFileName}`); + const fhirLibrary = JSON.parse(fhirLibFile); + const lib = await converter.convertWithLib(cqlData, fhirLibFile, id); + + const key = Object.keys(testELM)[0]; + expect(lib).toBeDefined(); + expect(fhirpath.evaluate(lib, 'Library.id')[0]).toEqual(id); + expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.version')[0]); + expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.title')[0]); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='text/cql').data")[0] + ).toBeDefined(); + expect( + fhirpath.evaluate(lib, "Library.content.where(contentType='application/elm+json').data")[0] + ).toBeDefined(); }); }); diff --git a/test/fixtures/fhir/Library-ChlamydiaScreening_Common.json b/test/fixtures/fhir/Library-ChlamydiaScreening_Common.json new file mode 100644 index 0000000..feec0b2 --- /dev/null +++ b/test/fixtures/fhir/Library-ChlamydiaScreening_Common.json @@ -0,0 +1,40 @@ +{ + "resourceType": "Library", + "id": "Chlamydia-Screening-Common", + "url": "", + "version": "2", + "name": "ChlamydiaScreening_Common", + "title": "ChlamydiaScreening_Common", + "status": "active", + "experimental": false, + "type": { + "coding": [ + { + "code": "logic-library" + } + ] + }, + "relatedArtifact": [ + { + "type": "documentation", + "url": "https://github.com/cqframework/clinical_quality_language/wiki/FHIRHelpers", + "document": { + "url": "https://github.com/cqframework/clinical_quality_language/wiki/FHIRHelpers" + } + }, + { + "type": "depends-on", + "resource": "http://hl7.org/fhir/Library/FHIR-ModelInfo" + } + ], + "content": [ + { + "contentType": "text/cql", + "data": "bGlicmFyeSBDaGxhbXlkaWFTY3JlZW5pbmdfQ29tbW9uIHZlcnNpb24gJzInCgp1c2luZyBRVUlDSwoKdmFsdWVzZXQgIkZlbWFsZSBBZG1pbmlzdHJhdGl2ZSBTZXgiOiAnMi4xNi44NDAuMS4xMTM4ODMuMy41NjAuMTAwLjInCnZhbHVlc2V0ICJPdGhlciBGZW1hbGUgUmVwcm9kdWN0aXZlIENvbmRpdGlvbnMiOiAnMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMTEuMTIuMTAwNicKdmFsdWVzZXQgIkdlbml0YWwgSGVycGVzIjogJzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTEwLjEyLjEwNDknCnZhbHVlc2V0ICJHZW5vY29jY2FsIEluZmVjdGlvbnMgYW5kIFZlbmVyZWFsIERpc2Vhc2VzIjogJzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTEyLjEyLjEwMDEnCnZhbHVlc2V0ICJJbmZsYW1tYXRvcnkgRGlzZWFzZXMgb2YgRmVtYWxlIFJlcHJvZHVjdGl2ZSBPcmdhbnMiOiAnMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMTIuMTIuMTAwNCcKdmFsdWVzZXQgIkNobGFteWRpYSI6ICcyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExMi4xMi4xMDAzJwp2YWx1ZXNldCAiSElWIjogJzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTIwLjEyLjEwMDMnCnZhbHVlc2V0ICJTeXBoaWxpcyI6ICcyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExMi4xMi4xMDAyJwp2YWx1ZXNldCAiQ29tcGxpY2F0aW9ucyBvZiBQcmVnbmFuY3ksIENoaWxkYmlydGggYW5kIHRoZSBQdWVycGVyaXVtIjogJzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTExLjEyLjEwMTInCnZhbHVlc2V0ICJQcmVnbmFuY3kgVGVzdCI6ICcyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExMS4xMi4xMDExJwp2YWx1ZXNldCAiUGFwIFRlc3QiOiAnMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDguMTIuMTAxNycKdmFsdWVzZXQgIkxhYiBUZXN0cyBEdXJpbmcgUHJlZ25hbmN5IjogJzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTExLjEyLjEwMDcnCnZhbHVlc2V0ICJMYWIgVGVzdHMgZm9yIFNleHVhbGx5IFRyYW5zbWl0dGVkIEluZmVjdGlvbnMiOiAnMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMTAuMTIuMTA1MScKdmFsdWVzZXQgIkNobGFteWRpYSBTY3JlZW5pbmciOiAnMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMTAuMTIuMTA1MicKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lICJDb25kaXRpb25zIEluZGljYXRpbmcgU2V4dWFsIEFjdGl2aXR5IjoKCVsiQ29uZGl0aW9uIjogIk90aGVyIEZlbWFsZSBSZXByb2R1Y3RpdmUgQ29uZGl0aW9ucyJdCgl1bmlvbiBbIkNvbmRpdGlvbiI6ICJHZW5pdGFsIEhlcnBlcyJdCiAgICB1bmlvbiBbIkNvbmRpdGlvbiI6ICJHZW5vY29jY2FsIEluZmVjdGlvbnMgYW5kIFZlbmVyZWFsIERpc2Vhc2VzIl0KICAgIHVuaW9uIFsiQ29uZGl0aW9uIjogIkluZmxhbW1hdG9yeSBEaXNlYXNlcyBvZiBGZW1hbGUgUmVwcm9kdWN0aXZlIE9yZ2FucyJdCiAgICB1bmlvbiBbIkNvbmRpdGlvbiI6ICJDaGxhbXlkaWEiXSAKICAgIHVuaW9uIFsiQ29uZGl0aW9uIjogIkhJViJdCiAgICB1bmlvbiBbIkNvbmRpdGlvbiI6ICJTeXBoaWxpcyJdCiAgICB1bmlvbiBbIkNvbmRpdGlvbiI6ICJDb21wbGljYXRpb25zIG9mIFByZWduYW5jeSwgQ2hpbGRiaXJ0aCBhbmQgdGhlIFB1ZXJwZXJpdW0iXQoKZGVmaW5lICJMYWJvcmF0b3J5IFRlc3RzIEluZGljYXRpbmcgU2V4dWFsIEFjdGl2aXR5IjoKICAgIFsiRGlhZ25vc3RpY09yZGVyIjogIlByZWduYW5jeSBUZXN0Il0KICAgIHVuaW9uIFsiRGlhZ25vc3RpY09yZGVyIjogIlBhcCBUZXN0Il0KICAgIHVuaW9uIFsiRGlhZ25vc3RpY09yZGVyIjogIkxhYiBUZXN0cyBEdXJpbmcgUHJlZ25hbmN5Il0KCXVuaW9uIFsiRGlhZ25vc3RpY09yZGVyIjogIkxhYiBUZXN0cyBmb3IgU2V4dWFsbHkgVHJhbnNtaXR0ZWQgSW5mZWN0aW9ucyJdCgpkZWZpbmUgIlRlc3RzIFBlcmZvcm1lZCBGb3IgQ2hsYW15ZGlhIjoKCVsiRGlhZ25vc3RpY1JlcG9ydCI6ICJDaGxhbXlkaWEgU2NyZWVuaW5nIl0KCmRlZmluZSAiUmVzdWx0cyBQcmVzZW50IEZvciBDaGxhbXlkaWEgU2NyZWVuaW5nIjoKICAgIFsiRGlhZ25vc3RpY1JlcG9ydCI6ICJDaGxhbXlkaWEgU2NyZWVuaW5nIl0gUiB3aGVyZSBSLiJyZXN1bHQiIGlzIG5vdCBudWxsCg==" + }, + { + "contentType": "application/elm+json", + "data": "eyJsaWJyYXJ5Ijp7ImFubm90YXRpb24iOlt7InRyYW5zbGF0b3JPcHRpb25zIjoiIiwidHlwZSI6IkNxbFRvRWxtSW5mbyJ9LHsibGlicmFyeUlkIjoiQ2hsYW15ZGlhU2NyZWVuaW5nX0NvbW1vbiIsImxpYnJhcnlWZXJzaW9uIjoiMiIsInN0YXJ0TGluZSI6MzMsInN0YXJ0Q2hhciI6NSwiZW5kTGluZSI6MzMsImVuZENoYXIiOjQxLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgY29kZSBwYXRoIGl0ZW0uY29kZSBmb3IgdGhlIHR5cGUgb2YgdGhlIHJldHJpZXZlIFFVSUNLLkRpYWdub3N0aWNPcmRlci4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IkNobGFteWRpYVNjcmVlbmluZ19Db21tb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjIiLCJzdGFydExpbmUiOjMzLCJzdGFydENoYXIiOjUsImVuZExpbmUiOjMzLCJlbmRDaGFyIjo0MSwibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJDaGxhbXlkaWFTY3JlZW5pbmdfQ29tbW9uIiwibGlicmFyeVZlcnNpb24iOiIyIiwic3RhcnRMaW5lIjozNCwic3RhcnRDaGFyIjoxMSwiZW5kTGluZSI6MzQsImVuZENoYXIiOjQxLCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgY29kZSBwYXRoIGl0ZW0uY29kZSBmb3IgdGhlIHR5cGUgb2YgdGhlIHJldHJpZXZlIFFVSUNLLkRpYWdub3N0aWNPcmRlci4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IkNobGFteWRpYVNjcmVlbmluZ19Db21tb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjIiLCJzdGFydExpbmUiOjM0LCJzdGFydENoYXIiOjExLCJlbmRMaW5lIjozNCwiZW5kQ2hhciI6NDEsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9LHsibGlicmFyeUlkIjoiQ2hsYW15ZGlhU2NyZWVuaW5nX0NvbW1vbiIsImxpYnJhcnlWZXJzaW9uIjoiMiIsInN0YXJ0TGluZSI6MzUsInN0YXJ0Q2hhciI6MTEsImVuZExpbmUiOjM1LCJlbmRDaGFyIjo1OSwibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGNvZGUgcGF0aCBpdGVtLmNvZGUgZm9yIHRoZSB0eXBlIG9mIHRoZSByZXRyaWV2ZSBRVUlDSy5EaWFnbm9zdGljT3JkZXIuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJDaGxhbXlkaWFTY3JlZW5pbmdfQ29tbW9uIiwibGlicmFyeVZlcnNpb24iOiIyIiwic3RhcnRMaW5lIjozNSwic3RhcnRDaGFyIjoxMSwiZW5kTGluZSI6MzUsImVuZENoYXIiOjU5LCJtZXNzYWdlIjoiQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iLCJlcnJvclR5cGUiOiJzZW1hbnRpYyIsImVycm9yU2V2ZXJpdHkiOiJ3YXJuaW5nIiwidHlwZSI6IkNxbFRvRWxtRXJyb3IifSx7ImxpYnJhcnlJZCI6IkNobGFteWRpYVNjcmVlbmluZ19Db21tb24iLCJsaWJyYXJ5VmVyc2lvbiI6IjIiLCJzdGFydExpbmUiOjM2LCJzdGFydENoYXIiOjgsImVuZExpbmUiOjM2LCJlbmRDaGFyIjo3NSwibWVzc2FnZSI6IkNvdWxkIG5vdCByZXNvbHZlIGNvZGUgcGF0aCBpdGVtLmNvZGUgZm9yIHRoZSB0eXBlIG9mIHRoZSByZXRyaWV2ZSBRVUlDSy5EaWFnbm9zdGljT3JkZXIuIiwiZXJyb3JUeXBlIjoic2VtYW50aWMiLCJlcnJvclNldmVyaXR5Ijoid2FybmluZyIsInR5cGUiOiJDcWxUb0VsbUVycm9yIn0seyJsaWJyYXJ5SWQiOiJDaGxhbXlkaWFTY3JlZW5pbmdfQ29tbW9uIiwibGlicmFyeVZlcnNpb24iOiIyIiwic3RhcnRMaW5lIjozNiwic3RhcnRDaGFyIjo4LCJlbmRMaW5lIjozNiwiZW5kQ2hhciI6NzUsIm1lc3NhZ2UiOiJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIsImVycm9yVHlwZSI6InNlbWFudGljIiwiZXJyb3JTZXZlcml0eSI6Indhcm5pbmciLCJ0eXBlIjoiQ3FsVG9FbG1FcnJvciJ9XSwiaWRlbnRpZmllciI6eyJpZCI6IkNobGFteWRpYVNjcmVlbmluZ19Db21tb24iLCJ2ZXJzaW9uIjoiMiJ9LCJzY2hlbWFJZGVudGlmaWVyIjp7ImlkIjoidXJuOmhsNy1vcmc6ZWxtIiwidmVyc2lvbiI6InIxIn0sInVzaW5ncyI6eyJkZWYiOlt7ImxvY2FsSWRlbnRpZmllciI6IlN5c3RlbSIsInVyaSI6InVybjpobDctb3JnOmVsbS10eXBlczpyMSJ9LHsibG9jYWxJZGVudGlmaWVyIjoiUVVJQ0siLCJ1cmkiOiJodHRwOi8vaGw3Lm9yZy9maGlyIn1dfSwidmFsdWVTZXRzIjp7ImRlZiI6W3sibmFtZSI6IkZlbWFsZSBBZG1pbmlzdHJhdGl2ZSBTZXgiLCJpZCI6IjIuMTYuODQwLjEuMTEzODgzLjMuNTYwLjEwMC4yIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJPdGhlciBGZW1hbGUgUmVwcm9kdWN0aXZlIENvbmRpdGlvbnMiLCJpZCI6IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTExLjEyLjEwMDYiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9LHsibmFtZSI6Ikdlbml0YWwgSGVycGVzIiwiaWQiOiIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExMC4xMi4xMDQ5IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJHZW5vY29jY2FsIEluZmVjdGlvbnMgYW5kIFZlbmVyZWFsIERpc2Vhc2VzIiwiaWQiOiIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExMi4xMi4xMDAxIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJJbmZsYW1tYXRvcnkgRGlzZWFzZXMgb2YgRmVtYWxlIFJlcHJvZHVjdGl2ZSBPcmdhbnMiLCJpZCI6IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTEyLjEyLjEwMDQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9LHsibmFtZSI6IkNobGFteWRpYSIsImlkIjoiMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMTIuMTIuMTAwMyIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiSElWIiwiaWQiOiIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEyMC4xMi4xMDAzIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJTeXBoaWxpcyIsImlkIjoiMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMTIuMTIuMTAwMiIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiQ29tcGxpY2F0aW9ucyBvZiBQcmVnbmFuY3ksIENoaWxkYmlydGggYW5kIHRoZSBQdWVycGVyaXVtIiwiaWQiOiIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExMS4xMi4xMDEyIiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJQcmVnbmFuY3kgVGVzdCIsImlkIjoiMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMTEuMTIuMTAxMSIsImFjY2Vzc0xldmVsIjoiUHVibGljIn0seyJuYW1lIjoiUGFwIFRlc3QiLCJpZCI6IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTA4LjEyLjEwMTciLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9LHsibmFtZSI6IkxhYiBUZXN0cyBEdXJpbmcgUHJlZ25hbmN5IiwiaWQiOiIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExMS4xMi4xMDA3IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMifSx7Im5hbWUiOiJMYWIgVGVzdHMgZm9yIFNleHVhbGx5IFRyYW5zbWl0dGVkIEluZmVjdGlvbnMiLCJpZCI6IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTEwLjEyLjEwNTEiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9LHsibmFtZSI6IkNobGFteWRpYSBTY3JlZW5pbmciLCJpZCI6IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTEwLjEyLjEwNTIiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyJ9XX0sImNvbnRleHRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQifV19LCJzdGF0ZW1lbnRzIjp7ImRlZiI6W3sibmFtZSI6IlBhdGllbnQiLCJjb250ZXh0IjoiUGF0aWVudCIsImV4cHJlc3Npb24iOnsidHlwZSI6IlNpbmdsZXRvbkZyb20iLCJvcGVyYW5kIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9UGF0aWVudCIsInRlbXBsYXRlSWQiOiJwYXRpZW50LXFpY29yZS1xaWNvcmUtcGF0aWVudCIsInR5cGUiOiJSZXRyaWV2ZSJ9fX0seyJuYW1lIjoiQ29uZGl0aW9ucyBJbmRpY2F0aW5nIFNleHVhbCBBY3Rpdml0eSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwidGVtcGxhdGVJZCI6ImNvbmRpdGlvbi1xaWNvcmUtcWljb3JlLWNvbmRpdGlvbiIsImNvZGVQcm9wZXJ0eSI6ImNvZGUiLCJjb2RlQ29tcGFyYXRvciI6ImluIiwidHlwZSI6IlJldHJpZXZlIiwiY29kZXMiOnsibmFtZSI6Ik90aGVyIEZlbWFsZSBSZXByb2R1Y3RpdmUgQ29uZGl0aW9ucyIsInByZXNlcnZlIjp0cnVlLCJ0eXBlIjoiVmFsdWVTZXRSZWYifX0seyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsInRlbXBsYXRlSWQiOiJjb25kaXRpb24tcWljb3JlLXFpY29yZS1jb25kaXRpb24iLCJjb2RlUHJvcGVydHkiOiJjb2RlIiwiY29kZUNvbXBhcmF0b3IiOiJpbiIsInR5cGUiOiJSZXRyaWV2ZSIsImNvZGVzIjp7Im5hbWUiOiJHZW5pdGFsIEhlcnBlcyIsInByZXNlcnZlIjp0cnVlLCJ0eXBlIjoiVmFsdWVTZXRSZWYifX1dfSx7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9Q29uZGl0aW9uIiwidGVtcGxhdGVJZCI6ImNvbmRpdGlvbi1xaWNvcmUtcWljb3JlLWNvbmRpdGlvbiIsImNvZGVQcm9wZXJ0eSI6ImNvZGUiLCJjb2RlQ29tcGFyYXRvciI6ImluIiwidHlwZSI6IlJldHJpZXZlIiwiY29kZXMiOnsibmFtZSI6Ikdlbm9jb2NjYWwgSW5mZWN0aW9ucyBhbmQgVmVuZXJlYWwgRGlzZWFzZXMiLCJwcmVzZXJ2ZSI6dHJ1ZSwidHlwZSI6IlZhbHVlU2V0UmVmIn19LHsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0ZW1wbGF0ZUlkIjoiY29uZGl0aW9uLXFpY29yZS1xaWNvcmUtY29uZGl0aW9uIiwiY29kZVByb3BlcnR5IjoiY29kZSIsImNvZGVDb21wYXJhdG9yIjoiaW4iLCJ0eXBlIjoiUmV0cmlldmUiLCJjb2RlcyI6eyJuYW1lIjoiSW5mbGFtbWF0b3J5IERpc2Vhc2VzIG9mIEZlbWFsZSBSZXByb2R1Y3RpdmUgT3JnYW5zIiwicHJlc2VydmUiOnRydWUsInR5cGUiOiJWYWx1ZVNldFJlZiJ9fV19XX0seyJ0eXBlIjoiVW5pb24iLCJvcGVyYW5kIjpbeyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsInRlbXBsYXRlSWQiOiJjb25kaXRpb24tcWljb3JlLXFpY29yZS1jb25kaXRpb24iLCJjb2RlUHJvcGVydHkiOiJjb2RlIiwiY29kZUNvbXBhcmF0b3IiOiJpbiIsInR5cGUiOiJSZXRyaWV2ZSIsImNvZGVzIjp7Im5hbWUiOiJDaGxhbXlkaWEiLCJwcmVzZXJ2ZSI6dHJ1ZSwidHlwZSI6IlZhbHVlU2V0UmVmIn19LHsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1Db25kaXRpb24iLCJ0ZW1wbGF0ZUlkIjoiY29uZGl0aW9uLXFpY29yZS1xaWNvcmUtY29uZGl0aW9uIiwiY29kZVByb3BlcnR5IjoiY29kZSIsImNvZGVDb21wYXJhdG9yIjoiaW4iLCJ0eXBlIjoiUmV0cmlldmUiLCJjb2RlcyI6eyJuYW1lIjoiSElWIiwicHJlc2VydmUiOnRydWUsInR5cGUiOiJWYWx1ZVNldFJlZiJ9fV19XX0seyJ0eXBlIjoiVW5pb24iLCJvcGVyYW5kIjpbeyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsInRlbXBsYXRlSWQiOiJjb25kaXRpb24tcWljb3JlLXFpY29yZS1jb25kaXRpb24iLCJjb2RlUHJvcGVydHkiOiJjb2RlIiwiY29kZUNvbXBhcmF0b3IiOiJpbiIsInR5cGUiOiJSZXRyaWV2ZSIsImNvZGVzIjp7Im5hbWUiOiJTeXBoaWxpcyIsInByZXNlcnZlIjp0cnVlLCJ0eXBlIjoiVmFsdWVTZXRSZWYifX0seyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfUNvbmRpdGlvbiIsInRlbXBsYXRlSWQiOiJjb25kaXRpb24tcWljb3JlLXFpY29yZS1jb25kaXRpb24iLCJjb2RlUHJvcGVydHkiOiJjb2RlIiwiY29kZUNvbXBhcmF0b3IiOiJpbiIsInR5cGUiOiJSZXRyaWV2ZSIsImNvZGVzIjp7Im5hbWUiOiJDb21wbGljYXRpb25zIG9mIFByZWduYW5jeSwgQ2hpbGRiaXJ0aCBhbmQgdGhlIFB1ZXJwZXJpdW0iLCJwcmVzZXJ2ZSI6dHJ1ZSwidHlwZSI6IlZhbHVlU2V0UmVmIn19XX1dfX0seyJuYW1lIjoiTGFib3JhdG9yeSBUZXN0cyBJbmRpY2F0aW5nIFNleHVhbCBBY3Rpdml0eSIsImNvbnRleHQiOiJQYXRpZW50IiwiYWNjZXNzTGV2ZWwiOiJQdWJsaWMiLCJleHByZXNzaW9uIjp7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGlhZ25vc3RpY09yZGVyIiwidGVtcGxhdGVJZCI6ImRpYWdub3N0aWNvcmRlci1xaWNvcmUtcWljb3JlLWRpYWdub3N0aWNvcmRlciIsImNvZGVQcm9wZXJ0eSI6Iml0ZW0uY29kZSIsImNvZGVDb21wYXJhdG9yIjoiaW4iLCJ0eXBlIjoiUmV0cmlldmUiLCJjb2RlcyI6eyJuYW1lIjoiUHJlZ25hbmN5IFRlc3QiLCJwcmVzZXJ2ZSI6dHJ1ZSwidHlwZSI6IlZhbHVlU2V0UmVmIn19LHsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EaWFnbm9zdGljT3JkZXIiLCJ0ZW1wbGF0ZUlkIjoiZGlhZ25vc3RpY29yZGVyLXFpY29yZS1xaWNvcmUtZGlhZ25vc3RpY29yZGVyIiwiY29kZVByb3BlcnR5IjoiaXRlbS5jb2RlIiwiY29kZUNvbXBhcmF0b3IiOiJpbiIsInR5cGUiOiJSZXRyaWV2ZSIsImNvZGVzIjp7Im5hbWUiOiJQYXAgVGVzdCIsInByZXNlcnZlIjp0cnVlLCJ0eXBlIjoiVmFsdWVTZXRSZWYifX1dfSx7InR5cGUiOiJVbmlvbiIsIm9wZXJhbmQiOlt7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGlhZ25vc3RpY09yZGVyIiwidGVtcGxhdGVJZCI6ImRpYWdub3N0aWNvcmRlci1xaWNvcmUtcWljb3JlLWRpYWdub3N0aWNvcmRlciIsImNvZGVQcm9wZXJ0eSI6Iml0ZW0uY29kZSIsImNvZGVDb21wYXJhdG9yIjoiaW4iLCJ0eXBlIjoiUmV0cmlldmUiLCJjb2RlcyI6eyJuYW1lIjoiTGFiIFRlc3RzIER1cmluZyBQcmVnbmFuY3kiLCJwcmVzZXJ2ZSI6dHJ1ZSwidHlwZSI6IlZhbHVlU2V0UmVmIn19LHsiZGF0YVR5cGUiOiJ7aHR0cDovL2hsNy5vcmcvZmhpcn1EaWFnbm9zdGljT3JkZXIiLCJ0ZW1wbGF0ZUlkIjoiZGlhZ25vc3RpY29yZGVyLXFpY29yZS1xaWNvcmUtZGlhZ25vc3RpY29yZGVyIiwiY29kZVByb3BlcnR5IjoiaXRlbS5jb2RlIiwiY29kZUNvbXBhcmF0b3IiOiJpbiIsInR5cGUiOiJSZXRyaWV2ZSIsImNvZGVzIjp7Im5hbWUiOiJMYWIgVGVzdHMgZm9yIFNleHVhbGx5IFRyYW5zbWl0dGVkIEluZmVjdGlvbnMiLCJwcmVzZXJ2ZSI6dHJ1ZSwidHlwZSI6IlZhbHVlU2V0UmVmIn19XX1dfX0seyJuYW1lIjoiVGVzdHMgUGVyZm9ybWVkIEZvciBDaGxhbXlkaWEiLCJjb250ZXh0IjoiUGF0aWVudCIsImFjY2Vzc0xldmVsIjoiUHVibGljIiwiZXhwcmVzc2lvbiI6eyJkYXRhVHlwZSI6IntodHRwOi8vaGw3Lm9yZy9maGlyfURpYWdub3N0aWNSZXBvcnQiLCJ0ZW1wbGF0ZUlkIjoiZGlhZ25vc3RpY3JlcG9ydC1xaWNvcmUtcWljb3JlLWRpYWdub3N0aWNyZXBvcnQiLCJjb2RlUHJvcGVydHkiOiJuYW1lIiwiY29kZUNvbXBhcmF0b3IiOiJpbiIsInR5cGUiOiJSZXRyaWV2ZSIsImNvZGVzIjp7Im5hbWUiOiJDaGxhbXlkaWEgU2NyZWVuaW5nIiwicHJlc2VydmUiOnRydWUsInR5cGUiOiJWYWx1ZVNldFJlZiJ9fX0seyJuYW1lIjoiUmVzdWx0cyBQcmVzZW50IEZvciBDaGxhbXlkaWEgU2NyZWVuaW5nIiwiY29udGV4dCI6IlBhdGllbnQiLCJhY2Nlc3NMZXZlbCI6IlB1YmxpYyIsImV4cHJlc3Npb24iOnsidHlwZSI6IlF1ZXJ5Iiwic291cmNlIjpbeyJhbGlhcyI6IlIiLCJleHByZXNzaW9uIjp7ImRhdGFUeXBlIjoie2h0dHA6Ly9obDcub3JnL2ZoaXJ9RGlhZ25vc3RpY1JlcG9ydCIsInRlbXBsYXRlSWQiOiJkaWFnbm9zdGljcmVwb3J0LXFpY29yZS1xaWNvcmUtZGlhZ25vc3RpY3JlcG9ydCIsImNvZGVQcm9wZXJ0eSI6Im5hbWUiLCJjb2RlQ29tcGFyYXRvciI6ImluIiwidHlwZSI6IlJldHJpZXZlIiwiY29kZXMiOnsibmFtZSI6IkNobGFteWRpYSBTY3JlZW5pbmciLCJwcmVzZXJ2ZSI6dHJ1ZSwidHlwZSI6IlZhbHVlU2V0UmVmIn19fV0sInJlbGF0aW9uc2hpcCI6W10sIndoZXJlIjp7InR5cGUiOiJOb3QiLCJvcGVyYW5kIjp7InR5cGUiOiJJc051bGwiLCJvcGVyYW5kIjp7InBhdGgiOiJyZXN1bHQiLCJzY29wZSI6IlIiLCJ0eXBlIjoiUHJvcGVydHkifX19fX1dfX19" + } + ] +} \ No newline at end of file diff --git a/test/helper.js b/test/helper.js index 5157d1c..8af9d58 100644 --- a/test/helper.js +++ b/test/helper.js @@ -15,6 +15,15 @@ function getCqlFiles(input) { return cqlFiles; } +function getLibraryFile(lib) { + try { + fs.lstatSync(lib); + } catch (e) { + throw new Error('Library file ${lib} does not exist'); + } + return fs.readFileSync(lib, { encoding: 'utf8', flag: 'r' }); +} + function getTestResponse() { return `--Boundary_1 content-type: application/elm+json @@ -33,5 +42,6 @@ ${JSON.stringify(testELM.lib_2)} module.exports = { getCqlFiles, + getLibraryFile, getTestResponse }; From e22c5fbc5778b94a74d1168fda14fb5aa0c743de Mon Sep 17 00:00:00 2001 From: Patrick LaRocque Date: Mon, 27 Feb 2023 11:35:42 -0500 Subject: [PATCH 10/13] Fix linting errors in unit tests. --- test/Converter.test.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/test/Converter.test.js b/test/Converter.test.js index a4f31dd..f72a035 100644 --- a/test/Converter.test.js +++ b/test/Converter.test.js @@ -55,7 +55,7 @@ describe('Converter', () => { Promise.resolve({ headers: { 'content-type': testHeader }, data: getTestResponse() }) ); - const id = "test_id"; + const id = 'test_id'; const converter = new Converter('http://localhost'); const cqlData = getCqlFiles(`${__dirname}/fixtures/cql`); const fhirLibraries = await converter.convert(cqlData, id); @@ -76,7 +76,7 @@ describe('Converter', () => { expect( fhirpath.evaluate(lib, "Library.content.where(contentType='application/elm+json').data")[0] ).toBeDefined(); - }) + }); test('Should be able to convert cql to FHIR library with provided library to insert cql', async () => { // setup mocked out requests @@ -88,16 +88,22 @@ describe('Converter', () => { const id = undefined; const converter = new Converter('http://localhost'); const cqlData = getCqlFiles(`${__dirname}/fixtures/cql`); - const libFileName = "Library-ChlamydiaScreening_Common.json"; + const libFileName = 'Library-ChlamydiaScreening_Common.json'; const fhirLibFile = getLibraryFile(`${__dirname}/fixtures/fhir/${libFileName}`); const fhirLibrary = JSON.parse(fhirLibFile); const lib = await converter.convertWithLib(cqlData, fhirLibFile, id); const key = Object.keys(testELM)[0]; expect(lib).toBeDefined(); - expect(fhirpath.evaluate(lib, 'Library.id')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.id')[0]); - expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.version')[0]); - expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.title')[0]); + expect(fhirpath.evaluate(lib, 'Library.id')[0]).toEqual( + fhirpath.evaluate(fhirLibrary, 'Library.id')[0] + ); + expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual( + fhirpath.evaluate(fhirLibrary, 'Library.version')[0] + ); + expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual( + fhirpath.evaluate(fhirLibrary, 'Library.title')[0] + ); expect( fhirpath.evaluate(lib, "Library.content.where(contentType='text/cql').data")[0] ).toBeDefined(); @@ -113,10 +119,10 @@ describe('Converter', () => { Promise.resolve({ headers: { 'content-type': testHeader }, data: getTestResponse() }) ); - const id = "test_id"; + const id = 'test_id'; const converter = new Converter('http://localhost'); const cqlData = getCqlFiles(`${__dirname}/fixtures/cql`); - const libFileName = "Library-ChlamydiaScreening_Common.json"; + const libFileName = 'Library-ChlamydiaScreening_Common.json'; const fhirLibFile = getLibraryFile(`${__dirname}/fixtures/fhir/${libFileName}`); const fhirLibrary = JSON.parse(fhirLibFile); const lib = await converter.convertWithLib(cqlData, fhirLibFile, id); @@ -124,8 +130,12 @@ describe('Converter', () => { const key = Object.keys(testELM)[0]; expect(lib).toBeDefined(); expect(fhirpath.evaluate(lib, 'Library.id')[0]).toEqual(id); - expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.version')[0]); - expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual(fhirpath.evaluate(fhirLibrary, 'Library.title')[0]); + expect(fhirpath.evaluate(lib, 'Library.version')[0]).toEqual( + fhirpath.evaluate(fhirLibrary, 'Library.version')[0] + ); + expect(fhirpath.evaluate(lib, 'Library.title')[0]).toEqual( + fhirpath.evaluate(fhirLibrary, 'Library.title')[0] + ); expect( fhirpath.evaluate(lib, "Library.content.where(contentType='text/cql').data")[0] ).toBeDefined(); From 66c637904a0b92ec228be17345267d3d587ef4dc Mon Sep 17 00:00:00 2001 From: rdingwell Date: Thu, 2 Mar 2023 16:50:32 -0500 Subject: [PATCH 11/13] Update ci-workflow.yml updating to deal with linting/prettier issues. Also brings the node version into line with the rest of the tests --- .github/workflows/ci-workflow.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index 0e15da0..92d31a1 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: - node-version: '12.x' + node-version: '16.x' - run: npm install - run: npm run lint - run: npm run prettier @@ -33,4 +33,4 @@ jobs: - run: npm install - run: npm test env: - CI: true \ No newline at end of file + CI: true From 168b84cedfaba46f35cc83bb09efed7e1f5ff127 Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Thu, 2 Mar 2023 17:06:53 -0500 Subject: [PATCH 12/13] fixing linting/prettier errors --- .eslintrc.json | 3 ++- src/cli/cli.js | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 525fed9..c20b4c0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,6 +9,7 @@ "Atomics": "readonly", "SharedArrayBuffer": "readonly" }, + "plugins": ["prettier"], "extends": [ "prettier" ], @@ -23,7 +24,7 @@ "no-console": "off", "max-len": ["error", { "code": 200 }], "object-curly-newline": ["error", { - "ObjectPattern": { "minProperties": 5 } + "ObjectPattern": { "minProperties": 10 } }], "no-underscore-dangle": ["error", { "allow": ["__get__", "__set__"] }] } diff --git a/src/cli/cli.js b/src/cli/cli.js index c02278e..23a3020 100644 --- a/src/cli/cli.js +++ b/src/cli/cli.js @@ -17,9 +17,7 @@ program .option('-d --depends ', 'Path to the CQL dependency files.') .parse(process.argv); -const { - file, output, url, id, lib, depends - } = program; +const { file, output, url, id, lib, depends } = program; function getCqlFiles() { try { From 77b3d32f8975583d8ac6aab159177df67bea492e Mon Sep 17 00:00:00 2001 From: Robert A Dingwell Date: Thu, 2 Mar 2023 17:09:01 -0500 Subject: [PATCH 13/13] fixing configuration issue where plugin was not available ' --- .eslintrc.json | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index c20b4c0..5349c15 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,7 +9,6 @@ "Atomics": "readonly", "SharedArrayBuffer": "readonly" }, - "plugins": ["prettier"], "extends": [ "prettier" ],