diff --git a/package-lock.json b/package-lock.json index 629e8be..0256f2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,10 +15,10 @@ "diff": "^7.0.0", "diff2html": "^3.4.48", "fhir": "^4.12.0", - "fhir-package-loader": "^2.0.1", + "fhir-package-loader": "^2.1.0", "flat": "^5.0.2", "fs-extra": "^11.2.0", - "fsh-sushi": "^3.13.1", + "fsh-sushi": "^3.14.0", "ini": "^5.0.0", "lodash": "^4.17.21", "readline-sync": "^1.4.10", @@ -2021,6 +2021,12 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "license": "Apache-2.0" + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2136,6 +2142,13 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "license": "Apache-2.0", + "optional": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3017,6 +3030,12 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -3094,9 +3113,9 @@ } }, "node_modules/fhir-package-loader": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fhir-package-loader/-/fhir-package-loader-2.0.1.tgz", - "integrity": "sha512-6TuYbOpaUySPa3dgpTrtWS51/KKWtzxHgvcZ5PAuRJS4Y0rhbWM8rZ5zhi87uqPqKIP9Sv5AvpxtyRpsTp0WwQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fhir-package-loader/-/fhir-package-loader-2.1.0.tgz", + "integrity": "sha512-QGJ7PqkJ6BhGKgIeHsElvUi3xHjwwkKDu4LQtsT5JZ+D+29FWFxyvuB6lVllqZTafGvHajxZeKKg00eK/AP6HA==", "license": "Apache-2.0", "dependencies": { "axios": "^1.7.8", @@ -3110,6 +3129,7 @@ "semver": "^7.6.3", "sql.js": "^1.12.0", "tar": "^7.4.3", + "tar-stream": "^3.1.7", "temp": "^0.9.1", "winston": "^3.17.0" }, @@ -3375,9 +3395,9 @@ } }, "node_modules/fsh-sushi": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.13.1.tgz", - "integrity": "sha512-mYpi2wyB6iHVbT4H/DU3G0EA8wq3jod0D5tN2GMZrj+F0Pg37lkqtUpsBxwrFqkec2TvyhgZMfVaYGlvjrbx/Q==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.14.0.tgz", + "integrity": "sha512-kEsAdKkM7vwt3+FLzTjDCHS024FRF9jJS1CzE+pIPEVVnPZmlYcOoSUb3wPKKLNnMG3QyoouUFWOxZNvzTAi6w==", "license": "Apache-2.0", "dependencies": { "ajv": "^8.17.1", @@ -3386,7 +3406,7 @@ "chalk": "^4.1.2", "commander": "^12.1.0", "fhir": "^4.12.0", - "fhir-package-loader": "^2.0.1", + "fhir-package-loader": "^2.1.0", "fs-extra": "^11.2.0", "html-minifier-terser": "5.1.1", "https-proxy-agent": "^7.0.5", @@ -5419,6 +5439,12 @@ ], "license": "MIT" }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "license": "MIT" + }, "node_modules/randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", @@ -5733,6 +5759,20 @@ "node": ">=10" } }, + "node_modules/streamx": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -5892,6 +5932,17 @@ "node": ">=18" } }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/tar/node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", @@ -5964,6 +6015,15 @@ "node": ">=8" } }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", @@ -8006,6 +8066,11 @@ "proxy-from-env": "^1.1.0" } }, + "b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" + }, "babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -8099,6 +8164,12 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "optional": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -8718,6 +8789,11 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, "fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -8828,9 +8904,9 @@ } }, "fhir-package-loader": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fhir-package-loader/-/fhir-package-loader-2.0.1.tgz", - "integrity": "sha512-6TuYbOpaUySPa3dgpTrtWS51/KKWtzxHgvcZ5PAuRJS4Y0rhbWM8rZ5zhi87uqPqKIP9Sv5AvpxtyRpsTp0WwQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fhir-package-loader/-/fhir-package-loader-2.1.0.tgz", + "integrity": "sha512-QGJ7PqkJ6BhGKgIeHsElvUi3xHjwwkKDu4LQtsT5JZ+D+29FWFxyvuB6lVllqZTafGvHajxZeKKg00eK/AP6HA==", "requires": { "axios": "^1.7.8", "chalk": "^4.1.2", @@ -8843,6 +8919,7 @@ "semver": "^7.6.3", "sql.js": "^1.12.0", "tar": "^7.4.3", + "tar-stream": "^3.1.7", "temp": "^0.9.1", "winston": "^3.17.0" } @@ -8991,9 +9068,9 @@ "optional": true }, "fsh-sushi": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.13.1.tgz", - "integrity": "sha512-mYpi2wyB6iHVbT4H/DU3G0EA8wq3jod0D5tN2GMZrj+F0Pg37lkqtUpsBxwrFqkec2TvyhgZMfVaYGlvjrbx/Q==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/fsh-sushi/-/fsh-sushi-3.14.0.tgz", + "integrity": "sha512-kEsAdKkM7vwt3+FLzTjDCHS024FRF9jJS1CzE+pIPEVVnPZmlYcOoSUb3wPKKLNnMG3QyoouUFWOxZNvzTAi6w==", "requires": { "ajv": "^8.17.1", "antlr4": "^4.13.2", @@ -9001,7 +9078,7 @@ "chalk": "^4.1.2", "commander": "^12.1.0", "fhir": "^4.12.0", - "fhir-package-loader": "^2.0.1", + "fhir-package-loader": "^2.1.0", "fs-extra": "^11.2.0", "html-minifier-terser": "5.1.1", "https-proxy-agent": "^7.0.5", @@ -10526,6 +10603,11 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, "randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", @@ -10757,6 +10839,17 @@ "escape-string-regexp": "^2.0.0" } }, + "streamx": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", + "requires": { + "bare-events": "^2.2.0", + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -10870,6 +10963,16 @@ } } }, + "tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "requires": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "temp": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", @@ -10917,6 +11020,14 @@ "minimatch": "^3.0.4" } }, + "text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "requires": { + "b4a": "^1.6.4" + } + }, "text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", diff --git a/package.json b/package.json index 131a95d..5ca9958 100644 --- a/package.json +++ b/package.json @@ -73,10 +73,10 @@ "diff": "^7.0.0", "diff2html": "^3.4.48", "fhir": "^4.12.0", - "fhir-package-loader": "^2.0.1", + "fhir-package-loader": "^2.1.0", "flat": "^5.0.2", "fs-extra": "^11.2.0", - "fsh-sushi": "^3.13.1", + "fsh-sushi": "^3.14.0", "ini": "^5.0.0", "lodash": "^4.17.21", "readline-sync": "^1.4.10", diff --git a/src/processor/LakeOfFHIR.ts b/src/processor/LakeOfFHIR.ts index 1ca057a..897752a 100644 --- a/src/processor/LakeOfFHIR.ts +++ b/src/processor/LakeOfFHIR.ts @@ -144,6 +144,10 @@ export class LakeOfFHIR implements utils.Fishable { return this.defs.fishForMetadata(item, ...types); } + fishForMetadatas(item: string, ...types: utils.Type[]): utils.Metadata[] { + return this.defs.fishForMetadatas(item, ...types); + } + /** * Removes any definitions from this.docs that have the same resourceType and id as * a previous definition, as long as there is a defined id. diff --git a/src/utils/MasterFisher.ts b/src/utils/MasterFisher.ts index 3f2a32d..ba7abab 100644 --- a/src/utils/MasterFisher.ts +++ b/src/utils/MasterFisher.ts @@ -42,4 +42,11 @@ export class MasterFisher implements utils.Fishable { this.external?.fishForMetadata(item, ...types) ); } + + fishForMetadatas(item: string, ...types: utils.Type[]): utils.Metadata[] { + return [ + ...this.lakeOfFHIR.fishForMetadatas(item, ...types), + ...(this.external?.fishForMetadatas(item, ...types) ?? []) + ]; + } } diff --git a/test/utils/MasterFisher.test.ts b/test/utils/MasterFisher.test.ts index 4c3bff1..f65d8d7 100644 --- a/test/utils/MasterFisher.test.ts +++ b/test/utils/MasterFisher.test.ts @@ -90,6 +90,27 @@ describe('MasterFisher', () => { }); }); + describe('#fishForMetadatas', () => { + let lakeSpy: jest.SpyInstance; + let fhirSpy: jest.SpyInstance; + + beforeEach(() => { + lakeSpy = jest.spyOn(lake, 'fishForMetadatas'); + fhirSpy = jest.spyOn(fhir, 'fishForMetadatas'); + }); + + afterEach(() => jest.clearAllMocks()); + + it('should return all matches from the lake and the FHIR defs', () => { + lakeSpy.mockReturnValue([RESOURCE_A_METADATA]); + fhirSpy.mockReturnValue([RESOURCE_B_METADATA]); + expect(fisher.fishForMetadatas('Foo', utils.Type.Resource)).toEqual([ + RESOURCE_A_METADATA, + RESOURCE_B_METADATA + ]); + }); + }); + describe('#lakeOfFHIR', () => { afterEach(() => jest.clearAllMocks());