From ec35c443c9b0f9e7a971b9765aa9c4acb59ff514 Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Fri, 27 Sep 2024 11:39:21 +0200 Subject: [PATCH 01/11] Added functionality to convert to and from FSH to an dfrom JSON --- package-lock.json | 1940 ++++++++++++++++++++++++++++++++++++++++++--- package.json | 52 +- src/extension.ts | 92 +++ 3 files changed, 1983 insertions(+), 101 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6977698..a2a3cdd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,8 @@ "dependencies": { "antlr4": "~4.8.0", "axios": "^1.7.7", + "fsh-sushi": "3.11.1", + "gofsh": "2.3.1", "semver": "^7.6.3", "yaml": "^2.5.0" }, @@ -53,6 +55,24 @@ "node": ">=0.10.0" } }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -389,6 +409,11 @@ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, "node_modules/@types/vscode": { "version": "1.92.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.92.0.tgz", @@ -628,6 +653,11 @@ "node": ">=16" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -653,7 +683,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, "dependencies": { "debug": "^4.3.4" }, @@ -699,7 +728,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -744,11 +772,24 @@ "node": "*" } }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/axios": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", @@ -763,8 +804,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -824,7 +864,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -872,6 +911,11 @@ "ieee754": "^1.2.1" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -881,6 +925,15 @@ "node": ">=6" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -926,10 +979,9 @@ } }, "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -945,7 +997,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -954,7 +1005,6 @@ "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" }, @@ -1001,6 +1051,25 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", @@ -1039,11 +1108,19 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -1056,9 +1133,39 @@ "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, "license": "MIT" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1070,11 +1177,18 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "engines": { + "node": ">=18" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/core-util-is": { "version": "1.0.2", @@ -1100,7 +1214,6 @@ "version": "4.3.6", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1155,11 +1268,42 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, "engines": { "node": ">=0.3.1" } }, + "node_modules/diff2html": { + "version": "3.4.48", + "resolved": "https://registry.npmjs.org/diff2html/-/diff2html-3.4.48.tgz", + "integrity": "sha512-1lzNSg0G0VPKZPTyi4knzV2nAWTXBy/QaWCKzDto6iEIlcuOJEG0li4bElJfpHNz+pBqPu4AcC1i9ZCo9KMUOg==", + "dependencies": { + "diff": "5.1.0", + "hogan.js": "3.0.2" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "highlight.js": "11.9.0" + } + }, + "node_modules/diff2html/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -1172,6 +1316,11 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -1390,8 +1539,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.3.2", @@ -1422,6 +1570,11 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + }, "node_modules/fastq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", @@ -1431,6 +1584,117 @@ "reusify": "^1.0.4" } }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/fhir": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/fhir/-/fhir-4.12.0.tgz", + "integrity": "sha512-N+eLuUbYjvjX5NlZPhE08OVrsJJhulQKkVWnW1M3HpNvreWC1yVvoF8ptmGzlvtDZRCrNrBArfLklphFO2L0oA==", + "bundleDependencies": [ + "lodash", + "path", + "q", + "xml-js" + ], + "dependencies": { + "lodash": "^4.17.19", + "path": "^0.12.7", + "q": "^1.4.1", + "randomatic": "^3.1.0", + "xml-js": "^1.6.8" + } + }, + "node_modules/fhir-package-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fhir-package-loader/-/fhir-package-loader-1.0.0.tgz", + "integrity": "sha512-x3VY3RY1wkJv8Fd7dA7fY3aw+6Vg7qeCU0pci7wUaEhnJ84k7Lnca6dfH00l36uzH1N5EwVX51iKuuwsS6RdlA==", + "dependencies": { + "axios": "^1.6.7", + "chalk": "^4.1.2", + "commander": "^11.1.0", + "fs-extra": "^11.2.0", + "https-proxy-agent": "^7.0.2", + "lodash": "^4.17.21", + "semver": "^7.5.4", + "tar": "^6.2.0", + "temp": "^0.9.1", + "winston": "^3.11.0" + }, + "bin": { + "fpl": "dist/app.js" + } + }, + "node_modules/fhir-package-loader/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/fhir/node_modules/inherits": { + "version": "2.0.3", + "inBundle": true, + "license": "ISC" + }, + "node_modules/fhir/node_modules/lodash": { + "version": "4.17.21", + "inBundle": true, + "license": "MIT" + }, + "node_modules/fhir/node_modules/path": { + "version": "0.12.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/fhir/node_modules/process": { + "version": "0.11.10", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/fhir/node_modules/q": { + "version": "1.5.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/fhir/node_modules/sax": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/fhir/node_modules/util": { + "version": "0.10.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/fhir/node_modules/xml-js": { + "version": "1.6.8", + "inBundle": true, + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -1475,7 +1739,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, "bin": { "flat": "cli.js" } @@ -1499,6 +1762,11 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -1565,7 +1833,6 @@ "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -1575,11 +1842,32 @@ "node": ">=14.14" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { "version": "2.3.2", @@ -1595,6 +1883,74 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/fsh-sushi": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.11.1.tgz", + "integrity": "sha512-rQtA/mDktM8uH2aekRKLCLOnpGNWylygFo5PqM5Q5iMu8/O7DvQ/QOwbbsVr7ZGE5FPwz9jnX1QzXRZoqZK5MA==", + "dependencies": { + "ajv": "^8.17.1", + "antlr4": "^4.13.2", + "axios": "^1.7.5", + "chalk": "^4.1.2", + "commander": "^12.1.0", + "fhir": "^4.12.0", + "fhir-package-loader": "^1.0.0", + "fs-extra": "^11.2.0", + "html-minifier-terser": "5.1.1", + "https-proxy-agent": "^7.0.5", + "ini": "^4.1.3", + "junk": "^3.1.0", + "lodash": "^4.17.21", + "readline-sync": "^1.4.10", + "sanitize-filename": "^1.6.3", + "sax": "^1.4.1", + "temp": "^0.9.4", + "text-table": "^0.2.0", + "title-case": "^3.0.3", + "valid-url": "^1.0.9", + "winston": "^3.14.2", + "yaml": "^1.10.2" + }, + "bin": { + "sushi": "dist/app.js" + } + }, + "node_modules/fsh-sushi/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fsh-sushi/node_modules/antlr4": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", + "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", + "engines": { + "node": ">=16" + } + }, + "node_modules/fsh-sushi/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/fsh-sushi/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1687,11 +2043,84 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gofsh": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gofsh/-/gofsh-2.3.1.tgz", + "integrity": "sha512-MLYMbMMhyJeS1BurQSoLHyAC1Sg/zgP6MqHWW+DZVn68/FBpo7PN6VlTQgoUn/7g1qtOfEtQ/nsqujKbOL1YKQ==", + "dependencies": { + "antlr4": "~4.13.1-patch-1", + "chalk": "^4.1.0", + "commander": "^6.0.0", + "diff": "^5.0.0", + "diff2html": "^3.1.18", + "fhir": "^4.10.0", + "fhir-package-loader": "^1.0.0", + "flat": "^5.0.2", + "fs-extra": "^9.0.1", + "fsh-sushi": "^3.9.0", + "ini": "^1.3.8", + "lodash": "^4.17.21", + "readline-sync": "^1.4.10", + "sanitize-filename": "^1.6.3", + "semver": "^7.5.4", + "temp": "^0.9.1", + "text-table": "^0.2.0", + "toposort": "^2.0.2", + "valid-url": "^1.0.9", + "winston": "^3.3.3", + "yaml": "^1.10.0" + }, + "bin": { + "gofsh": "dist/app.js" + } + }, + "node_modules/gofsh/node_modules/antlr4": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", + "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", + "engines": { + "node": ">=16" + } + }, + "node_modules/gofsh/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/gofsh/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gofsh/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/gofsh/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "node_modules/graphemer": { "version": "1.4.0", @@ -1703,11 +2132,59 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, "bin": { "he": "bin/he" } }, + "node_modules/highlight.js": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hogan.js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", + "integrity": "sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==", + "dependencies": { + "mkdirp": "0.3.0", + "nopt": "1.0.10" + }, + "bin": { + "hulk": "bin/hulk" + } + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -1725,7 +2202,6 @@ "version": "7.0.5", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "dev": true, "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -1798,7 +2274,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1807,8 +2282,20 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -1891,6 +2378,17 @@ "node": ">=8" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -1974,7 +2472,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -1994,6 +2491,14 @@ "setimmediate": "^1.0.5" } }, + "node_modules/junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -2003,6 +2508,19 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2040,6 +2558,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2062,7 +2585,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loupe": { + "node_modules/logform": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", + "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", @@ -2071,6 +2610,14 @@ "get-func-name": "^2.0.1" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", @@ -2081,6 +2628,11 @@ "node": "20 || >=22" } }, + "node_modules/math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2137,7 +2689,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2145,6 +2696,14 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -2155,6 +2714,38 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "engines": { + "node": "*" + } + }, "node_modules/mocha": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", @@ -2264,8 +2855,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -2273,6 +2863,15 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/nock": { "version": "13.5.5", "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.5.tgz", @@ -2287,6 +2886,20 @@ "node": ">= 10.13" } }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2300,11 +2913,18 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "dependencies": { "wrappy": "1" } }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -2493,6 +3113,15 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2505,6 +3134,15 @@ "node": ">=6" } }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2514,6 +3152,14 @@ "node": ">=8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -2634,6 +3280,27 @@ } ] }, + "node_modules/randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dependencies": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -2670,6 +3337,22 @@ "node": ">=8.10.0" } }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2679,6 +3362,14 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2714,6 +3405,38 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -2740,8 +3463,28 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/semver": { "version": "7.6.3", @@ -2796,6 +3539,39 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, "node_modules/stdin-discarder": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", @@ -2815,7 +3591,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -2888,11 +3663,102 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "node_modules/title-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", + "dependencies": { + "tslib": "^2.0.3" + } }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -2906,6 +3772,27 @@ "node": ">=8.0" } }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, "node_modules/ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -2918,6 +3805,11 @@ "typescript": ">=4.2.0" } }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2964,7 +3856,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, "engines": { "node": ">= 10.0.0" } @@ -2978,11 +3869,20 @@ "punycode": "^2.1.0" } }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" }, "node_modules/which": { "version": "2.0.2", @@ -2999,6 +3899,66 @@ "node": ">= 8" } }, + "node_modules/winston": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", + "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.6.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", + "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", + "dependencies": { + "logform": "^2.6.1", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", @@ -3044,8 +4004,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/y18n": { "version": "5.0.8", @@ -3056,6 +4015,11 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/yaml": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", @@ -3129,6 +4093,21 @@ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true }, + "@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + }, + "@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -3371,6 +4350,11 @@ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, + "@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, "@types/vscode": { "version": "1.92.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.92.0.tgz", @@ -3506,6 +4490,11 @@ "semver": "^7.6.2" } }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -3523,7 +4512,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, "requires": { "debug": "^4.3.4" } @@ -3556,7 +4544,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -3588,11 +4575,21 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, + "async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, "axios": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", @@ -3606,8 +4603,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -3649,7 +4645,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3680,12 +4675,26 @@ "ieee754": "^1.2.1" } }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -3715,10 +4724,9 @@ "requires": {} }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3727,14 +4735,12 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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" } @@ -3766,8 +4772,21 @@ "readdirp": "~3.6.0" } }, - "cli-cursor": { - "version": "4.0.0", + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "requires": { + "source-map": "~0.6.0" + } + }, + "cli-cursor": { + "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, @@ -3792,11 +4811,34 @@ "wrap-ansi": "^7.0.0" } }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } + } + }, "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" } @@ -3804,8 +4846,25 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } }, "combined-stream": { "version": "1.0.8", @@ -3815,11 +4874,15 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "core-util-is": { "version": "1.0.2", @@ -3842,7 +4905,6 @@ "version": "4.3.6", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -3876,8 +4938,33 @@ "diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==" + }, + "diff2html": { + "version": "3.4.48", + "resolved": "https://registry.npmjs.org/diff2html/-/diff2html-3.4.48.tgz", + "integrity": "sha512-1lzNSg0G0VPKZPTyi4knzV2nAWTXBy/QaWCKzDto6iEIlcuOJEG0li4bElJfpHNz+pBqPu4AcC1i9ZCo9KMUOg==", + "requires": { + "diff": "5.1.0", + "highlight.js": "11.9.0", + "hogan.js": "3.0.2" + }, + "dependencies": { + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" + } + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } }, "eastasianwidth": { "version": "0.2.0", @@ -3891,6 +4978,11 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4037,8 +5129,7 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { "version": "3.3.2", @@ -4065,6 +5156,11 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + }, "fastq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", @@ -4074,6 +5170,91 @@ "reusify": "^1.0.4" } }, + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "fhir": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/fhir/-/fhir-4.12.0.tgz", + "integrity": "sha512-N+eLuUbYjvjX5NlZPhE08OVrsJJhulQKkVWnW1M3HpNvreWC1yVvoF8ptmGzlvtDZRCrNrBArfLklphFO2L0oA==", + "requires": { + "lodash": "^4.17.19", + "path": "^0.12.7", + "q": "^1.4.1", + "randomatic": "^3.1.0", + "xml-js": "^1.6.8" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "lodash": { + "version": "4.17.21", + "bundled": true + }, + "path": { + "version": "0.12.7", + "bundled": true, + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "process": { + "version": "0.11.10", + "bundled": true + }, + "q": { + "version": "1.5.1", + "bundled": true + }, + "sax": { + "version": "1.2.4", + "bundled": true + }, + "util": { + "version": "0.10.4", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "xml-js": { + "version": "1.6.8", + "bundled": true, + "requires": { + "sax": "^1.2.4" + } + } + } + }, + "fhir-package-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fhir-package-loader/-/fhir-package-loader-1.0.0.tgz", + "integrity": "sha512-x3VY3RY1wkJv8Fd7dA7fY3aw+6Vg7qeCU0pci7wUaEhnJ84k7Lnca6dfH00l36uzH1N5EwVX51iKuuwsS6RdlA==", + "requires": { + "axios": "^1.6.7", + "chalk": "^4.1.2", + "commander": "^11.1.0", + "fs-extra": "^11.2.0", + "https-proxy-agent": "^7.0.2", + "lodash": "^4.17.21", + "semver": "^7.5.4", + "tar": "^6.2.0", + "temp": "^0.9.1", + "winston": "^3.11.0" + }, + "dependencies": { + "commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==" + } + } + }, "file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -4105,8 +5286,7 @@ "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" }, "flat-cache": { "version": "4.0.1", @@ -4124,6 +5304,11 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -4161,18 +5346,34 @@ "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", @@ -4181,6 +5382,63 @@ "dev": true, "optional": true }, + "fsh-sushi": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.11.1.tgz", + "integrity": "sha512-rQtA/mDktM8uH2aekRKLCLOnpGNWylygFo5PqM5Q5iMu8/O7DvQ/QOwbbsVr7ZGE5FPwz9jnX1QzXRZoqZK5MA==", + "requires": { + "ajv": "^8.17.1", + "antlr4": "^4.13.2", + "axios": "^1.7.5", + "chalk": "^4.1.2", + "commander": "^12.1.0", + "fhir": "^4.12.0", + "fhir-package-loader": "^1.0.0", + "fs-extra": "^11.2.0", + "html-minifier-terser": "5.1.1", + "https-proxy-agent": "^7.0.5", + "ini": "^4.1.3", + "junk": "^3.1.0", + "lodash": "^4.17.21", + "readline-sync": "^1.4.10", + "sanitize-filename": "^1.6.3", + "sax": "^1.4.1", + "temp": "^0.9.4", + "text-table": "^0.2.0", + "title-case": "^3.0.3", + "valid-url": "^1.0.9", + "winston": "^3.14.2", + "yaml": "^1.10.2" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "antlr4": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", + "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -4242,11 +5500,71 @@ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true }, + "gofsh": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gofsh/-/gofsh-2.3.1.tgz", + "integrity": "sha512-MLYMbMMhyJeS1BurQSoLHyAC1Sg/zgP6MqHWW+DZVn68/FBpo7PN6VlTQgoUn/7g1qtOfEtQ/nsqujKbOL1YKQ==", + "requires": { + "antlr4": "~4.13.1-patch-1", + "chalk": "^4.1.0", + "commander": "^6.0.0", + "diff": "^5.0.0", + "diff2html": "^3.1.18", + "fhir": "^4.10.0", + "fhir-package-loader": "^1.0.0", + "flat": "^5.0.2", + "fs-extra": "^9.0.1", + "fsh-sushi": "^3.9.0", + "ini": "^1.3.8", + "lodash": "^4.17.21", + "readline-sync": "^1.4.10", + "sanitize-filename": "^1.6.3", + "semver": "^7.5.4", + "temp": "^0.9.1", + "text-table": "^0.2.0", + "toposort": "^2.0.2", + "valid-url": "^1.0.9", + "winston": "^3.3.3", + "yaml": "^1.10.0" + }, + "dependencies": { + "antlr4": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", + "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==" + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } + }, "graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "graphemer": { "version": "1.4.0", @@ -4257,8 +5575,43 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "highlight.js": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", + "optional": true + }, + "hogan.js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", + "integrity": "sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==", + "requires": { + "mkdirp": "0.3.0", + "nopt": "1.0.10" + } + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + } + } }, "http-proxy-agent": { "version": "7.0.2", @@ -4274,7 +5627,6 @@ "version": "7.0.5", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "dev": true, "requires": { "agent-base": "^7.0.2", "debug": "4" @@ -4318,7 +5670,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -4327,8 +5678,17 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==" + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-binary-path": { "version": "2.1.0", @@ -4384,6 +5744,11 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -4449,7 +5814,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -4467,6 +5831,11 @@ "setimmediate": "^1.0.5" } }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==" + }, "keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -4476,6 +5845,16 @@ "json-buffer": "3.0.1" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4504,6 +5883,11 @@ "p-locate": "^5.0.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4520,6 +5904,19 @@ "is-unicode-supported": "^0.1.0" } }, + "logform": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", + "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", + "requires": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, "loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -4529,12 +5926,25 @@ "get-func-name": "^2.0.1" } }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, "lru-cache": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", "dev": true }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4574,17 +5984,45 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, "minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==" + }, "mocha": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", @@ -4670,8 +6108,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "natural-compare": { "version": "1.4.0", @@ -4679,6 +6116,15 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "nock": { "version": "13.5.5", "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.5.tgz", @@ -4690,6 +6136,14 @@ "propagate": "^2.0.0" } }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "requires": { + "abbrev": "1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4700,11 +6154,18 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -4831,6 +6292,15 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4840,12 +6310,26 @@ "callsites": "^3.0.0" } }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -4915,6 +6399,23 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -4948,12 +6449,27 @@ "picomatch": "^2.2.1" } }, + "readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==" + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4976,6 +6492,29 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -4988,8 +6527,25 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==" + }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "semver": { "version": "7.6.3", @@ -5032,6 +6588,33 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" + }, "stdin-discarder": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", @@ -5045,7 +6628,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -5096,11 +6678,84 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "requires": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + } + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "title-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", + "requires": { + "tslib": "^2.0.3" + } }, "to-regex-range": { "version": "5.0.1", @@ -5111,6 +6766,24 @@ "is-number": "^7.0.0" } }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, + "triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, "ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -5118,6 +6791,11 @@ "dev": true, "requires": {} }, + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5148,8 +6826,7 @@ "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "uri-js": { "version": "4.4.1", @@ -5160,11 +6837,20 @@ "punycode": "^2.1.0" } }, + "utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==" + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" }, "which": { "version": "2.0.2", @@ -5175,6 +6861,58 @@ "isexe": "^2.0.0" } }, + "winston": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", + "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", + "requires": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.6.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "winston-transport": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", + "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", + "requires": { + "logform": "^2.6.1", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", @@ -5206,8 +6944,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "y18n": { "version": "5.0.8", @@ -5215,6 +6952,11 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "yaml": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", diff --git a/package.json b/package.json index 8677c4f..d5beb93 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,16 @@ { "command": "extension.openFhir", "title": "Open FHIR Documentation" + }, + { + "command": "extension.fshToFHIRjson", + "title": "FSH to FHIR JSON", + "category": "vscode-fsh" + }, + { + "command": "extension.FHIRtoFSH", + "title": "FHIR to FSH", + "category": "vscode-fsh" } ], "menus": { @@ -62,8 +72,44 @@ "group": "navigation", "when": "editorLangId == fsh" } + ], + "explorer/context": [ + { + "command": "extension.fshToFHIRjson", + "group": "1_modification", + "when": "resourceExtname == .fsh" + }, + { + "command": "extension.FHIRtoFSH", + "group": "1_modification", + "when": "resourceExtname == .json || resourceExtname == .xml" + } ] }, + "configuration":[ + { + "title": "HL7 FHIR Shorthand", + "properties": { + "vscode-fsh.FHIRVersion": { + "type": "string", + "order": 0, + "default": "4.0.1", + "enum": ["4.0.1", "4.3.0", "5.0.0"], + "description": "The FHIR version used in converting FSH to FHIR." + }, + "vscode-fsh.Dependencies": { + "type": "array", + "order": 1, + "items": { + "type":"string", + "pattern": "^\\S*@\\S*$", + "patternErrorMessage": "Format: @, note: no leading and or trailing whitespaces!" + }, + "description": "The dependencies on the FHIR packages used in converting to and from FHIR shorthand. Format: @" + } + } + } + ], "problemMatchers": [ { "owner": "vscode-fsh", @@ -100,7 +146,7 @@ } } ] - }, + }, "scripts": { "build": "tsc -p ./", "build:watch": "tsc -watch -p ./", @@ -143,6 +189,8 @@ "antlr4": "~4.8.0", "axios": "^1.7.7", "semver": "^7.6.3", - "yaml": "^2.5.0" + "yaml": "^2.5.0", + "fsh-sushi": "3.11.1", + "gofsh": "2.3.1" } } diff --git a/src/extension.ts b/src/extension.ts index b7c18fd..b5c8bec 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,16 +6,24 @@ import { ExtensionContext, DocumentFilter, TextDocument, + OutputChannel, + workspace, Position, env, Uri } from 'vscode'; import axios from 'axios'; +import { ImplementationGuideDependsOn } from 'fsh-sushi/dist/fhirtypes'; +import { readJSONorXML } from 'gofsh/dist/utils'; +import { fshToFhir } from 'fsh-sushi/dist/run'; +import { fhirToFsh } from 'gofsh/dist/api'; import { FshDefinitionProvider } from './FshDefinitionProvider'; import { FshCompletionProvider } from './FshCompletionProvider'; import { SushiBuildTaskProvider } from './SushiBuildTaskProvider'; +let fhirFSH: OutputChannel; + const FSH_MODE: DocumentFilter = { language: 'fsh', scheme: 'file' }; // For FSH entity names and keywords, show the user FSH documentation. // Extension has an unusual key pair in order to differentiate between cases @@ -103,14 +111,98 @@ export function activate(context: ExtensionContext): { languages.registerDefinitionProvider(FSH_MODE, definitionProviderInstance), languages.registerCompletionItemProvider(FSH_MODE, completionProviderInstance, '.') ); + + fhirFSH = window.createOutputChannel("FHIR <=> FSH"); + commands.registerCommand('extension.openFhir', () => openFhirDocumentation(completionProviderInstance) ); + + commands.registerCommand('extension.fshToFHIRjson', async (...file) => + conversionFSHtoFHIR(...file) + ); + + commands.registerCommand('extension.FHIRtoFSH', async (...file) => + conversionFHIRtoFSH(...file) + ); + completionProviderInstance.updateFhirEntities(); tasks.registerTaskProvider('fsh', new SushiBuildTaskProvider()); return { definitionProviderInstance, completionProviderInstance }; } +export function deactivate() { + fhirFSH.dispose(); +} + +export async function conversionFSHtoFHIR(...file: any[]) : Promise +{ + fhirFSH.clear(); + + let fhirVersion = workspace.getConfiguration("vscode-fsh").get("FHIRVersion") as string; + let dependencies = workspace.getConfiguration("vscode-fsh").get("Dependencies") as string[]; + + let fshtoFHIRDependencies: ImplementationGuideDependsOn[] = []; + + dependencies.forEach(dependency => { + let newDependency: ImplementationGuideDependsOn = { packageId: dependency.split("@")[0], version: dependency.split("@")[1] }; + fshtoFHIRDependencies.push(newDependency); + }); + + let dependenciesParameter = fshtoFHIRDependencies.length === 0 ? undefined : fshtoFHIRDependencies; + + workspace.fs.readFile(file[0]).then(bytes => { + let fileText = new TextDecoder().decode(bytes); + + fshToFhir(fileText, {fhirVersion: fhirVersion, dependencies: dependenciesParameter}).then(result => { + + result.errors.forEach(error => { + fhirFSH.appendLine("Error: " + error.message); + }); + + result.warnings.forEach(warning => { + fhirFSH.appendLine("Warning: " + warning.message); + }); + + fhirFSH.appendLine("Finished!"); + workspace.openTextDocument({ content: JSON.stringify(result.fhir[0]), language: "json" }); + + }); + + }); + + fhirFSH.show(); +} + +export async function conversionFHIRtoFSH(...file: any[]) : Promise +{ + fhirFSH.clear(); + + let dependencies = workspace.getConfiguration("vscode-fsh").get("Dependencies") as string[]; + let dependenciesParameter = dependencies.length === 0 ? undefined : dependencies; + + let fileUri: Uri = file[0]; + let fhirObjects = readJSONorXML(fileUri.path); + + let myArray: any[] = []; + myArray.push(fhirObjects.content); + + fhirToFsh(myArray, { style: `string`, indent: true, dependencies: dependenciesParameter }).then(result => { + result.errors.forEach(error => { + fhirFSH.appendLine("Error: " + error.message); + }); + + result.warnings.forEach(warning => { + fhirFSH.appendLine("Warning: " + warning.message); + }); + + fhirFSH.appendLine("Finished!"); + workspace.openTextDocument({ content: result.fsh as string, language: "fsh" }); + }); + + fhirFSH.show() +} + export async function openFhirDocumentation( completionProviderInstance: FshCompletionProvider ): Promise { From fa56e33bdd0fe2d56b58d823263ac0c24e4460ef Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Fri, 27 Sep 2024 11:50:02 +0200 Subject: [PATCH 02/11] Added some documenttion --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 8c9152f..24e7f89 100644 --- a/README.md +++ b/README.md @@ -137,6 +137,12 @@ The files to copy are: - FSHParser.js - FSHVisitor.js +# Conversion from FHIR Json to FSH and from FSH to FHIR Json + +Right clicking on a .FSH file and then select the opteion "FSH to FHIR JSON" from the context menu will convert this FSH file to a FHIR JSON file. The FHIR JSON file will be created in memory in a separate file tab. + +Right clicking on a JSON file that contains a FHIR resource and then select the opteion "FHIR to FSH" from the context menu will convert this JSON FHIR file to a FSH file. The FSH file will be created in memory in a separate file tab. + # License Copyright 2019-2024 Health Level Seven International From 30850a4e37d1d64bd517933204e77dcc1b27f1bf Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Fri, 27 Sep 2024 15:14:31 +0200 Subject: [PATCH 03/11] fix lint --- src/extension.ts | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index b5c8bec..10ccf30 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -112,7 +112,7 @@ export function activate(context: ExtensionContext): { languages.registerCompletionItemProvider(FSH_MODE, completionProviderInstance, '.') ); - fhirFSH = window.createOutputChannel("FHIR <=> FSH"); + fhirFSH = window.createOutputChannel('FHIR <=> FSH'); commands.registerCommand('extension.openFhir', () => openFhirDocumentation(completionProviderInstance) @@ -139,33 +139,33 @@ export async function conversionFSHtoFHIR(...file: any[]) : Promise { fhirFSH.clear(); - let fhirVersion = workspace.getConfiguration("vscode-fsh").get("FHIRVersion") as string; - let dependencies = workspace.getConfiguration("vscode-fsh").get("Dependencies") as string[]; + const fhirVersion = workspace.getConfiguration('vscode-fsh').get('FHIRVersion') as string; + const dependencies = workspace.getConfiguration('vscode-fsh').get('Dependencies') as string[]; - let fshtoFHIRDependencies: ImplementationGuideDependsOn[] = []; + const fshtoFHIRDependencies: ImplementationGuideDependsOn[] = []; dependencies.forEach(dependency => { - let newDependency: ImplementationGuideDependsOn = { packageId: dependency.split("@")[0], version: dependency.split("@")[1] }; + const newDependency: ImplementationGuideDependsOn = { packageId: dependency.split('@')[0], version: dependency.split('@')[1] }; fshtoFHIRDependencies.push(newDependency); }); - let dependenciesParameter = fshtoFHIRDependencies.length === 0 ? undefined : fshtoFHIRDependencies; + const dependenciesParameter = fshtoFHIRDependencies.length === 0 ? undefined : fshtoFHIRDependencies; workspace.fs.readFile(file[0]).then(bytes => { - let fileText = new TextDecoder().decode(bytes); + const fileText = new TextDecoder().decode(bytes); fshToFhir(fileText, {fhirVersion: fhirVersion, dependencies: dependenciesParameter}).then(result => { result.errors.forEach(error => { - fhirFSH.appendLine("Error: " + error.message); + fhirFSH.appendLine('Error: ' + error.message); }); result.warnings.forEach(warning => { - fhirFSH.appendLine("Warning: " + warning.message); + fhirFSH.appendLine('Warning: ' + warning.message); }); - fhirFSH.appendLine("Finished!"); - workspace.openTextDocument({ content: JSON.stringify(result.fhir[0]), language: "json" }); + fhirFSH.appendLine('Finished!'); + workspace.openTextDocument({ content: JSON.stringify(result.fhir[0]), language: 'json' }); }); @@ -178,29 +178,29 @@ export async function conversionFHIRtoFSH(...file: any[]) : Promise { fhirFSH.clear(); - let dependencies = workspace.getConfiguration("vscode-fsh").get("Dependencies") as string[]; - let dependenciesParameter = dependencies.length === 0 ? undefined : dependencies; + const dependencies = workspace.getConfiguration('vscode-fsh').get('Dependencies') as string[]; + const dependenciesParameter = dependencies.length === 0 ? undefined : dependencies; - let fileUri: Uri = file[0]; - let fhirObjects = readJSONorXML(fileUri.path); + const fileUri: Uri = file[0]; + const fhirObjects = readJSONorXML(fileUri.path); - let myArray: any[] = []; + const myArray: any[] = []; myArray.push(fhirObjects.content); fhirToFsh(myArray, { style: `string`, indent: true, dependencies: dependenciesParameter }).then(result => { result.errors.forEach(error => { - fhirFSH.appendLine("Error: " + error.message); + fhirFSH.appendLine('Error: ' + error.message); }); result.warnings.forEach(warning => { - fhirFSH.appendLine("Warning: " + warning.message); + fhirFSH.appendLine('Warning: ' + warning.message); }); - fhirFSH.appendLine("Finished!"); - workspace.openTextDocument({ content: result.fsh as string, language: "fsh" }); + fhirFSH.appendLine('Finished!'); + workspace.openTextDocument({ content: result.fsh as string, language: 'fsh' }); }); - fhirFSH.show() + fhirFSH.show(); } export async function openFhirDocumentation( From ede01ccf1e73c697ffcd42c54e3e59417f003fcb Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Mon, 30 Sep 2024 09:32:42 +0200 Subject: [PATCH 04/11] fixed string --- src/extension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 10ccf30..27d3c7f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -187,7 +187,7 @@ export async function conversionFHIRtoFSH(...file: any[]) : Promise const myArray: any[] = []; myArray.push(fhirObjects.content); - fhirToFsh(myArray, { style: `string`, indent: true, dependencies: dependenciesParameter }).then(result => { + fhirToFsh(myArray, { style: 'string', indent: true, dependencies: dependenciesParameter }).then(result => { result.errors.forEach(error => { fhirFSH.appendLine('Error: ' + error.message); }); From 62eedcf9d14e6b326333ef162d4dde4769050f62 Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Mon, 30 Sep 2024 15:26:09 +0200 Subject: [PATCH 05/11] npm prettier fixes --- src/extension.ts | 69 ++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 27d3c7f..17908c7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -112,7 +112,7 @@ export function activate(context: ExtensionContext): { languages.registerCompletionItemProvider(FSH_MODE, completionProviderInstance, '.') ); - fhirFSH = window.createOutputChannel('FHIR <=> FSH'); + fhirFSH = window.createOutputChannel('FHIR <=> FSH'); commands.registerCommand('extension.openFhir', () => openFhirDocumentation(completionProviderInstance) @@ -122,9 +122,7 @@ export function activate(context: ExtensionContext): { conversionFSHtoFHIR(...file) ); - commands.registerCommand('extension.FHIRtoFSH', async (...file) => - conversionFHIRtoFSH(...file) - ); + commands.registerCommand('extension.FHIRtoFSH', async (...file) => conversionFHIRtoFSH(...file)); completionProviderInstance.updateFhirEntities(); tasks.registerTaskProvider('fsh', new SushiBuildTaskProvider()); @@ -132,11 +130,10 @@ export function activate(context: ExtensionContext): { } export function deactivate() { - fhirFSH.dispose(); + fhirFSH.dispose(); } -export async function conversionFSHtoFHIR(...file: any[]) : Promise -{ +export async function conversionFSHtoFHIR(...file: any[]): Promise { fhirFSH.clear(); const fhirVersion = workspace.getConfiguration('vscode-fsh').get('FHIRVersion') as string; @@ -145,37 +142,39 @@ export async function conversionFSHtoFHIR(...file: any[]) : Promise const fshtoFHIRDependencies: ImplementationGuideDependsOn[] = []; dependencies.forEach(dependency => { - const newDependency: ImplementationGuideDependsOn = { packageId: dependency.split('@')[0], version: dependency.split('@')[1] }; + const newDependency: ImplementationGuideDependsOn = { + packageId: dependency.split('@')[0], + version: dependency.split('@')[1] + }; fshtoFHIRDependencies.push(newDependency); }); - const dependenciesParameter = fshtoFHIRDependencies.length === 0 ? undefined : fshtoFHIRDependencies; + const dependenciesParameter = + fshtoFHIRDependencies.length === 0 ? undefined : fshtoFHIRDependencies; workspace.fs.readFile(file[0]).then(bytes => { const fileText = new TextDecoder().decode(bytes); - fshToFhir(fileText, {fhirVersion: fhirVersion, dependencies: dependenciesParameter}).then(result => { - - result.errors.forEach(error => { - fhirFSH.appendLine('Error: ' + error.message); - }); - - result.warnings.forEach(warning => { - fhirFSH.appendLine('Warning: ' + warning.message); - }); - - fhirFSH.appendLine('Finished!'); - workspace.openTextDocument({ content: JSON.stringify(result.fhir[0]), language: 'json' }); + fshToFhir(fileText, { fhirVersion: fhirVersion, dependencies: dependenciesParameter }).then( + result => { + result.errors.forEach(error => { + fhirFSH.appendLine('Error: ' + error.message); + }); - }); + result.warnings.forEach(warning => { + fhirFSH.appendLine('Warning: ' + warning.message); + }); + fhirFSH.appendLine('Finished!'); + workspace.openTextDocument({ content: JSON.stringify(result.fhir[0]), language: 'json' }); + } + ); }); fhirFSH.show(); } -export async function conversionFHIRtoFSH(...file: any[]) : Promise -{ +export async function conversionFHIRtoFSH(...file: any[]): Promise { fhirFSH.clear(); const dependencies = workspace.getConfiguration('vscode-fsh').get('Dependencies') as string[]; @@ -187,18 +186,20 @@ export async function conversionFHIRtoFSH(...file: any[]) : Promise const myArray: any[] = []; myArray.push(fhirObjects.content); - fhirToFsh(myArray, { style: 'string', indent: true, dependencies: dependenciesParameter }).then(result => { - result.errors.forEach(error => { - fhirFSH.appendLine('Error: ' + error.message); - }); + fhirToFsh(myArray, { style: 'string', indent: true, dependencies: dependenciesParameter }).then( + result => { + result.errors.forEach(error => { + fhirFSH.appendLine('Error: ' + error.message); + }); - result.warnings.forEach(warning => { - fhirFSH.appendLine('Warning: ' + warning.message); - }); + result.warnings.forEach(warning => { + fhirFSH.appendLine('Warning: ' + warning.message); + }); - fhirFSH.appendLine('Finished!'); - workspace.openTextDocument({ content: result.fsh as string, language: 'fsh' }); - }); + fhirFSH.appendLine('Finished!'); + workspace.openTextDocument({ content: result.fsh as string, language: 'fsh' }); + } + ); fhirFSH.show(); } From 3fb92309722c56b30d36adb83d0039e1f73c75e3 Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Wed, 2 Oct 2024 10:41:41 +0200 Subject: [PATCH 06/11] Added autoFormat and focus. --- src/extension.ts | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 17908c7..7a9e6fb 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -10,7 +10,9 @@ import { workspace, Position, env, - Uri + Uri, + Range, + ViewColumn } from 'vscode'; import axios from 'axios'; @@ -166,7 +168,23 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { }); fhirFSH.appendLine('Finished!'); - workspace.openTextDocument({ content: JSON.stringify(result.fhir[0]), language: 'json' }); + + workspace + .openTextDocument({ content: JSON.stringify(result.fhir[0]), language: 'json' }) + .then(doc => { + window + .showTextDocument(doc, { preview: false, viewColumn: ViewColumn.Active }) + .then(editor => { + editor.edit(editBuilder => { + const fullRange = new Range( + doc.positionAt(0), + doc.positionAt(doc.getText().length) + ); + const formattedText = JSON.stringify(JSON.parse(doc.getText()), null, 2); + editBuilder.replace(fullRange, formattedText); + }); + }); + }); } ); }); @@ -197,7 +215,9 @@ export async function conversionFHIRtoFSH(...file: any[]): Promise { }); fhirFSH.appendLine('Finished!'); - workspace.openTextDocument({ content: result.fsh as string, language: 'fsh' }); + workspace.openTextDocument({ content: result.fsh as string, language: 'fsh' }).then(doc => { + window.showTextDocument(doc, { preview: false, viewColumn: ViewColumn.Active }); + }); } ); From 738894f70a78d2be6e9fb7a196b6213eddca23db Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Tue, 8 Oct 2024 13:59:47 +0200 Subject: [PATCH 07/11] added readonly view --- src/FshConversionProvider.ts | 38 +++++++++++++++++++++++++++++ src/extension.ts | 46 +++++++++++++++++++++--------------- 2 files changed, 65 insertions(+), 19 deletions(-) create mode 100644 src/FshConversionProvider.ts diff --git a/src/FshConversionProvider.ts b/src/FshConversionProvider.ts new file mode 100644 index 0000000..cc9802a --- /dev/null +++ b/src/FshConversionProvider.ts @@ -0,0 +1,38 @@ +import { Uri, TextDocumentContentProvider, EventEmitter } from 'vscode'; +import { basename } from 'path'; + +export function createFSHURIfromFileUri(fileUri: Uri): Uri { + return createURIfromFileUri(fileUri, '.fsh'); +} + +export function createJSONURIfromFileUri(fileUri: Uri): Uri { + return createURIfromFileUri(fileUri, '.json'); +} + +function createURIfromFileUri(fileUri: Uri, extension: String): Uri { + //Get the file name without the extension + let fileName = basename(fileUri.path); + fileName = fileName.split('.').slice(0, -1).join('.'); + + return Uri.parse( + FshConversionProvider.fshConversionProviderScheme + ': (PREVIEW)' + fileName + extension + ); +} + +export class FshConversionProvider implements TextDocumentContentProvider { + static readonly fshConversionProviderScheme = 'fshfhirconversion'; + private content: string = ''; + + private onDidChangeEmitter = new EventEmitter(); + onDidChange = this.onDidChangeEmitter.event; + + updated(newContent: string, newUri: Uri): void { + this.content = newContent; + + this.onDidChangeEmitter.fire(newUri); + } + + provideTextDocumentContent(uri: Uri): string { + return this.content; + } +} diff --git a/src/extension.ts b/src/extension.ts index 7a9e6fb..1dd2a0e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -11,7 +11,6 @@ import { Position, env, Uri, - Range, ViewColumn } from 'vscode'; @@ -22,9 +21,16 @@ import { fshToFhir } from 'fsh-sushi/dist/run'; import { fhirToFsh } from 'gofsh/dist/api'; import { FshDefinitionProvider } from './FshDefinitionProvider'; import { FshCompletionProvider } from './FshCompletionProvider'; +import { + FshConversionProvider, + createFSHURIfromFileUri, + createJSONURIfromFileUri +} from './FshConversionProvider'; import { SushiBuildTaskProvider } from './SushiBuildTaskProvider'; +import { create } from 'domain'; let fhirFSH: OutputChannel; +let fshConversionProvider: FshConversionProvider; const FSH_MODE: DocumentFilter = { language: 'fsh', scheme: 'file' }; // For FSH entity names and keywords, show the user FSH documentation. @@ -109,9 +115,15 @@ export function activate(context: ExtensionContext): { } { const definitionProviderInstance = new FshDefinitionProvider(); const completionProviderInstance = new FshCompletionProvider(definitionProviderInstance); + fshConversionProvider = new FshConversionProvider(); + context.subscriptions.push( languages.registerDefinitionProvider(FSH_MODE, definitionProviderInstance), - languages.registerCompletionItemProvider(FSH_MODE, completionProviderInstance, '.') + languages.registerCompletionItemProvider(FSH_MODE, completionProviderInstance, '.'), + workspace.registerTextDocumentContentProvider( + FshConversionProvider.fshConversionProviderScheme, + fshConversionProvider + ) ); fhirFSH = window.createOutputChannel('FHIR <=> FSH'); @@ -137,6 +149,7 @@ export function deactivate() { export async function conversionFSHtoFHIR(...file: any[]): Promise { fhirFSH.clear(); + const fileUri: Uri = file[0]; const fhirVersion = workspace.getConfiguration('vscode-fsh').get('FHIRVersion') as string; const dependencies = workspace.getConfiguration('vscode-fsh').get('Dependencies') as string[]; @@ -169,22 +182,13 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { fhirFSH.appendLine('Finished!'); - workspace - .openTextDocument({ content: JSON.stringify(result.fhir[0]), language: 'json' }) - .then(doc => { - window - .showTextDocument(doc, { preview: false, viewColumn: ViewColumn.Active }) - .then(editor => { - editor.edit(editBuilder => { - const fullRange = new Range( - doc.positionAt(0), - doc.positionAt(doc.getText().length) - ); - const formattedText = JSON.stringify(JSON.parse(doc.getText()), null, 2); - editBuilder.replace(fullRange, formattedText); - }); - }); - }); + const uri = createJSONURIfromFileUri(fileUri); + const formattedText = JSON.stringify(JSON.parse(JSON.stringify(result.fhir[0])), null, 2); + fshConversionProvider.updated(formattedText, uri); + + workspace.openTextDocument(uri).then(doc => { + window.showTextDocument(doc, { preview: false, viewColumn: ViewColumn.Active }); + }); } ); }); @@ -215,7 +219,11 @@ export async function conversionFHIRtoFSH(...file: any[]): Promise { }); fhirFSH.appendLine('Finished!'); - workspace.openTextDocument({ content: result.fsh as string, language: 'fsh' }).then(doc => { + + const uri = createFSHURIfromFileUri(fileUri); + fshConversionProvider.updated(result.fsh as string, uri); + + workspace.openTextDocument(uri).then(doc => { window.showTextDocument(doc, { preview: false, viewColumn: ViewColumn.Active }); }); } From 5990f862001dbc9afc4cb8d12f2eececdf2dc160 Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Tue, 8 Oct 2024 17:49:12 +0200 Subject: [PATCH 08/11] fix lint errors --- src/FshConversionProvider.ts | 38 ++++++++++++++++++------------------ src/extension.ts | 1 - 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/FshConversionProvider.ts b/src/FshConversionProvider.ts index cc9802a..fd29220 100644 --- a/src/FshConversionProvider.ts +++ b/src/FshConversionProvider.ts @@ -1,24 +1,6 @@ import { Uri, TextDocumentContentProvider, EventEmitter } from 'vscode'; import { basename } from 'path'; -export function createFSHURIfromFileUri(fileUri: Uri): Uri { - return createURIfromFileUri(fileUri, '.fsh'); -} - -export function createJSONURIfromFileUri(fileUri: Uri): Uri { - return createURIfromFileUri(fileUri, '.json'); -} - -function createURIfromFileUri(fileUri: Uri, extension: String): Uri { - //Get the file name without the extension - let fileName = basename(fileUri.path); - fileName = fileName.split('.').slice(0, -1).join('.'); - - return Uri.parse( - FshConversionProvider.fshConversionProviderScheme + ': (PREVIEW)' + fileName + extension - ); -} - export class FshConversionProvider implements TextDocumentContentProvider { static readonly fshConversionProviderScheme = 'fshfhirconversion'; private content: string = ''; @@ -32,7 +14,25 @@ export class FshConversionProvider implements TextDocumentContentProvider { this.onDidChangeEmitter.fire(newUri); } - provideTextDocumentContent(uri: Uri): string { + provideTextDocumentContent(): string { return this.content; } } + +export function createFSHURIfromFileUri(fileUri: Uri): Uri { + return createURIfromFileUri(fileUri, '.fsh'); +} + +export function createJSONURIfromFileUri(fileUri: Uri): Uri { + return createURIfromFileUri(fileUri, '.json'); +} + +function createURIfromFileUri(fileUri: Uri, extension: string): Uri { + //Get the file name without the extension + let fileName = basename(fileUri.path); + fileName = fileName.split('.').slice(0, -1).join('.'); + + return Uri.parse( + FshConversionProvider.fshConversionProviderScheme + ': (PREVIEW)' + fileName + extension + ); +} diff --git a/src/extension.ts b/src/extension.ts index 1dd2a0e..d5f5f84 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -27,7 +27,6 @@ import { createJSONURIfromFileUri } from './FshConversionProvider'; import { SushiBuildTaskProvider } from './SushiBuildTaskProvider'; -import { create } from 'domain'; let fhirFSH: OutputChannel; let fshConversionProvider: FshConversionProvider; From a6f1b100fa630660f33dab0905e244e2a90506c6 Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Thu, 17 Oct 2024 16:26:42 +0200 Subject: [PATCH 09/11] Refactor to use the sushi-configuration and support multiple resource in one FSH file + update to latest sushi.. --- package-lock.json | 27 ++------ package.json | 26 +------- src/FshCompletionProvider.ts | 14 +--- src/FshConversionProvider.ts | 125 +++++++++++++++++++++++++++++++---- src/extension.ts | 59 +++++++++++------ src/utils.ts | 13 ++++ 6 files changed, 172 insertions(+), 92 deletions(-) diff --git a/package-lock.json b/package-lock.json index e4a044f..711d23c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "antlr4": "~4.13.2", "axios": "^1.7.7", - "fsh-sushi": "3.11.1", + "fsh-sushi": "3.12.0", "gofsh": "2.3.1", "semver": "^7.6.3", "yaml": "^2.5.0" @@ -1887,9 +1887,9 @@ } }, "node_modules/fsh-sushi": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.11.1.tgz", - "integrity": "sha512-rQtA/mDktM8uH2aekRKLCLOnpGNWylygFo5PqM5Q5iMu8/O7DvQ/QOwbbsVr7ZGE5FPwz9jnX1QzXRZoqZK5MA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.12.0.tgz", + "integrity": "sha512-VFIWj1w7YH35rKeRic0NwDffh7JEvv+jXu4isFdxMxZvE6wcmpwgf8Fu35H0LuyZXLYoG4IvG5FFTxHTPp5lZw==", "dependencies": { "ajv": "^8.17.1", "antlr4": "^4.13.2", @@ -1933,14 +1933,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/fsh-sushi/node_modules/antlr4": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", - "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", - "engines": { - "node": ">=16" - } - }, "node_modules/fsh-sushi/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -5386,9 +5378,9 @@ "optional": true }, "fsh-sushi": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.11.1.tgz", - "integrity": "sha512-rQtA/mDktM8uH2aekRKLCLOnpGNWylygFo5PqM5Q5iMu8/O7DvQ/QOwbbsVr7ZGE5FPwz9jnX1QzXRZoqZK5MA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.12.0.tgz", + "integrity": "sha512-VFIWj1w7YH35rKeRic0NwDffh7JEvv+jXu4isFdxMxZvE6wcmpwgf8Fu35H0LuyZXLYoG4IvG5FFTxHTPp5lZw==", "requires": { "ajv": "^8.17.1", "antlr4": "^4.13.2", @@ -5425,11 +5417,6 @@ "require-from-string": "^2.0.2" } }, - "antlr4": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", - "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==" - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", diff --git a/package.json b/package.json index 448ea15..25757ac 100644 --- a/package.json +++ b/package.json @@ -86,30 +86,6 @@ } ] }, - "configuration":[ - { - "title": "HL7 FHIR Shorthand", - "properties": { - "vscode-fsh.FHIRVersion": { - "type": "string", - "order": 0, - "default": "4.0.1", - "enum": ["4.0.1", "4.3.0", "5.0.0"], - "description": "The FHIR version used in converting FSH to FHIR." - }, - "vscode-fsh.Dependencies": { - "type": "array", - "order": 1, - "items": { - "type":"string", - "pattern": "^\\S*@\\S*$", - "patternErrorMessage": "Format: @, note: no leading and or trailing whitespaces!" - }, - "description": "The dependencies on the FHIR packages used in converting to and from FHIR shorthand. Format: @" - } - } - } - ], "problemMatchers": [ { "owner": "vscode-fsh", @@ -190,7 +166,7 @@ "axios": "^1.7.7", "semver": "^7.6.3", "yaml": "^2.5.0", - "fsh-sushi": "3.11.1", + "fsh-sushi": "3.12.0", "gofsh": "2.3.1" } } diff --git a/src/FshCompletionProvider.ts b/src/FshCompletionProvider.ts index 6b7462b..6ea822d 100644 --- a/src/FshCompletionProvider.ts +++ b/src/FshCompletionProvider.ts @@ -18,6 +18,7 @@ import YAML from 'yaml'; import path from 'path'; import os from 'os'; import { maxSatisfying } from 'semver'; +import { SushiConfiguration } from './utils'; export type FhirContents = { resourceType: string; @@ -37,19 +38,6 @@ export type EnhancedCompletionItem = CompletionItem & { type?: string; }; -type DependencyDetails = { - id: string; - uri: string; - version: string | number; -}; - -type SushiConfiguration = { - fhirVersion?: string | string[]; - dependencies?: { - [key: string]: string | number | DependencyDetails; - }; -}; - type EntitySet = { profiles: Map; resources: Map; diff --git a/src/FshConversionProvider.ts b/src/FshConversionProvider.ts index fd29220..e0cbb29 100644 --- a/src/FshConversionProvider.ts +++ b/src/FshConversionProvider.ts @@ -1,38 +1,139 @@ -import { Uri, TextDocumentContentProvider, EventEmitter } from 'vscode'; -import { basename } from 'path'; +import { Uri, TextDocumentContentProvider, EventEmitter, workspace, OutputChannel } from 'vscode'; +import { basename, dirname } from 'path'; +import YAML from 'yaml'; +import { SushiConfiguration } from './utils'; export class FshConversionProvider implements TextDocumentContentProvider { static readonly fshConversionProviderScheme = 'fshfhirconversion'; - private content: string = ''; + private mapContent = new Map(); private onDidChangeEmitter = new EventEmitter(); onDidChange = this.onDidChangeEmitter.event; + dispose(): void { + this.onDidChangeEmitter.dispose(); + } + updated(newContent: string, newUri: Uri): void { - this.content = newContent; + this.mapContent.set(newUri.fsPath, newContent); this.onDidChangeEmitter.fire(newUri); } - provideTextDocumentContent(): string { - return this.content; + provideTextDocumentContent(uri: Uri): string { + return this.mapContent.get(uri.fsPath); } } -export function createFSHURIfromFileUri(fileUri: Uri): Uri { - return createURIfromFileUri(fileUri, '.fsh'); +export function createFSHURIfromFileUri(fileUri: Uri, prefix: string): Uri { + return createURIfromFileUri(fileUri, '.fsh', prefix); } -export function createJSONURIfromFileUri(fileUri: Uri): Uri { - return createURIfromFileUri(fileUri, '.json'); +export function createJSONURIfromFileUri(fileUri: Uri, prefix: string): Uri { + return createURIfromFileUri(fileUri, '.json', prefix); } -function createURIfromFileUri(fileUri: Uri, extension: string): Uri { +function createURIfromFileUri(fileUri: Uri, extension: string, prefix: string): Uri { //Get the file name without the extension let fileName = basename(fileUri.path); fileName = fileName.split('.').slice(0, -1).join('.'); return Uri.parse( - FshConversionProvider.fshConversionProviderScheme + ': (PREVIEW)' + fileName + extension + FshConversionProvider.fshConversionProviderScheme + + ': (PREVIEW) ' + + prefix + + fileName + + extension ); } + +export async function findVersionAnddependencies( + fileUri: Uri, + output: OutputChannel +): Promise<{ version: string; dependencies: string[] }> { + let fhirVersion = '4.0.1'; + const conversionDependencies: string[] = []; + + const sushiConfigUri = await findMatchingSushiConfig(fileUri); + if (sushiConfigUri) { + output.appendLine('Sushi-config.yaml file found: ' + sushiConfigUri.fsPath); + + const configContents = await workspace.fs.readFile(sushiConfigUri); + + const decoder = new TextDecoder(); + const decodedConfig = decoder.decode(configContents); + const parsedConfig = YAML.parse(decodedConfig); + + fhirVersion = getVersionFromSushiConfig(parsedConfig); + output.appendLine('Found version: ' + fhirVersion); + + const dependencies = getDependenciesFromSushiConfig(parsedConfig); + dependencies.forEach(dep => { + output.appendLine('Found dependency: ' + dep.packageId + '@' + dep.version); + conversionDependencies.push(dep.packageId + '@' + dep.version); + }); + } else { + output.appendLine('No sushi-config.yaml file found.'); + } + + return { version: fhirVersion, dependencies: conversionDependencies }; +} + +async function findMatchingSushiConfig(fileUri: Uri): Promise { + return new Promise(resolve => { + workspace.findFiles('**/sushi-config.{yaml,yml}').then(files => { + let sushiConfigUri = null; + files.forEach(file => { + const configdir = dirname(file.fsPath); + if (fileUri.fsPath.startsWith(configdir)) { + sushiConfigUri = file; + } + }); + resolve(sushiConfigUri); + }); + }); +} + +function getVersionFromSushiConfig(config: SushiConfiguration): string { + // try to get fhirVersion: if there's more than one, use the first one that is recognized + let fhirVersion = '4.0.1'; + const listedVersions = Array.isArray(config.fhirVersion) + ? config.fhirVersion + : [config.fhirVersion]; + fhirVersion = listedVersions + .map(version => { + const versionMatch = version?.match(/^#?(\S*)/); + if (versionMatch) { + return versionMatch[1]; + } else { + return null; + } + }) + .find(version => /current|4\.0\.1|4\.[1-9]\d*\.\d+|5\.\d+\.\d+/.test(version)); + + return fhirVersion; +} + +function getDependenciesFromSushiConfig( + config: SushiConfiguration +): { packageId: string; version: string }[] { + //try to get dependencies: more or less doing SUSHI's importConfiguration.parseDependencies + let parsedDependencies: { packageId: string; version: string }[] = []; + if (config.dependencies) { + parsedDependencies = Object.entries(config.dependencies).map( + ([packageId, versionOrDetails]) => { + if (typeof versionOrDetails === 'string' || typeof versionOrDetails === 'number') { + return { packageId, version: `${versionOrDetails}` }; + } else if (versionOrDetails == null) { + return { packageId, version: undefined }; + } else { + return { + packageId, + version: versionOrDetails.version ? `${versionOrDetails.version}` : undefined + }; + } + } + ); + } + return parsedDependencies; +} diff --git a/src/extension.ts b/src/extension.ts index d5f5f84..d196a25 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -24,7 +24,8 @@ import { FshCompletionProvider } from './FshCompletionProvider'; import { FshConversionProvider, createFSHURIfromFileUri, - createJSONURIfromFileUri + createJSONURIfromFileUri, + findVersionAnddependencies } from './FshConversionProvider'; import { SushiBuildTaskProvider } from './SushiBuildTaskProvider'; @@ -150,12 +151,11 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { fhirFSH.clear(); const fileUri: Uri = file[0]; - const fhirVersion = workspace.getConfiguration('vscode-fsh').get('FHIRVersion') as string; - const dependencies = workspace.getConfiguration('vscode-fsh').get('Dependencies') as string[]; + const sushiConfigInfo = await findVersionAnddependencies(fileUri, fhirFSH); const fshtoFHIRDependencies: ImplementationGuideDependsOn[] = []; - dependencies.forEach(dependency => { + sushiConfigInfo.dependencies.forEach(dependency => { const newDependency: ImplementationGuideDependsOn = { packageId: dependency.split('@')[0], version: dependency.split('@')[1] @@ -168,9 +168,12 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { workspace.fs.readFile(file[0]).then(bytes => { const fileText = new TextDecoder().decode(bytes); - - fshToFhir(fileText, { fhirVersion: fhirVersion, dependencies: dependenciesParameter }).then( - result => { + fhirFSH.appendLine('Converting FSH to FHIR...'); + fshToFhir(fileText, { + fhirVersion: sushiConfigInfo.version, + dependencies: dependenciesParameter + }) + .then(result => { result.errors.forEach(error => { fhirFSH.appendLine('Error: ' + error.message); }); @@ -181,15 +184,20 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { fhirFSH.appendLine('Finished!'); - const uri = createJSONURIfromFileUri(fileUri); - const formattedText = JSON.stringify(JSON.parse(JSON.stringify(result.fhir[0])), null, 2); - fshConversionProvider.updated(formattedText, uri); + // There can be multiple FHIR objects in the result + result.fhir.forEach(fhirObject => { + const formattedText = JSON.stringify(JSON.parse(JSON.stringify(fhirObject)), null, 2); + const uri = createJSONURIfromFileUri(fileUri, result.fhir.indexOf(fhirObject) + '_'); + fshConversionProvider.updated(formattedText, uri); - workspace.openTextDocument(uri).then(doc => { - window.showTextDocument(doc, { preview: false, viewColumn: ViewColumn.Active }); + workspace.openTextDocument(uri).then(doc => { + window.showTextDocument(doc, { preview: false, viewColumn: ViewColumn.Active }); + }); }); - } - ); + }) + .catch(error => { + fhirFSH.appendLine('Error: ' + error.message); + }); }); fhirFSH.show(); @@ -198,17 +206,22 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { export async function conversionFHIRtoFSH(...file: any[]): Promise { fhirFSH.clear(); - const dependencies = workspace.getConfiguration('vscode-fsh').get('Dependencies') as string[]; - const dependenciesParameter = dependencies.length === 0 ? undefined : dependencies; - const fileUri: Uri = file[0]; const fhirObjects = readJSONorXML(fileUri.path); + const sushiConfigInfo = await findVersionAnddependencies(fileUri, fhirFSH); + const myArray: any[] = []; myArray.push(fhirObjects.content); - fhirToFsh(myArray, { style: 'string', indent: true, dependencies: dependenciesParameter }).then( - result => { + fhirFSH.appendLine('Converting FHIR to FSH...'); + + fhirToFsh(myArray, { + style: 'string', + indent: true, + dependencies: sushiConfigInfo.dependencies + }) + .then(result => { result.errors.forEach(error => { fhirFSH.appendLine('Error: ' + error.message); }); @@ -219,14 +232,16 @@ export async function conversionFHIRtoFSH(...file: any[]): Promise { fhirFSH.appendLine('Finished!'); - const uri = createFSHURIfromFileUri(fileUri); + const uri = createFSHURIfromFileUri(fileUri, ''); fshConversionProvider.updated(result.fsh as string, uri); workspace.openTextDocument(uri).then(doc => { window.showTextDocument(doc, { preview: false, viewColumn: ViewColumn.Active }); }); - } - ); + }) + .catch(error => { + fhirFSH.appendLine('Error: ' + error.message); + }); fhirFSH.show(); } diff --git a/src/utils.ts b/src/utils.ts index 007c7bb..b8458a4 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -2,6 +2,19 @@ import fs from 'fs'; import path from 'path'; import { TextDocument, Position } from 'vscode'; +export type DependencyDetails = { + id: string; + uri: string; + version: string | number; +}; + +export type SushiConfiguration = { + fhirVersion?: string | string[]; + dependencies?: { + [key: string]: string | number | DependencyDetails; + }; +}; + export function collectFshFilesForPath(filepath: string, fshFiles: string[]): void { const stats = fs.statSync(filepath); if (stats.isDirectory()) { From e3c6a2accd8badab2e3d5b0e06a65d2da061d1a0 Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Fri, 25 Oct 2024 11:54:51 +0200 Subject: [PATCH 10/11] Fix: typos in README, moved new feature to correct place, improved output information from conversion. --- README.md | 12 ++++++------ src/extension.ts | 11 ++++++----- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 2f418da..0725a3e 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,12 @@ To run the SUSHI Build task, use VS Code's Run Task feature. The "Run Task" feat Note that you must have SUSHI installed locally in order for the task to run successfully. See [SUSHI Installation instructions](https://fshschool.org/docs/sushi/installation/) for help installing. +## Conversion from FHIR Json to FSH and from FSH to FHIR Json + +Right-clicking on a `.fsh` file and then selecting the option "FSH to FHIR JSON" from the context menu will convert this FSH file to a FHIR JSON file. The FHIR JSON file will be created in memory in a separate file tab. + +Right-clicking on a `.json` file that contains a FHIR resource and then selecting the option "FHIR to FSH" from the context menu will convert this JSON FHIR file to a FSH file. The FSH file will be created in memory in a separate file tab. + ## Instructions for Developers ### Intro to FSH VS Code Extension Development @@ -144,12 +150,6 @@ The files to copy are: - FSHParser.js - FSHVisitor.js -# Conversion from FHIR Json to FSH and from FSH to FHIR Json - -Right clicking on a .FSH file and then select the opteion "FSH to FHIR JSON" from the context menu will convert this FSH file to a FHIR JSON file. The FHIR JSON file will be created in memory in a separate file tab. - -Right clicking on a JSON file that contains a FHIR resource and then select the opteion "FHIR to FSH" from the context menu will convert this JSON FHIR file to a FSH file. The FSH file will be created in memory in a separate file tab. - # License Copyright 2019-2024 Health Level Seven International diff --git a/src/extension.ts b/src/extension.ts index d196a25..b8d6d52 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -181,9 +181,6 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { result.warnings.forEach(warning => { fhirFSH.appendLine('Warning: ' + warning.message); }); - - fhirFSH.appendLine('Finished!'); - // There can be multiple FHIR objects in the result result.fhir.forEach(fhirObject => { const formattedText = JSON.stringify(JSON.parse(JSON.stringify(fhirObject)), null, 2); @@ -197,6 +194,9 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { }) .catch(error => { fhirFSH.appendLine('Error: ' + error.message); + }) + .finally(() => { + fhirFSH.appendLine('Finished!'); }); }); @@ -230,8 +230,6 @@ export async function conversionFHIRtoFSH(...file: any[]): Promise { fhirFSH.appendLine('Warning: ' + warning.message); }); - fhirFSH.appendLine('Finished!'); - const uri = createFSHURIfromFileUri(fileUri, ''); fshConversionProvider.updated(result.fsh as string, uri); @@ -241,6 +239,9 @@ export async function conversionFHIRtoFSH(...file: any[]): Promise { }) .catch(error => { fhirFSH.appendLine('Error: ' + error.message); + }) + .finally(() => { + fhirFSH.appendLine('Finished!'); }); fhirFSH.show(); From 174549dc70f7d4c392c6031540e608541bc11e4b Mon Sep 17 00:00:00 2001 From: Hans van Amstel Date: Fri, 25 Oct 2024 16:42:52 +0200 Subject: [PATCH 11/11] Add running FSH to JSON conversion in project context is available --- src/FshConversionProvider.ts | 63 ++++++++++++++++++++++++++----- src/extension.ts | 73 +++++++++++++++++++++++------------- 2 files changed, 99 insertions(+), 37 deletions(-) diff --git a/src/FshConversionProvider.ts b/src/FshConversionProvider.ts index e0cbb29..db3dc62 100644 --- a/src/FshConversionProvider.ts +++ b/src/FshConversionProvider.ts @@ -26,23 +26,23 @@ export class FshConversionProvider implements TextDocumentContentProvider { } export function createFSHURIfromFileUri(fileUri: Uri, prefix: string): Uri { - return createURIfromFileUri(fileUri, '.fsh', prefix); + let fileName = basename(fileUri.path); + fileName = fileName.split('.').slice(0, -1).join('.'); + + return createURIfromFileUri(fileName, '.fsh', prefix); } -export function createJSONURIfromFileUri(fileUri: Uri, prefix: string): Uri { - return createURIfromFileUri(fileUri, '.json', prefix); +export function createJSONURIfromFileUri(identifier: string, prefix: string): Uri { + return createURIfromFileUri(identifier, '.json', prefix); } -function createURIfromFileUri(fileUri: Uri, extension: string, prefix: string): Uri { +function createURIfromFileUri(identifier: string, extension: string, prefix: string): Uri { //Get the file name without the extension - let fileName = basename(fileUri.path); - fileName = fileName.split('.').slice(0, -1).join('.'); - return Uri.parse( FshConversionProvider.fshConversionProviderScheme + ': (PREVIEW) ' + prefix + - fileName + + identifier + extension ); } @@ -50,7 +50,7 @@ function createURIfromFileUri(fileUri: Uri, extension: string, prefix: string): export async function findVersionAnddependencies( fileUri: Uri, output: OutputChannel -): Promise<{ version: string; dependencies: string[] }> { +): Promise<{ version: string; dependencies: string[]; sushiconfig: Uri }> { let fhirVersion = '4.0.1'; const conversionDependencies: string[] = []; @@ -76,7 +76,11 @@ export async function findVersionAnddependencies( output.appendLine('No sushi-config.yaml file found.'); } - return { version: fhirVersion, dependencies: conversionDependencies }; + return { + version: fhirVersion, + dependencies: conversionDependencies, + sushiconfig: sushiConfigUri + }; } async function findMatchingSushiConfig(fileUri: Uri): Promise { @@ -137,3 +141,42 @@ function getDependenciesFromSushiConfig( } return parsedDependencies; } + +export async function findMatchingFSHResourcesForProject(fileUri: Uri): Promise { + const fshResources: string[] = []; + const configdir = dirname(fileUri.fsPath); + const files: Uri[] = await workspace.findFiles('**/*.{fsh}'); + + for (const file of files) { + if (file.fsPath.startsWith(configdir)) { + //Found FSH resource belonging to project. + const contents = await workspace.fs.readFile(file); + const decoder = new TextDecoder(); + const decodedContents = decoder.decode(contents); + fshResources.push(decodedContents); + } + } + + return fshResources; +} + +export function findNamesInFSHResource(fshContent: string): string[] { + const ids: string[] = []; + const lines = fshContent.split('\n'); + for (const line of lines) { + if (line.startsWith('CodeSystem:')) { + ids.push(line.split(' ')[1].trim()); + } else if (line.startsWith('Instance:')) { + ids.push(line.split(' ')[1].trim()); + } else if (line.startsWith('ValueSet:')) { + ids.push(line.split(' ')[1].trim()); + } else if (line.startsWith('ConceptMap:')) { + ids.push(line.split(' ')[1].trim()); + } else if (line.startsWith('Profile:')) { + ids.push(line.split(' ')[1].trim()); + } else if (line.startsWith('Extension:')) { + ids.push(line.split(' ')[1].trim()); + } + } + return ids; +} diff --git a/src/extension.ts b/src/extension.ts index b8d6d52..9d55902 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -25,7 +25,9 @@ import { FshConversionProvider, createFSHURIfromFileUri, createJSONURIfromFileUri, - findVersionAnddependencies + findVersionAnddependencies, + findMatchingFSHResourcesForProject, + findNamesInFSHResource } from './FshConversionProvider'; import { SushiBuildTaskProvider } from './SushiBuildTaskProvider'; @@ -151,8 +153,26 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { fhirFSH.clear(); const fileUri: Uri = file[0]; + const fshContent = await workspace.fs.readFile(fileUri); + const decoder = new TextDecoder(); + const fshString = decoder.decode(fshContent); + const fshNames = findNamesInFSHResource(fshString); + + fshNames.forEach(name => { + fhirFSH.appendLine('Found FSH resource in source: ' + name); + }); + const sushiConfigInfo = await findVersionAnddependencies(fileUri, fhirFSH); + let fshResourcesToConvert: string[]; + + // If there is a sushi-config there is a project wirh multiple FSH files (including the one we are converting) + if (sushiConfigInfo.sushiconfig == null) { + fshResourcesToConvert = [fshString]; + } else { + fshResourcesToConvert = await findMatchingFSHResourcesForProject(sushiConfigInfo.sushiconfig); + } + const fshtoFHIRDependencies: ImplementationGuideDependsOn[] = []; sushiConfigInfo.dependencies.forEach(dependency => { @@ -166,39 +186,38 @@ export async function conversionFSHtoFHIR(...file: any[]): Promise { const dependenciesParameter = fshtoFHIRDependencies.length === 0 ? undefined : fshtoFHIRDependencies; - workspace.fs.readFile(file[0]).then(bytes => { - const fileText = new TextDecoder().decode(bytes); - fhirFSH.appendLine('Converting FSH to FHIR...'); - fshToFhir(fileText, { - fhirVersion: sushiConfigInfo.version, - dependencies: dependenciesParameter - }) - .then(result => { - result.errors.forEach(error => { - fhirFSH.appendLine('Error: ' + error.message); - }); - - result.warnings.forEach(warning => { - fhirFSH.appendLine('Warning: ' + warning.message); - }); - // There can be multiple FHIR objects in the result - result.fhir.forEach(fhirObject => { + fhirFSH.appendLine('Converting FSH to FHIR...'); + fshToFhir(fshResourcesToConvert, { + fhirVersion: sushiConfigInfo.version, + dependencies: dependenciesParameter + }) + .then(result => { + result.errors.forEach(error => { + fhirFSH.appendLine('Error: ' + error.message); + }); + + result.warnings.forEach(warning => { + fhirFSH.appendLine('Warning: ' + warning.message); + }); + + result.fhir.forEach(fhirObject => { + if (fshNames.includes(fhirObject.id)) { const formattedText = JSON.stringify(JSON.parse(JSON.stringify(fhirObject)), null, 2); - const uri = createJSONURIfromFileUri(fileUri, result.fhir.indexOf(fhirObject) + '_'); + const uri = createJSONURIfromFileUri(fhirObject.id, ''); fshConversionProvider.updated(formattedText, uri); workspace.openTextDocument(uri).then(doc => { window.showTextDocument(doc, { preview: false, viewColumn: ViewColumn.Active }); }); - }); - }) - .catch(error => { - fhirFSH.appendLine('Error: ' + error.message); - }) - .finally(() => { - fhirFSH.appendLine('Finished!'); + } }); - }); + }) + .catch(error => { + fhirFSH.appendLine('Error: ' + error.message); + }) + .finally(() => { + fhirFSH.appendLine('Finished!'); + }); fhirFSH.show(); }