fhirsmith 0.18.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ACCESSIBILITY.md +119 -0
- package/CHANGELOG.md +149 -0
- package/CONFIGURATION.md +305 -0
- package/LICENSE +29 -0
- package/README.md +29 -122
- package/cluster.js +1220 -0
- package/cluster.md +707 -0
- package/config-template.json +77 -8
- package/extension-tracker/extension-tracker-template.html +5 -8
- package/extension-tracker/extension-tracker.js +0 -2
- package/folder/folder.js +7 -6
- package/ips/analysis.js +560 -0
- package/ips/ips-template.html +5 -8
- package/ips/ips.js +132 -59
- package/ips/nationality.js +120 -0
- package/ips/pipeline.js +74 -21
- package/ips/presenter.js +1 -1
- package/ips/readme.md +132 -25
- package/ips/render.js +466 -77
- package/ips/store.js +79 -22
- package/ips/structure.js +247 -0
- package/ips/terminology.js +1 -1
- package/library/body-limit.js +22 -0
- package/library/cache-generation.js +15 -0
- package/library/cgroup-memory.js +133 -1
- package/library/cluster-counts.js +121 -0
- package/library/cluster-events.js +153 -0
- package/library/cluster-metrics.js +193 -0
- package/library/cluster-status.js +468 -0
- package/library/config-reader.js +96 -0
- package/library/daily-report.js +100 -2
- package/library/html-server.js +27 -1
- package/library/i18nsupport.js +23 -1
- package/library/keep-alive.js +18 -0
- package/library/languages.js +17 -3
- package/library/logger.js +31 -0
- package/library/memory-guard.js +428 -0
- package/library/native-memory.js +52 -0
- package/library/npm-audit.js +51 -25
- package/library/openapi-doc.js +7 -5
- package/library/package-manager.js +8 -0
- package/library/role.js +197 -0
- package/library/server-credentials.js +169 -0
- package/library/sqlite-utilities.js +59 -0
- package/library/ssrf-guard.js +100 -0
- package/library/static-response-stats.js +16 -0
- package/library/version-utilities.js +50 -0
- package/library/worker-count.js +192 -0
- package/nginx.md +30 -11
- package/npmprojector/indexer.js +18 -10
- package/package.json +11 -8
- package/packages/feed-check-page.js +117 -0
- package/packages/feed-check.js +279 -0
- package/packages/npm-check.js +57 -3
- package/packages/npm-signing.js +219 -0
- package/packages/openapi.yaml +207 -1
- package/packages/package-crawler.js +322 -41
- package/packages/packages-template.html +6 -8
- package/packages/packages.js +604 -57
- package/packages/readme.md +113 -1
- package/publisher/publisher-template.html +2 -5
- package/publisher/publisher.js +121 -110
- package/publisher/readme.md +75 -0
- package/registry/crawler.js +84 -108
- package/registry/documentation/configuration.md +34 -0
- package/registry/registry-template.html +5 -8
- package/registry/registry.js +5 -4
- package/root-bare-template.html +7 -4
- package/root-template.html +5 -8
- package/server.js +398 -198
- package/shl/shl.js +38 -37
- package/static/a11y/a11y-check.js +832 -0
- package/static/a11y/axe.min.js +12 -0
- package/static/assets/css/bootstrap-fhir.css +15 -15
- package/static/assets/images/flags/au.svg +18 -0
- package/static/assets/images/flags/unknown.svg +11 -0
- package/static/assets/images/flags/us.svg +63 -0
- package/static/assets/images/icon_audit.png +0 -0
- package/static/assets/images/icon_clinical.png +0 -0
- package/static/assets/images/icon_document.png +0 -0
- package/static/assets/images/icon_external.png +0 -0
- package/static/assets/images/icon_medication.png +0 -0
- package/static/assets/images/icon_organization.png +0 -0
- package/static/assets/images/icon_other.png +0 -0
- package/static/assets/images/icon_person.png +0 -0
- package/static/assets/images/icon_section.png +0 -0
- package/stats-db.js +45 -0
- package/stats.js +197 -10
- package/testing/testing-template.html +5 -8
- package/token/nginx_passport_setup.md +1 -1
- package/token/security_guide.md +1 -1
- package/token/token-template.html +2 -5
- package/token/token.js +40 -36
- package/translations/Messages.properties +19 -0
- package/tx/README.md +154 -4
- package/tx/closure/closure-store.js +126 -3
- package/tx/cm/cm-database.js +69 -57
- package/tx/cm/cm-package.js +29 -1
- package/tx/cs/cs-api.js +284 -19
- package/tx/cs/cs-api.md +41 -4
- package/tx/cs/cs-areacode.js +1 -1
- package/tx/cs/cs-country.js +17 -5
- package/tx/cs/cs-cpt.js +33 -16
- package/tx/cs/cs-cs.js +148 -14
- package/tx/cs/cs-currency.js +1 -1
- package/tx/cs/cs-icd11.js +21 -13
- package/tx/cs/cs-icf.js +22 -3
- package/tx/cs/cs-lang.js +2 -2
- package/tx/cs/cs-loinc.js +185 -66
- package/tx/cs/cs-mimetypes.js +12 -2
- package/tx/cs/cs-ndc.js +40 -25
- package/tx/cs/cs-omop.js +54 -29
- package/tx/cs/cs-rxnorm.js +300 -196
- package/tx/cs/cs-snomed.js +608 -64
- package/tx/cs/cs-ucum.js +14 -4
- package/tx/cs/cs-unii.js +18 -14
- package/tx/cs/cs-virtual.js +210 -0
- package/tx/ecosystem-resolver.js +413 -0
- package/tx/html/cluster-dash-metrics.liquid +26 -0
- package/tx/html/cluster-home-metrics.liquid +31 -0
- package/tx/html/cluster-metrics-script.liquid +251 -0
- package/tx/html/codesystem-operations.liquid +3 -3
- package/tx/html/ecl-panel.liquid +1 -1
- package/tx/html/external-metrics.liquid +17 -0
- package/tx/html/operations-form.liquid +17 -17
- package/tx/html/search-form.liquid +11 -11
- package/tx/html/status-line.liquid +58 -0
- package/tx/html/status-panel.liquid +140 -0
- package/tx/html/status-tasks.liquid +25 -0
- package/tx/html/tx-template.html +2 -5
- package/tx/importers/atc-to-fhir.js +17 -16
- package/tx/importers/export-icd11-codesystem.js +3 -2
- package/tx/importers/import-icd11.js +4 -3
- package/tx/importers/import-loinc.module.js +118 -56
- package/tx/importers/import-ndc.module.js +56 -44
- package/tx/importers/import-rxnorm.module.js +118 -79
- package/tx/importers/import-sct.module.js +57 -58
- package/tx/importers/import-unii.module.js +37 -36
- package/tx/importers/subset-loinc.module.js +49 -48
- package/tx/importers/subset-rxnorm.module.js +29 -28
- package/tx/importers/terminal.js +18 -0
- package/tx/importers/tx-import-base.js +13 -12
- package/tx/importers/tx-import-settings.js +5 -4
- package/tx/importers/tx-import.js +53 -52
- package/tx/library/canonical-resource.js +49 -0
- package/tx/library/codesystem.js +94 -5
- package/tx/library/designations.js +45 -2
- package/tx/library/extensions.js +13 -7
- package/tx/library/implicit-valuesets.js +66 -0
- package/tx/library/renderer.js +77 -21
- package/tx/library/sqlite-utilities.js +2 -0
- package/tx/library/ucum-parsers.js +11 -1
- package/tx/library/wait-for-cache.js +43 -0
- package/tx/library.js +321 -22
- package/tx/openapi-operations.js +6 -4
- package/tx/operation-context.js +460 -99
- package/tx/params.js +25 -0
- package/tx/problems.js +3 -5
- package/tx/provider.js +278 -42
- package/tx/resource-cache-sqlite.js +1050 -0
- package/tx/sct/ecl.js +47 -6
- package/tx/sct/editions.js +39 -0
- package/tx/sct/expressions.js +10 -1
- package/tx/sct/load-config.js +107 -0
- package/tx/sct/mmap.js +109 -0
- package/tx/sct/structures.js +166 -13
- package/tx/sct/text-index.js +5 -1
- package/tx/syndication/syndication-feed.js +2 -2
- package/tx/tx-html.js +44 -8
- package/tx/tx.fhir.org.yml +8 -8
- package/tx/tx.js +282 -80
- package/tx/usage-tracker.js +39 -11
- package/tx/vs/vs-api.js +19 -0
- package/tx/vs/vs-database.js +386 -62
- package/tx/vs/vs-package.js +27 -4
- package/tx/vs/vs-vsac.js +648 -100
- package/tx/workers/batch-validate.js +37 -10
- package/tx/workers/batch.js +6 -1
- package/tx/workers/cache-control.js +15 -4
- package/tx/workers/closure.js +156 -13
- package/tx/workers/compare.js +8 -5
- package/tx/workers/expand.js +1173 -289
- package/tx/workers/metadata.js +35 -0
- package/tx/workers/search.js +53 -1
- package/tx/workers/supplement-filters.js +145 -0
- package/tx/workers/translate.js +169 -4
- package/tx/workers/validate.js +223 -119
- package/tx/workers/worker.js +123 -31
- package/tx/xversion/xv-valueset.js +7 -4
- package/utilities/submit-test-report.js +3 -1
- package/utilities/tx-stress-test.js +482 -0
- package/vcl/readme.md +37 -0
- package/vcl/vcl-parser.js +15 -0
- package/xig/readme.md +52 -0
- package/xig/xig-template.html +5 -8
- package/xig/xig.js +238 -422
- package/changelog-template.md +0 -22
- package/registry/test-runner.js +0 -237
- package/release.sh +0 -80
- package/test-scripts/repro-re2-wasm-leak.js +0 -34
- package/tsconfig.eslint.json +0 -9
- package/tx/html/dash-metrics.liquid +0 -147
- package/tx/html/home-metrics.liquid +0 -225
package/tx/vs/vs-package.js
CHANGED
|
@@ -9,6 +9,7 @@ const { VersionUtilities } = require('../../library/version-utilities');
|
|
|
9
9
|
const {validateParameter} = require("../../library/utilities");
|
|
10
10
|
const { applyIdPrefix, stripIdPrefix } = require('../library/resource-ids');
|
|
11
11
|
const { keepForPinnedReference } = require('../library/tho-precedence');
|
|
12
|
+
const { waitForCache } = require('../library/wait-for-cache');
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Package-based ValueSet provider using shared database layer
|
|
@@ -18,15 +19,19 @@ class PackageValueSetProvider extends AbstractValueSetProvider {
|
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* @param {PackageContentLoader} packageLoader - Path to the extracted package folder
|
|
22
|
+
* @param {Object} [options]
|
|
23
|
+
* @param {boolean} [options.readOnly] - a tx-worker (cluster.md): the cache is the master's; it
|
|
24
|
+
* is opened read-only, waited for until the master has finished it, and never built or changed
|
|
21
25
|
*/
|
|
22
|
-
constructor(packageLoader) {
|
|
26
|
+
constructor(packageLoader, options = {}) {
|
|
23
27
|
super();
|
|
24
28
|
validateParameter(packageLoader, "packageLoader", PackageContentLoader);
|
|
25
29
|
this.packageLoader = packageLoader;
|
|
26
30
|
// -2: caches from before value sets were checked for active content in their narrative
|
|
27
31
|
// are rebuilt (see initialize)
|
|
28
32
|
this.dbPath = path.join(packageLoader.packageFolder, '.valuesets-2.db');
|
|
29
|
-
this.
|
|
33
|
+
this.readOnly = !!options.readOnly;
|
|
34
|
+
this.database = new ValueSetDatabase(this.dbPath, { readOnly: this.readOnly });
|
|
30
35
|
this.valueSetMap = new Map();
|
|
31
36
|
this.initialized = false;
|
|
32
37
|
this.count = 0;
|
|
@@ -49,6 +54,13 @@ class PackageValueSetProvider extends AbstractValueSetProvider {
|
|
|
49
54
|
return;
|
|
50
55
|
}
|
|
51
56
|
await this.packageLoader.initialize();
|
|
57
|
+
if (this.readOnly) {
|
|
58
|
+
await waitForCache(async () => (await this.database.exists()) && (await this.database.isComplete()),
|
|
59
|
+
`Package ${this.packageLoader.pid ? this.packageLoader.pid() : ''}: value set cache ${this.dbPath}`);
|
|
60
|
+
this.valueSetMap = await this.database.loadAllValueSets(this.sourcePackage());
|
|
61
|
+
this.#finishLoad();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
52
64
|
await fs.rm(path.join(this.packageLoader.packageFolder, '.valuesets.db'), { force: true }); // the old cache
|
|
53
65
|
|
|
54
66
|
// A cache is only used once its population finished. One that was cut short
|
|
@@ -77,7 +89,10 @@ class PackageValueSetProvider extends AbstractValueSetProvider {
|
|
|
77
89
|
await this.#buildDatabase();
|
|
78
90
|
this.valueSetMap = await this.database.loadAllValueSets(this.sourcePackage());
|
|
79
91
|
}
|
|
92
|
+
this.#finishLoad();
|
|
93
|
+
}
|
|
80
94
|
|
|
95
|
+
#finishLoad() {
|
|
81
96
|
// Mark each value set as cached as it enters the store: it is retained in
|
|
82
97
|
// memory for the process lifetime, so its compose.include.filter elements
|
|
83
98
|
// persist and a provider may memoise resolved filter analysis on them
|
|
@@ -292,6 +307,13 @@ class PackageValueSetProvider extends AbstractValueSetProvider {
|
|
|
292
307
|
isMatch = false;
|
|
293
308
|
break;
|
|
294
309
|
}
|
|
310
|
+
} else if (param === 'version') {
|
|
311
|
+
// version-aware matching, on the version as asked for (not lower cased)
|
|
312
|
+
const asked = searchParams.find(sp => sp.name === 'version').value;
|
|
313
|
+
if (!VersionUtilities.versionSearchMatches(asked, json.version, VersionUtilities.versionAlgorithmOf(json))) {
|
|
314
|
+
isMatch = false;
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
295
317
|
} else if (param === 'jurisdiction') {
|
|
296
318
|
// Special handling for jurisdiction - array of CodeableConcept
|
|
297
319
|
if (!this._matchJurisdiction(json.jurisdiction, searchValue)) {
|
|
@@ -305,8 +327,9 @@ class PackageValueSetProvider extends AbstractValueSetProvider {
|
|
|
305
327
|
break;
|
|
306
328
|
}
|
|
307
329
|
} else if (param === 'url') {
|
|
308
|
-
|
|
309
|
-
|
|
330
|
+
// a left match, on the url as asked for (not lower cased)
|
|
331
|
+
const asked = searchParams.find(sp => sp.name === 'url').value;
|
|
332
|
+
if (!(json.url || '').startsWith(asked)) {
|
|
310
333
|
isMatch = false;
|
|
311
334
|
break;
|
|
312
335
|
}
|