fhirsmith 0.3.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/CHANGELOG.md +42 -0
- package/FHIRsmith.png +0 -0
- package/README.md +277 -0
- package/config-template.json +144 -0
- package/library/folder-setup.js +58 -0
- package/library/html-server.js +166 -0
- package/library/html.js +835 -0
- package/library/i18nsupport.js +259 -0
- package/library/languages.js +779 -0
- package/library/logger-telnet.js +205 -0
- package/library/logger.js +279 -0
- package/library/package-manager.js +876 -0
- package/library/utilities.js +196 -0
- package/library/version-utilities.js +1056 -0
- package/npmprojector/config-example.json +13 -0
- package/npmprojector/indexer.js +394 -0
- package/npmprojector/npmprojector.js +395 -0
- package/npmprojector/readme.md +174 -0
- package/npmprojector/watcher.js +335 -0
- package/package.json +119 -0
- package/packages/package-crawler.js +846 -0
- package/packages/packages-template.html +126 -0
- package/packages/packages.js +2838 -0
- package/passwords.ini +2 -0
- package/publisher/publisher-template.html +208 -0
- package/publisher/publisher.js +2167 -0
- package/publisher/task-draft.js +458 -0
- package/registry/api.js +735 -0
- package/registry/crawler.js +637 -0
- package/registry/model.js +513 -0
- package/registry/readme.md +243 -0
- package/registry/registry-data.json +121015 -0
- package/registry/registry-template.html +126 -0
- package/registry/registry.js +1395 -0
- package/registry/test-runner.js +237 -0
- package/root-template.html +124 -0
- package/server.js +524 -0
- package/shl/private-key.pem +5 -0
- package/shl/public-key.pem +18 -0
- package/shl/shl.js +1125 -0
- package/shl/vhl.js +69 -0
- package/static/FHIRsmith128.png +0 -0
- package/static/FHIRsmith16.png +0 -0
- package/static/FHIRsmith32.png +0 -0
- package/static/FHIRsmith64.png +0 -0
- package/static/assets/css/bootstrap-fhir.css +5302 -0
- package/static/assets/css/bootstrap-glyphicons.css +2 -0
- package/static/assets/css/bootstrap.css +4097 -0
- package/static/assets/css/jquery-ui.css +523 -0
- package/static/assets/css/jquery-ui.structure.css +863 -0
- package/static/assets/css/jquery-ui.structure.min.css +5 -0
- package/static/assets/css/jquery-ui.theme.css +439 -0
- package/static/assets/css/jquery-ui.theme.min.css +5 -0
- package/static/assets/css/jquery.ui.all.css +7 -0
- package/static/assets/css/modules.css +18 -0
- package/static/assets/css/project.css +367 -0
- package/static/assets/css/pygments-manni.css +66 -0
- package/static/assets/css/tags.css +74 -0
- package/static/assets/css/xml.css +2 -0
- package/static/assets/fonts/glyphiconshalflings-regular.eot +0 -0
- package/static/assets/fonts/glyphiconshalflings-regular.otf +0 -0
- package/static/assets/fonts/glyphiconshalflings-regular.svg +175 -0
- package/static/assets/fonts/glyphiconshalflings-regular.ttf +0 -0
- package/static/assets/fonts/glyphiconshalflings-regular.woff +0 -0
- package/static/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
- package/static/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
- package/static/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
- package/static/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
- package/static/assets/ico/favicon.ico +0 -0
- package/static/assets/ico/favicon.png +0 -0
- package/static/assets/images/fhir-logo-www.png +0 -0
- package/static/assets/images/fhir-logo.png +0 -0
- package/static/assets/images/hl7-logo.png +0 -0
- package/static/assets/images/logo_ansinew.jpg +0 -0
- package/static/assets/images/search.png +0 -0
- package/static/assets/images/stripe.png +0 -0
- package/static/assets/images/target.png +0 -0
- package/static/assets/images/tx-registry-root.gif +0 -0
- package/static/assets/images/tx-registry.png +0 -0
- package/static/assets/images/tx-server.png +0 -0
- package/static/assets/images/tx-version.png +0 -0
- package/static/assets/js/bootstrap.min.js +6 -0
- package/static/assets/js/fhir-gw.js +259 -0
- package/static/assets/js/fhir.js +2 -0
- package/static/assets/js/html5shiv.js +8 -0
- package/static/assets/js/jcookie.js +96 -0
- package/static/assets/js/jquery-ui.min.js +6 -0
- package/static/assets/js/jquery.js +10716 -0
- package/static/assets/js/jquery.min.js +2 -0
- package/static/assets/js/jquery.ui.core.js +314 -0
- package/static/assets/js/jquery.ui.draggable.js +825 -0
- package/static/assets/js/jquery.ui.mouse.js +162 -0
- package/static/assets/js/jquery.ui.resizable.js +842 -0
- package/static/assets/js/jquery.ui.widget.js +268 -0
- package/static/assets/js/json2.js +487 -0
- package/static/assets/js/jtip.js +97 -0
- package/static/assets/js/respond.min.js +6 -0
- package/static/assets/js/statuspage.js +70 -0
- package/static/assets/js/xml.js +2 -0
- package/static/dist/js/bootstrap.js +1964 -0
- package/static/favicon.png +0 -0
- package/static/fhir.css +626 -0
- package/static/icon-fhir-16.png +0 -0
- package/static/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- package/static/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- package/static/images/ui-bg_flat_10_000000_40x100.png +0 -0
- package/static/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- package/static/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- package/static/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- package/static/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- package/static/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- package/static/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- package/static/images/ui-icons_222222_256x240.png +0 -0
- package/static/images/ui-icons_228ef1_256x240.png +0 -0
- package/static/images/ui-icons_ef8c08_256x240.png +0 -0
- package/static/images/ui-icons_ffd27a_256x240.png +0 -0
- package/static/images/ui-icons_ffffff_256x240.png +0 -0
- package/static/js/jquery.effects.blind.js +49 -0
- package/static/js/jquery.effects.bounce.js +78 -0
- package/static/js/jquery.effects.clip.js +54 -0
- package/static/js/jquery.effects.core.js +763 -0
- package/static/js/jquery.effects.drop.js +50 -0
- package/static/js/jquery.effects.explode.js +79 -0
- package/static/js/jquery.effects.fade.js +32 -0
- package/static/js/jquery.effects.fold.js +56 -0
- package/static/js/jquery.effects.highlight.js +50 -0
- package/static/js/jquery.effects.pulsate.js +51 -0
- package/static/js/jquery.effects.scale.js +178 -0
- package/static/js/jquery.effects.shake.js +57 -0
- package/static/js/jquery.effects.slide.js +50 -0
- package/static/js/jquery.effects.transfer.js +45 -0
- package/static/js/jquery.ui.accordion.js +611 -0
- package/static/js/jquery.ui.autocomplete.js +612 -0
- package/static/js/jquery.ui.button.js +416 -0
- package/static/js/jquery.ui.datepicker.js +1823 -0
- package/static/js/jquery.ui.dialog.js +878 -0
- package/static/js/jquery.ui.droppable.js +296 -0
- package/static/js/jquery.ui.position.js +252 -0
- package/static/js/jquery.ui.progressbar.js +109 -0
- package/static/js/jquery.ui.selectable.js +266 -0
- package/static/js/jquery.ui.slider.js +666 -0
- package/static/js/jquery.ui.sortable.js +1077 -0
- package/static/js/jquery.ui.tabs.js +758 -0
- package/stats.js +80 -0
- package/test-cache/vsac/vsac-valuesets.db +0 -0
- package/token/nginx_passport_setup.md +383 -0
- package/token/security_guide.md +294 -0
- package/token/token-template.html +330 -0
- package/token/token.js +1300 -0
- package/translations/Messages.properties +1510 -0
- package/translations/Messages_ar.properties +1399 -0
- package/translations/Messages_de.properties +836 -0
- package/translations/Messages_es.properties +737 -0
- package/translations/Messages_fr.properties +1 -0
- package/translations/Messages_ja.properties +893 -0
- package/translations/Messages_nl.properties +1357 -0
- package/translations/Messages_pt.properties +1302 -0
- package/translations/Messages_ru.properties +1 -0
- package/translations/Messages_uz.properties +1 -0
- package/translations/Messages_zh.properties +1 -0
- package/translations/rendering-phrases.properties +1128 -0
- package/translations/rendering-phrases_ar.properties +1091 -0
- package/translations/rendering-phrases_de.properties +6 -0
- package/translations/rendering-phrases_es.properties +6 -0
- package/translations/rendering-phrases_fr.properties +624 -0
- package/translations/rendering-phrases_ja.properties +21 -0
- package/translations/rendering-phrases_nl.properties +970 -0
- package/translations/rendering-phrases_pt.properties +1020 -0
- package/translations/rendering-phrases_ru.properties +1094 -0
- package/translations/rendering-phrases_uz.properties +1 -0
- package/translations/rendering-phrases_zh.properties +1 -0
- package/tx/README.md +418 -0
- package/tx/cm/cm-api.js +110 -0
- package/tx/cm/cm-database.js +735 -0
- package/tx/cm/cm-package.js +325 -0
- package/tx/cs/cs-api.js +789 -0
- package/tx/cs/cs-areacode.js +615 -0
- package/tx/cs/cs-country.js +1110 -0
- package/tx/cs/cs-cpt.js +785 -0
- package/tx/cs/cs-cs.js +1579 -0
- package/tx/cs/cs-currency.js +539 -0
- package/tx/cs/cs-db.js +1321 -0
- package/tx/cs/cs-hgvs.js +329 -0
- package/tx/cs/cs-lang.js +465 -0
- package/tx/cs/cs-loinc.js +1485 -0
- package/tx/cs/cs-mimetypes.js +238 -0
- package/tx/cs/cs-ndc.js +704 -0
- package/tx/cs/cs-omop.js +1025 -0
- package/tx/cs/cs-provider-api.js +43 -0
- package/tx/cs/cs-provider-list.js +37 -0
- package/tx/cs/cs-rxnorm.js +808 -0
- package/tx/cs/cs-snomed.js +1102 -0
- package/tx/cs/cs-ucum.js +514 -0
- package/tx/cs/cs-unii.js +271 -0
- package/tx/cs/cs-uri.js +218 -0
- package/tx/cs/cs-usstates.js +305 -0
- package/tx/dev.fhir.org.yml +14 -0
- package/tx/fixtures/test-cases-setup.json +18 -0
- package/tx/fixtures/test-cases.yml +16 -0
- package/tx/html/codesystem-operations.liquid +25 -0
- package/tx/html/home-metrics.liquid +247 -0
- package/tx/html/operations-form.liquid +148 -0
- package/tx/html/search-form.liquid +62 -0
- package/tx/html/tx-template.html +133 -0
- package/tx/html/valueset-operations.liquid +54 -0
- package/tx/importers/atc-to-fhir.js +316 -0
- package/tx/importers/import-loinc.module.js +1536 -0
- package/tx/importers/import-ndc.module.js +1088 -0
- package/tx/importers/import-rxnorm.module.js +898 -0
- package/tx/importers/import-sct.module.js +2457 -0
- package/tx/importers/import-unii.module.js +601 -0
- package/tx/importers/readme.md +453 -0
- package/tx/importers/subset-loinc.module.js +1081 -0
- package/tx/importers/subset-rxnorm.module.js +938 -0
- package/tx/importers/tx-import-base.js +351 -0
- package/tx/importers/tx-import-settings.js +310 -0
- package/tx/importers/tx-import.js +357 -0
- package/tx/library/canonical-resource.js +88 -0
- package/tx/library/capabilitystatement.js +292 -0
- package/tx/library/codesystem.js +774 -0
- package/tx/library/conceptmap.js +568 -0
- package/tx/library/designations.js +932 -0
- package/tx/library/errors.js +77 -0
- package/tx/library/extensions.js +117 -0
- package/tx/library/namingsystem.js +322 -0
- package/tx/library/operation-outcome.js +127 -0
- package/tx/library/parameters.js +105 -0
- package/tx/library/renderer.js +1559 -0
- package/tx/library/terminologycapabilities.js +418 -0
- package/tx/library/ucum-parsers.js +1029 -0
- package/tx/library/ucum-service.js +370 -0
- package/tx/library/ucum-types.js +1099 -0
- package/tx/library/valueset.js +543 -0
- package/tx/library.js +676 -0
- package/tx/ocl/cm-ocl.js +106 -0
- package/tx/ocl/cs-ocl.js +39 -0
- package/tx/ocl/vs-ocl.js +105 -0
- package/tx/operation-context.js +568 -0
- package/tx/params.js +613 -0
- package/tx/provider.js +403 -0
- package/tx/sct/ecl.js +1560 -0
- package/tx/sct/expressions.js +2077 -0
- package/tx/sct/structures.js +1396 -0
- package/tx/tx-html.js +1063 -0
- package/tx/tx.fhir.org.yml +39 -0
- package/tx/tx.js +927 -0
- package/tx/vs/vs-api.js +112 -0
- package/tx/vs/vs-database.js +786 -0
- package/tx/vs/vs-package.js +358 -0
- package/tx/vs/vs-vsac.js +366 -0
- package/tx/workers/batch-validate.js +129 -0
- package/tx/workers/batch.js +361 -0
- package/tx/workers/closure.js +32 -0
- package/tx/workers/expand.js +1845 -0
- package/tx/workers/lookup.js +407 -0
- package/tx/workers/metadata.js +467 -0
- package/tx/workers/operations.js +34 -0
- package/tx/workers/read.js +164 -0
- package/tx/workers/search.js +384 -0
- package/tx/workers/subsumes.js +334 -0
- package/tx/workers/translate.js +492 -0
- package/tx/workers/validate.js +2504 -0
- package/tx/workers/worker.js +904 -0
- package/tx/xml/capabilitystatement-xml.js +63 -0
- package/tx/xml/codesystem-xml.js +62 -0
- package/tx/xml/conceptmap-xml.js +65 -0
- package/tx/xml/namingsystem-xml.js +65 -0
- package/tx/xml/operationoutcome-xml.js +127 -0
- package/tx/xml/parameters-xml.js +312 -0
- package/tx/xml/terminologycapabilities-xml.js +64 -0
- package/tx/xml/valueset-xml.js +64 -0
- package/tx/xml/xml-base.js +603 -0
- package/vcl/vcl-parser.js +1098 -0
- package/vcl/vcl.js +253 -0
- package/windows-install.js +19 -0
- package/xig/xig-template.html +124 -0
- package/xig/xig.js +3049 -0
package/tx/ocl/cm-ocl.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for Concept Map providers
|
|
3
|
+
* Defines the interface that all Concept Map providers must implement
|
|
4
|
+
*/
|
|
5
|
+
// eslint-disable-next-line no-unused-vars
|
|
6
|
+
class OCLConceptMapProvider {
|
|
7
|
+
/**
|
|
8
|
+
* {int} Unique number assigned to this provider
|
|
9
|
+
*/
|
|
10
|
+
spaceId;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* ensure that the ids on the Concept Maps are unique, if they are
|
|
14
|
+
* in the global namespace
|
|
15
|
+
*
|
|
16
|
+
* @param {Set<String>} ids
|
|
17
|
+
*/
|
|
18
|
+
// eslint-disable-next-line no-unused-vars
|
|
19
|
+
assignIds(ids) {
|
|
20
|
+
throw new Error('assignIds must be implemented by AbstractConceptMapProvider subclass');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Fetches a specific Concept Map by URL and version
|
|
25
|
+
* @param {string} url - The URL/identifier of the Concept Map
|
|
26
|
+
* @param {string} version - The version of the Concept Map
|
|
27
|
+
* @returns {Promise<ConceptMap>} The requested Concept Map
|
|
28
|
+
* @throws {Error} Must be implemented by subclasses
|
|
29
|
+
*/
|
|
30
|
+
// eslint-disable-next-line no-unused-vars
|
|
31
|
+
async fetchConceptMap(url, version) {
|
|
32
|
+
throw new Error('fetchConceptMap must be implemented by subclass');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Fetches a specific Concept Map by id. ConceptMap providers must enforce that Concept Map ids are unique
|
|
37
|
+
* either globally (as enforced by assignIds) or in their space
|
|
38
|
+
*
|
|
39
|
+
* @param {string} id - The id of the Concept Map
|
|
40
|
+
* @returns {Promise<ConceptMap>} The requested Concept Map
|
|
41
|
+
* @throws {Error} Must be implemented by subclasses
|
|
42
|
+
*/
|
|
43
|
+
// eslint-disable-next-line no-unused-vars
|
|
44
|
+
async fetchConceptMapById(id) {
|
|
45
|
+
throw new Error('fetchConceptMapById must be implemented by subclass');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Searches for Concept Maps based on provided criteria
|
|
50
|
+
* @param {Array<{name: string, value: string}>} searchParams - List of name/value pairs for search criteria
|
|
51
|
+
* @returns {Promise<Array<ConceptMap>>} List of matching Concept Maps
|
|
52
|
+
* @throws {Error} Must be implemented by subclasses
|
|
53
|
+
*/
|
|
54
|
+
// eslint-disable-next-line no-unused-vars
|
|
55
|
+
async searchConceptMaps(searchParams, elements = null) {
|
|
56
|
+
throw new Error('searchConceptMaps must be implemented by subclass');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Validates search parameters
|
|
61
|
+
* @param {Array<{name: string, value: string}>} searchParams - Search parameters to validate
|
|
62
|
+
* @protected
|
|
63
|
+
*/
|
|
64
|
+
_validateSearchParams(searchParams) {
|
|
65
|
+
if (!Array.isArray(searchParams)) {
|
|
66
|
+
throw new Error('Search parameters must be an array');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
for (const param of searchParams) {
|
|
70
|
+
if (!param || typeof param !== 'object') {
|
|
71
|
+
throw new Error('Each search parameter must be an object');
|
|
72
|
+
}
|
|
73
|
+
if (typeof param.name !== 'string' || typeof param.value !== 'string') {
|
|
74
|
+
throw new Error('Search parameter must have string name and value properties');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Validates URL and version parameters
|
|
81
|
+
* @param {string} url - URL to validate
|
|
82
|
+
* @param {string} version - Version to validate
|
|
83
|
+
* @protected
|
|
84
|
+
*/
|
|
85
|
+
_validateFetchParams(url, version) {
|
|
86
|
+
if (typeof url !== 'string' || !url.trim()) {
|
|
87
|
+
throw new Error('URL must be a non-empty string');
|
|
88
|
+
}
|
|
89
|
+
if (version != null && typeof version !== 'string') {
|
|
90
|
+
throw new Error('Version must be a string');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// eslint-disable-next-line no-unused-vars
|
|
95
|
+
async findConceptMapForTranslation(opContext, conceptMaps, sourceSystem, sourceScope, targetScope, targetSystem) {
|
|
96
|
+
// nothing
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
cmCount() {
|
|
100
|
+
return 0;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
module.exports = {
|
|
105
|
+
AbstractConceptMapProvider
|
|
106
|
+
};
|
package/tx/ocl/cs-ocl.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for value set providers
|
|
3
|
+
* Defines the interface that all value set providers must implement
|
|
4
|
+
*/
|
|
5
|
+
// eslint-disable-next-line no-unused-vars
|
|
6
|
+
class OCLCodeSystemProvider {
|
|
7
|
+
/**
|
|
8
|
+
* {int} Unique number assigned to this provider
|
|
9
|
+
*/
|
|
10
|
+
spaceId;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* ensure that the ids on the code systems are unique, if they are
|
|
14
|
+
* in the global namespace
|
|
15
|
+
*
|
|
16
|
+
* @param {Set<String>} ids
|
|
17
|
+
*/
|
|
18
|
+
// eslint-disable-next-line no-unused-vars
|
|
19
|
+
assignIds(ids) {
|
|
20
|
+
throw new Error('assignIds must be implemented by subclass');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Returns the list of CodeSystems this provider provides
|
|
25
|
+
*
|
|
26
|
+
* @param {string} fhirVersion - The FHIRVersion in scope - if relevant (there's always a stated version, though R5 is always used)
|
|
27
|
+
* @param {string} context - The client's stated context - if provided.
|
|
28
|
+
* @returns {Map<String, CodeSystem>} The list of CodeSystems
|
|
29
|
+
* @throws {Error} Must be implemented by subclasses
|
|
30
|
+
*/
|
|
31
|
+
// eslint-disable-next-line no-unused-vars
|
|
32
|
+
async listCodeSystems(fhirVersion, context) {
|
|
33
|
+
throw new Error('listCodeSystems must be implemented by AbstractCodeSystemProvider subclass');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = {
|
|
38
|
+
AbstractCodeSystemProvider
|
|
39
|
+
};
|
package/tx/ocl/vs-ocl.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for value set providers
|
|
3
|
+
* Defines the interface that all value set providers must implement
|
|
4
|
+
*/
|
|
5
|
+
// eslint-disable-next-line no-unused-vars
|
|
6
|
+
class OCLValueSetProvider {
|
|
7
|
+
/**
|
|
8
|
+
* {int} Unique number assigned to this provider
|
|
9
|
+
*/
|
|
10
|
+
spaceId;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* ensure that the ids on the value sets are unique, if they are
|
|
14
|
+
* in the global namespace
|
|
15
|
+
*
|
|
16
|
+
* @param {Set<String>} ids
|
|
17
|
+
*/
|
|
18
|
+
// eslint-disable-next-line no-unused-vars
|
|
19
|
+
assignIds(ids) {
|
|
20
|
+
throw new Error('assignIds must be implemented by AbstractValueSetProvider subclass');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Fetches a specific value set by URL and version
|
|
25
|
+
* @param {string} url - The URL/identifier of the value set
|
|
26
|
+
* @param {string} version - The version of the value set
|
|
27
|
+
* @returns {Promise<ValueSet>} The requested value set
|
|
28
|
+
* @throws {Error} Must be implemented by subclasses
|
|
29
|
+
*/
|
|
30
|
+
// eslint-disable-next-line no-unused-vars
|
|
31
|
+
async fetchValueSet(url, version) {
|
|
32
|
+
throw new Error('fetchValueSet must be implemented by subclass');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Fetches a specific value set by id. ValueSet providers must enforce that value set ids are unique
|
|
37
|
+
* either globally (as enforced by assignIds) or in their space
|
|
38
|
+
*
|
|
39
|
+
* @param {string} id - The id of the value set
|
|
40
|
+
* @returns {Promise<ValueSet>} The requested value set
|
|
41
|
+
* @throws {Error} Must be implemented by subclasses
|
|
42
|
+
*/
|
|
43
|
+
// eslint-disable-next-line no-unused-vars
|
|
44
|
+
async fetchValueSetById(id) {
|
|
45
|
+
throw new Error('fetchValueSetById must be implemented by subclass');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Searches for value sets based on provided criteria
|
|
50
|
+
* @param {Array<{name: string, value: string}>} searchParams - List of name/value pairs for search criteria
|
|
51
|
+
* @returns {Promise<Array<ValueSet>>} List of matching value sets
|
|
52
|
+
* @throws {Error} Must be implemented by subclasses
|
|
53
|
+
*/
|
|
54
|
+
// eslint-disable-next-line no-unused-vars
|
|
55
|
+
async searchValueSets(searchParams, elements = null) {
|
|
56
|
+
throw new Error('searchValueSets must be implemented by subclass');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
*
|
|
61
|
+
* @returns {number} total number of value sets
|
|
62
|
+
*/
|
|
63
|
+
vsCount() {
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Validates search parameters
|
|
69
|
+
* @param {Array<{name: string, value: string}>} searchParams - Search parameters to validate
|
|
70
|
+
* @protected
|
|
71
|
+
*/
|
|
72
|
+
_validateSearchParams(searchParams) {
|
|
73
|
+
if (!Array.isArray(searchParams)) {
|
|
74
|
+
throw new Error('Search parameters must be an array');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
for (const param of searchParams) {
|
|
78
|
+
if (!param || typeof param !== 'object') {
|
|
79
|
+
throw new Error('Each search parameter must be an object');
|
|
80
|
+
}
|
|
81
|
+
if (typeof param.name !== 'string' || typeof param.value !== 'string') {
|
|
82
|
+
throw new Error('Search parameter must have string name and value properties');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Validates URL and version parameters
|
|
89
|
+
* @param {string} url - URL to validate
|
|
90
|
+
* @param {string} version - Version to validate
|
|
91
|
+
* @protected
|
|
92
|
+
*/
|
|
93
|
+
_validateFetchParams(url, version) {
|
|
94
|
+
if (typeof url !== 'string' || !url.trim()) {
|
|
95
|
+
throw new Error('URL must be a non-empty string');
|
|
96
|
+
}
|
|
97
|
+
if (version != null && typeof version !== 'string') {
|
|
98
|
+
throw new Error('Version must be a string');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
module.exports = {
|
|
104
|
+
AbstractValueSetProvider
|
|
105
|
+
};
|