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.
Files changed (277) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/FHIRsmith.png +0 -0
  3. package/README.md +277 -0
  4. package/config-template.json +144 -0
  5. package/library/folder-setup.js +58 -0
  6. package/library/html-server.js +166 -0
  7. package/library/html.js +835 -0
  8. package/library/i18nsupport.js +259 -0
  9. package/library/languages.js +779 -0
  10. package/library/logger-telnet.js +205 -0
  11. package/library/logger.js +279 -0
  12. package/library/package-manager.js +876 -0
  13. package/library/utilities.js +196 -0
  14. package/library/version-utilities.js +1056 -0
  15. package/npmprojector/config-example.json +13 -0
  16. package/npmprojector/indexer.js +394 -0
  17. package/npmprojector/npmprojector.js +395 -0
  18. package/npmprojector/readme.md +174 -0
  19. package/npmprojector/watcher.js +335 -0
  20. package/package.json +119 -0
  21. package/packages/package-crawler.js +846 -0
  22. package/packages/packages-template.html +126 -0
  23. package/packages/packages.js +2838 -0
  24. package/passwords.ini +2 -0
  25. package/publisher/publisher-template.html +208 -0
  26. package/publisher/publisher.js +2167 -0
  27. package/publisher/task-draft.js +458 -0
  28. package/registry/api.js +735 -0
  29. package/registry/crawler.js +637 -0
  30. package/registry/model.js +513 -0
  31. package/registry/readme.md +243 -0
  32. package/registry/registry-data.json +121015 -0
  33. package/registry/registry-template.html +126 -0
  34. package/registry/registry.js +1395 -0
  35. package/registry/test-runner.js +237 -0
  36. package/root-template.html +124 -0
  37. package/server.js +524 -0
  38. package/shl/private-key.pem +5 -0
  39. package/shl/public-key.pem +18 -0
  40. package/shl/shl.js +1125 -0
  41. package/shl/vhl.js +69 -0
  42. package/static/FHIRsmith128.png +0 -0
  43. package/static/FHIRsmith16.png +0 -0
  44. package/static/FHIRsmith32.png +0 -0
  45. package/static/FHIRsmith64.png +0 -0
  46. package/static/assets/css/bootstrap-fhir.css +5302 -0
  47. package/static/assets/css/bootstrap-glyphicons.css +2 -0
  48. package/static/assets/css/bootstrap.css +4097 -0
  49. package/static/assets/css/jquery-ui.css +523 -0
  50. package/static/assets/css/jquery-ui.structure.css +863 -0
  51. package/static/assets/css/jquery-ui.structure.min.css +5 -0
  52. package/static/assets/css/jquery-ui.theme.css +439 -0
  53. package/static/assets/css/jquery-ui.theme.min.css +5 -0
  54. package/static/assets/css/jquery.ui.all.css +7 -0
  55. package/static/assets/css/modules.css +18 -0
  56. package/static/assets/css/project.css +367 -0
  57. package/static/assets/css/pygments-manni.css +66 -0
  58. package/static/assets/css/tags.css +74 -0
  59. package/static/assets/css/xml.css +2 -0
  60. package/static/assets/fonts/glyphiconshalflings-regular.eot +0 -0
  61. package/static/assets/fonts/glyphiconshalflings-regular.otf +0 -0
  62. package/static/assets/fonts/glyphiconshalflings-regular.svg +175 -0
  63. package/static/assets/fonts/glyphiconshalflings-regular.ttf +0 -0
  64. package/static/assets/fonts/glyphiconshalflings-regular.woff +0 -0
  65. package/static/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
  66. package/static/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  67. package/static/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
  68. package/static/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
  69. package/static/assets/ico/favicon.ico +0 -0
  70. package/static/assets/ico/favicon.png +0 -0
  71. package/static/assets/images/fhir-logo-www.png +0 -0
  72. package/static/assets/images/fhir-logo.png +0 -0
  73. package/static/assets/images/hl7-logo.png +0 -0
  74. package/static/assets/images/logo_ansinew.jpg +0 -0
  75. package/static/assets/images/search.png +0 -0
  76. package/static/assets/images/stripe.png +0 -0
  77. package/static/assets/images/target.png +0 -0
  78. package/static/assets/images/tx-registry-root.gif +0 -0
  79. package/static/assets/images/tx-registry.png +0 -0
  80. package/static/assets/images/tx-server.png +0 -0
  81. package/static/assets/images/tx-version.png +0 -0
  82. package/static/assets/js/bootstrap.min.js +6 -0
  83. package/static/assets/js/fhir-gw.js +259 -0
  84. package/static/assets/js/fhir.js +2 -0
  85. package/static/assets/js/html5shiv.js +8 -0
  86. package/static/assets/js/jcookie.js +96 -0
  87. package/static/assets/js/jquery-ui.min.js +6 -0
  88. package/static/assets/js/jquery.js +10716 -0
  89. package/static/assets/js/jquery.min.js +2 -0
  90. package/static/assets/js/jquery.ui.core.js +314 -0
  91. package/static/assets/js/jquery.ui.draggable.js +825 -0
  92. package/static/assets/js/jquery.ui.mouse.js +162 -0
  93. package/static/assets/js/jquery.ui.resizable.js +842 -0
  94. package/static/assets/js/jquery.ui.widget.js +268 -0
  95. package/static/assets/js/json2.js +487 -0
  96. package/static/assets/js/jtip.js +97 -0
  97. package/static/assets/js/respond.min.js +6 -0
  98. package/static/assets/js/statuspage.js +70 -0
  99. package/static/assets/js/xml.js +2 -0
  100. package/static/dist/js/bootstrap.js +1964 -0
  101. package/static/favicon.png +0 -0
  102. package/static/fhir.css +626 -0
  103. package/static/icon-fhir-16.png +0 -0
  104. package/static/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  105. package/static/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  106. package/static/images/ui-bg_flat_10_000000_40x100.png +0 -0
  107. package/static/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  108. package/static/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  109. package/static/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  110. package/static/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  111. package/static/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  112. package/static/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  113. package/static/images/ui-icons_222222_256x240.png +0 -0
  114. package/static/images/ui-icons_228ef1_256x240.png +0 -0
  115. package/static/images/ui-icons_ef8c08_256x240.png +0 -0
  116. package/static/images/ui-icons_ffd27a_256x240.png +0 -0
  117. package/static/images/ui-icons_ffffff_256x240.png +0 -0
  118. package/static/js/jquery.effects.blind.js +49 -0
  119. package/static/js/jquery.effects.bounce.js +78 -0
  120. package/static/js/jquery.effects.clip.js +54 -0
  121. package/static/js/jquery.effects.core.js +763 -0
  122. package/static/js/jquery.effects.drop.js +50 -0
  123. package/static/js/jquery.effects.explode.js +79 -0
  124. package/static/js/jquery.effects.fade.js +32 -0
  125. package/static/js/jquery.effects.fold.js +56 -0
  126. package/static/js/jquery.effects.highlight.js +50 -0
  127. package/static/js/jquery.effects.pulsate.js +51 -0
  128. package/static/js/jquery.effects.scale.js +178 -0
  129. package/static/js/jquery.effects.shake.js +57 -0
  130. package/static/js/jquery.effects.slide.js +50 -0
  131. package/static/js/jquery.effects.transfer.js +45 -0
  132. package/static/js/jquery.ui.accordion.js +611 -0
  133. package/static/js/jquery.ui.autocomplete.js +612 -0
  134. package/static/js/jquery.ui.button.js +416 -0
  135. package/static/js/jquery.ui.datepicker.js +1823 -0
  136. package/static/js/jquery.ui.dialog.js +878 -0
  137. package/static/js/jquery.ui.droppable.js +296 -0
  138. package/static/js/jquery.ui.position.js +252 -0
  139. package/static/js/jquery.ui.progressbar.js +109 -0
  140. package/static/js/jquery.ui.selectable.js +266 -0
  141. package/static/js/jquery.ui.slider.js +666 -0
  142. package/static/js/jquery.ui.sortable.js +1077 -0
  143. package/static/js/jquery.ui.tabs.js +758 -0
  144. package/stats.js +80 -0
  145. package/test-cache/vsac/vsac-valuesets.db +0 -0
  146. package/token/nginx_passport_setup.md +383 -0
  147. package/token/security_guide.md +294 -0
  148. package/token/token-template.html +330 -0
  149. package/token/token.js +1300 -0
  150. package/translations/Messages.properties +1510 -0
  151. package/translations/Messages_ar.properties +1399 -0
  152. package/translations/Messages_de.properties +836 -0
  153. package/translations/Messages_es.properties +737 -0
  154. package/translations/Messages_fr.properties +1 -0
  155. package/translations/Messages_ja.properties +893 -0
  156. package/translations/Messages_nl.properties +1357 -0
  157. package/translations/Messages_pt.properties +1302 -0
  158. package/translations/Messages_ru.properties +1 -0
  159. package/translations/Messages_uz.properties +1 -0
  160. package/translations/Messages_zh.properties +1 -0
  161. package/translations/rendering-phrases.properties +1128 -0
  162. package/translations/rendering-phrases_ar.properties +1091 -0
  163. package/translations/rendering-phrases_de.properties +6 -0
  164. package/translations/rendering-phrases_es.properties +6 -0
  165. package/translations/rendering-phrases_fr.properties +624 -0
  166. package/translations/rendering-phrases_ja.properties +21 -0
  167. package/translations/rendering-phrases_nl.properties +970 -0
  168. package/translations/rendering-phrases_pt.properties +1020 -0
  169. package/translations/rendering-phrases_ru.properties +1094 -0
  170. package/translations/rendering-phrases_uz.properties +1 -0
  171. package/translations/rendering-phrases_zh.properties +1 -0
  172. package/tx/README.md +418 -0
  173. package/tx/cm/cm-api.js +110 -0
  174. package/tx/cm/cm-database.js +735 -0
  175. package/tx/cm/cm-package.js +325 -0
  176. package/tx/cs/cs-api.js +789 -0
  177. package/tx/cs/cs-areacode.js +615 -0
  178. package/tx/cs/cs-country.js +1110 -0
  179. package/tx/cs/cs-cpt.js +785 -0
  180. package/tx/cs/cs-cs.js +1579 -0
  181. package/tx/cs/cs-currency.js +539 -0
  182. package/tx/cs/cs-db.js +1321 -0
  183. package/tx/cs/cs-hgvs.js +329 -0
  184. package/tx/cs/cs-lang.js +465 -0
  185. package/tx/cs/cs-loinc.js +1485 -0
  186. package/tx/cs/cs-mimetypes.js +238 -0
  187. package/tx/cs/cs-ndc.js +704 -0
  188. package/tx/cs/cs-omop.js +1025 -0
  189. package/tx/cs/cs-provider-api.js +43 -0
  190. package/tx/cs/cs-provider-list.js +37 -0
  191. package/tx/cs/cs-rxnorm.js +808 -0
  192. package/tx/cs/cs-snomed.js +1102 -0
  193. package/tx/cs/cs-ucum.js +514 -0
  194. package/tx/cs/cs-unii.js +271 -0
  195. package/tx/cs/cs-uri.js +218 -0
  196. package/tx/cs/cs-usstates.js +305 -0
  197. package/tx/dev.fhir.org.yml +14 -0
  198. package/tx/fixtures/test-cases-setup.json +18 -0
  199. package/tx/fixtures/test-cases.yml +16 -0
  200. package/tx/html/codesystem-operations.liquid +25 -0
  201. package/tx/html/home-metrics.liquid +247 -0
  202. package/tx/html/operations-form.liquid +148 -0
  203. package/tx/html/search-form.liquid +62 -0
  204. package/tx/html/tx-template.html +133 -0
  205. package/tx/html/valueset-operations.liquid +54 -0
  206. package/tx/importers/atc-to-fhir.js +316 -0
  207. package/tx/importers/import-loinc.module.js +1536 -0
  208. package/tx/importers/import-ndc.module.js +1088 -0
  209. package/tx/importers/import-rxnorm.module.js +898 -0
  210. package/tx/importers/import-sct.module.js +2457 -0
  211. package/tx/importers/import-unii.module.js +601 -0
  212. package/tx/importers/readme.md +453 -0
  213. package/tx/importers/subset-loinc.module.js +1081 -0
  214. package/tx/importers/subset-rxnorm.module.js +938 -0
  215. package/tx/importers/tx-import-base.js +351 -0
  216. package/tx/importers/tx-import-settings.js +310 -0
  217. package/tx/importers/tx-import.js +357 -0
  218. package/tx/library/canonical-resource.js +88 -0
  219. package/tx/library/capabilitystatement.js +292 -0
  220. package/tx/library/codesystem.js +774 -0
  221. package/tx/library/conceptmap.js +568 -0
  222. package/tx/library/designations.js +932 -0
  223. package/tx/library/errors.js +77 -0
  224. package/tx/library/extensions.js +117 -0
  225. package/tx/library/namingsystem.js +322 -0
  226. package/tx/library/operation-outcome.js +127 -0
  227. package/tx/library/parameters.js +105 -0
  228. package/tx/library/renderer.js +1559 -0
  229. package/tx/library/terminologycapabilities.js +418 -0
  230. package/tx/library/ucum-parsers.js +1029 -0
  231. package/tx/library/ucum-service.js +370 -0
  232. package/tx/library/ucum-types.js +1099 -0
  233. package/tx/library/valueset.js +543 -0
  234. package/tx/library.js +676 -0
  235. package/tx/ocl/cm-ocl.js +106 -0
  236. package/tx/ocl/cs-ocl.js +39 -0
  237. package/tx/ocl/vs-ocl.js +105 -0
  238. package/tx/operation-context.js +568 -0
  239. package/tx/params.js +613 -0
  240. package/tx/provider.js +403 -0
  241. package/tx/sct/ecl.js +1560 -0
  242. package/tx/sct/expressions.js +2077 -0
  243. package/tx/sct/structures.js +1396 -0
  244. package/tx/tx-html.js +1063 -0
  245. package/tx/tx.fhir.org.yml +39 -0
  246. package/tx/tx.js +927 -0
  247. package/tx/vs/vs-api.js +112 -0
  248. package/tx/vs/vs-database.js +786 -0
  249. package/tx/vs/vs-package.js +358 -0
  250. package/tx/vs/vs-vsac.js +366 -0
  251. package/tx/workers/batch-validate.js +129 -0
  252. package/tx/workers/batch.js +361 -0
  253. package/tx/workers/closure.js +32 -0
  254. package/tx/workers/expand.js +1845 -0
  255. package/tx/workers/lookup.js +407 -0
  256. package/tx/workers/metadata.js +467 -0
  257. package/tx/workers/operations.js +34 -0
  258. package/tx/workers/read.js +164 -0
  259. package/tx/workers/search.js +384 -0
  260. package/tx/workers/subsumes.js +334 -0
  261. package/tx/workers/translate.js +492 -0
  262. package/tx/workers/validate.js +2504 -0
  263. package/tx/workers/worker.js +904 -0
  264. package/tx/xml/capabilitystatement-xml.js +63 -0
  265. package/tx/xml/codesystem-xml.js +62 -0
  266. package/tx/xml/conceptmap-xml.js +65 -0
  267. package/tx/xml/namingsystem-xml.js +65 -0
  268. package/tx/xml/operationoutcome-xml.js +127 -0
  269. package/tx/xml/parameters-xml.js +312 -0
  270. package/tx/xml/terminologycapabilities-xml.js +64 -0
  271. package/tx/xml/valueset-xml.js +64 -0
  272. package/tx/xml/xml-base.js +603 -0
  273. package/vcl/vcl-parser.js +1098 -0
  274. package/vcl/vcl.js +253 -0
  275. package/windows-install.js +19 -0
  276. package/xig/xig-template.html +124 -0
  277. package/xig/xig.js +3049 -0
@@ -0,0 +1,615 @@
1
+ const { CodeSystemProvider, FilterExecutionContext, CodeSystemFactoryProvider} = require('./cs-api');
2
+ const assert = require('assert');
3
+ const { CodeSystem } = require("../library/codesystem");
4
+
5
+ class AreaCodeConcept {
6
+ constructor(code, display, abbrev, class_) {
7
+ this.code = code;
8
+ this.display = abbrev ? `${display} (${abbrev})` : display;
9
+ this.class_ = class_;
10
+ }
11
+ }
12
+
13
+ class AreaCodeConceptFilter {
14
+ constructor() {
15
+ this.list = [];
16
+ this.cursor = -1;
17
+ }
18
+ }
19
+
20
+ class AreaCodeServices extends CodeSystemProvider {
21
+ constructor(opContext, supplements, codes, codeMap) {
22
+ super(opContext, supplements);
23
+ this.codes = codes || [];
24
+ this.codeMap = codeMap || new Map();
25
+ }
26
+
27
+ // Metadata methods
28
+ system() {
29
+ return 'http://unstats.un.org/unsd/methods/m49/m49.htm';
30
+ }
31
+
32
+ version() {
33
+ return null; // No version specified
34
+ }
35
+
36
+ description() {
37
+ return 'International area/region Codes';
38
+ }
39
+
40
+ name() {
41
+ return 'Region Codes';
42
+ }
43
+
44
+ totalCount() {
45
+ return this.codes.length;
46
+ }
47
+
48
+ hasParents() {
49
+ return false; // No hierarchical relationships
50
+ }
51
+
52
+ hasAnyDisplays(languages) {
53
+ const langs = this._ensureLanguages(languages);
54
+ if (this._hasAnySupplementDisplays(langs)) {
55
+ return true;
56
+ }
57
+ return super.hasAnyDisplays(langs);
58
+ }
59
+
60
+ // Core concept methods
61
+ async code(code) {
62
+ const ctxt = await this.#ensureContext(code);
63
+ return ctxt ? ctxt.code : null;
64
+ }
65
+
66
+ async display(code) {
67
+ const ctxt = await this.#ensureContext(code);
68
+ if (!ctxt) {
69
+ return null;
70
+ }
71
+ if (ctxt.display && this.opContext.langs.isEnglishOrNothing()) {
72
+ return ctxt ? ctxt.display : '';
73
+ }
74
+ let disp = this._displayFromSupplements(ctxt.code);
75
+ if (disp) {
76
+ return disp;
77
+ }
78
+ return ctxt.display;
79
+ }
80
+
81
+ async definition(code) {
82
+ await this.#ensureContext(code);
83
+ return null; // No definitions provided in original
84
+ }
85
+
86
+ async isAbstract(code) {
87
+ await this.#ensureContext(code);
88
+ return false; // No abstract concepts
89
+ }
90
+
91
+ async isInactive(code) {
92
+ await this.#ensureContext(code);
93
+ return false; // No inactive concepts
94
+ }
95
+
96
+ async isDeprecated(code) {
97
+ await this.#ensureContext(code);
98
+ return false; // No deprecated concepts
99
+ }
100
+
101
+
102
+ async designations(code, displays) {
103
+ const ctxt = await this.#ensureContext(code);
104
+ if (ctxt != null) {
105
+ displays.addDesignation(true, 'active', 'en', CodeSystem.makeUseForDisplay(), ctxt.display);
106
+ this._listSupplementDesignations(ctxt.code, displays);
107
+ }
108
+ }
109
+
110
+ async #ensureContext(code) {
111
+ if (!code) {
112
+ return code;
113
+ }
114
+ if (typeof code === 'string') {
115
+ const ctxt = await this.locate(code);
116
+ if (!ctxt.context) {
117
+ throw new Error(ctxt.message);
118
+ } else {
119
+ return ctxt.context;
120
+ }
121
+ }
122
+ if (code instanceof AreaCodeConcept) {
123
+ return code;
124
+ }
125
+ throw "Unknown Type at #ensureContext: "+ (typeof code);
126
+ }
127
+
128
+ // Lookup methods
129
+ async locate(code) {
130
+
131
+ assert(!code || typeof code === 'string', 'code must be string');
132
+ if (!code) return { context: null, message: 'Empty code' };
133
+
134
+ const concept = this.codeMap.get(code);
135
+ if (concept) {
136
+ return { context: concept, message: null };
137
+ }
138
+ return { context: null, message: undefined};
139
+ }
140
+
141
+ // Iterator methods
142
+ async iterator(code) {
143
+
144
+ const ctxt = await this.#ensureContext(code);
145
+ if (!ctxt) {
146
+ return { index: 0, total: this.totalCount() };
147
+ }
148
+ return null; // No child iteration
149
+ }
150
+
151
+ async nextContext(iteratorContext) {
152
+
153
+ assert(iteratorContext, 'iteratorContext must be provided');
154
+ if (iteratorContext && iteratorContext.index < iteratorContext.total) {
155
+ const concept = this.codes[iteratorContext.index];
156
+ iteratorContext.index++;
157
+ return concept;
158
+ }
159
+ return null;
160
+ }
161
+
162
+ // Filtering methods
163
+ async doesFilter(prop, op, value) {
164
+
165
+ assert(prop != null && typeof prop === 'string', 'prop must be a non-null string');
166
+ assert(op != null && typeof op === 'string', 'op must be a non-null string');
167
+ assert(value != null && typeof value === 'string', 'value must be a non-null string');
168
+
169
+ return (prop === 'type' || prop === 'class') && op === '=';
170
+ }
171
+
172
+ async searchFilter(filterContext, filter, sort) {
173
+
174
+ assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
175
+ assert(filter && typeof filter === 'string', 'filter must be a non-null string');
176
+ assert(typeof sort === 'boolean', 'sort must be a boolean');
177
+
178
+ throw new Error('Search filter not implemented for AreaCode');
179
+ }
180
+
181
+ async filter(filterContext, prop, op, value) {
182
+
183
+ assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
184
+ assert(prop != null && typeof prop === 'string', 'prop must be a non-null string');
185
+ assert(op != null && typeof op === 'string', 'op must be a non-null string');
186
+ assert(value != null && typeof value === 'string', 'value must be a non-null string');
187
+
188
+ if ((prop === 'type' || prop === 'class') && op === '=') {
189
+ const result = new AreaCodeConceptFilter();
190
+
191
+ for (const concept of this.codes) {
192
+ if (concept.class_ === value) {
193
+ result.list.push(concept);
194
+ }
195
+ }
196
+ filterContext.filters.push(result);
197
+ } else {
198
+ throw new Error(`The filter ${prop} ${op} = ${value} is not supported for ${this.system()}`);
199
+ }
200
+ }
201
+
202
+ async executeFilters(filterContext) {
203
+
204
+ assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
205
+ return filterContext.filters;
206
+ }
207
+
208
+ async filterSize(filterContext, set) {
209
+
210
+ assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
211
+ assert(set && set instanceof AreaCodeConceptFilter, 'set must be a AreaCodeConceptFilter');
212
+ return set.list.length;
213
+ }
214
+
215
+ async filtersNotClosed(filterContext) {
216
+
217
+ assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
218
+ return false; // Finite set
219
+ }
220
+
221
+ async filterMore(filterContext, set) {
222
+
223
+ assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
224
+ assert(set && set instanceof AreaCodeConceptFilter, 'set must be a AreaCodeConceptFilter');
225
+ set.cursor++;
226
+ return set.cursor < set.list.length;
227
+ }
228
+
229
+ async filterConcept(filterContext, set) {
230
+
231
+ assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
232
+ assert(set && set instanceof AreaCodeConceptFilter, 'set must be a AreaCodeConceptFilter');
233
+ if (set.cursor >= 0 && set.cursor < set.list.length) {
234
+ return set.list[set.cursor];
235
+ }
236
+ return null;
237
+ }
238
+
239
+ async filterLocate(filterContext, set, code) {
240
+
241
+ assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
242
+ assert(set && set instanceof AreaCodeConceptFilter, 'set must be a AreaCodeConceptFilter');
243
+ assert(typeof code === 'string', 'code must be non-null string');
244
+
245
+ for (const concept of set.list) {
246
+ if (concept.code === code) {
247
+ return concept;
248
+ }
249
+ }
250
+ return `Code '${code}' not found in filter set`;
251
+ }
252
+
253
+ async filterCheck(filterContext, set, concept) {
254
+
255
+ assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
256
+ assert(set && set instanceof AreaCodeConceptFilter, 'set must be a AreaCodeConceptFilter');
257
+ const ctxt = await this.#ensureContext(concept);
258
+ return set.list.includes(ctxt);
259
+ }
260
+
261
+ // Subsumption
262
+ async subsumesTest(codeA, codeB) {
263
+ await this.#ensureContext(codeA);
264
+ await this.#ensureContext(codeB);
265
+ return 'not-subsumed'; // No subsumption relationships
266
+ }
267
+
268
+
269
+ versionAlgorithm() {
270
+ return null;
271
+ }
272
+ }
273
+
274
+ class AreaCodeFactoryProvider extends CodeSystemFactoryProvider {
275
+ constructor(i18n) {
276
+ super(i18n);
277
+ this.uses = 0;
278
+ this.codes = null;
279
+ this.codeMap = null;
280
+ }
281
+
282
+ defaultVersion() {
283
+ return null; // No versioning for area codes
284
+ }
285
+
286
+ system() {
287
+ return 'http://unstats.un.org/unsd/methods/m49/m49.htm';
288
+ }
289
+
290
+ version() {
291
+ return null; // No version specified
292
+ }
293
+
294
+ build(opContext, supplements) {
295
+ this.uses++;
296
+
297
+ return new AreaCodeServices(opContext, supplements, this.codes, this.codeMap);
298
+ }
299
+
300
+ useCount() {
301
+ return this.uses;
302
+ }
303
+
304
+ recordUse() {
305
+ this.uses++;
306
+ }
307
+
308
+ // eslint-disable-next-line no-unused-vars
309
+ async buildKnownValueSet(url, version) {
310
+ return null;
311
+ }
312
+
313
+ async load() {
314
+ this.codes = [];
315
+ this.codeMap = new Map();
316
+
317
+ const data = [
318
+ // Countries
319
+ ['004', 'Afghanistan', 'AFG', 'country'],
320
+ ['248', 'Åland Islands', 'ALA', 'country'],
321
+ ['008', 'Albania', 'ALB', 'country'],
322
+ ['012', 'Algeria', 'DZA', 'country'],
323
+ ['016', 'American Samoa', 'ASM', 'country'],
324
+ ['020', 'Andorra', 'AND', 'country'],
325
+ ['024', 'Angola', 'AGO', 'country'],
326
+ ['660', 'Anguilla', 'AIA', 'country'],
327
+ ['028', 'Antigua and Barbuda', 'ATG', 'country'],
328
+ ['032', 'Argentina', 'ARG', 'country'],
329
+ ['051', 'Armenia', 'ARM', 'country'],
330
+ ['533', 'Aruba', 'ABW', 'country'],
331
+ ['036', 'Australia', 'AUS', 'country'],
332
+ ['040', 'Austria', 'AUT', 'country'],
333
+ ['031', 'Azerbaijan', 'AZE', 'country'],
334
+ ['044', 'Bahamas', 'BHS', 'country'],
335
+ ['048', 'Bahrain', 'BHR', 'country'],
336
+ ['050', 'Bangladesh', 'BGD', 'country'],
337
+ ['052', 'Barbados', 'BRB', 'country'],
338
+ ['112', 'Belarus', 'BLR', 'country'],
339
+ ['056', 'Belgium', 'BEL', 'country'],
340
+ ['084', 'Belize', 'BLZ', 'country'],
341
+ ['204', 'Benin', 'BEN', 'country'],
342
+ ['060', 'Bermuda', 'BMU', 'country'],
343
+ ['064', 'Bhutan', 'BTN', 'country'],
344
+ ['068', 'Bolivia (Plurinational State of)', 'BOL', 'country'],
345
+ ['535', 'Bonaire, Sint Eustatius and Saba', 'BES', 'country'],
346
+ ['070', 'Bosnia and Herzegovina', 'BIH', 'country'],
347
+ ['072', 'Botswana', 'BWA', 'country'],
348
+ ['076', 'Brazil', 'BRA', 'country'],
349
+ ['092', 'British Virgin Islands', 'VGB', 'country'],
350
+ ['096', 'Brunei Darussalam', 'BRN', 'country'],
351
+ ['100', 'Bulgaria', 'BGR', 'country'],
352
+ ['854', 'Burkina Faso', 'BFA', 'country'],
353
+ ['108', 'Burundi', 'BDI', 'country'],
354
+ ['132', 'Cabo Verde', 'CPV', 'country'],
355
+ ['116', 'Cambodia', 'KHM', 'country'],
356
+ ['120', 'Cameroon', 'CMR', 'country'],
357
+ ['124', 'Canada', 'CAN', 'country'],
358
+ ['136', 'Cayman Islands', 'CYM', 'country'],
359
+ ['140', 'Central African Republic', 'CAF', 'country'],
360
+ ['148', 'Chad', 'TCD', 'country'],
361
+ ['830', 'Channel Islands', '', 'country'],
362
+ ['152', 'Chile', 'CHL', 'country'],
363
+ ['156', 'China', 'CHN', 'country'],
364
+ ['344', 'China, Hong Kong Special Administrative Region', 'HKG', 'country'],
365
+ ['446', 'China, Macao Special Administrative Region', 'MAC', 'country'],
366
+ ['170', 'Colombia', 'COL', 'country'],
367
+ ['174', 'Comoros', 'COM', 'country'],
368
+ ['178', 'Congo', 'COG', 'country'],
369
+ ['184', 'Cook Islands', 'COK', 'country'],
370
+ ['188', 'Costa Rica', 'CRI', 'country'],
371
+ ['384', 'Côte d\'Ivoire', 'CIV', 'country'],
372
+ ['191', 'Croatia', 'HRV', 'country'],
373
+ ['192', 'Cuba', 'CUB', 'country'],
374
+ ['531', 'Curaçao', 'CUW', 'country'],
375
+ ['196', 'Cyprus', 'CYP', 'country'],
376
+ ['203', 'Czech Republic', 'CZE', 'country'],
377
+ ['408', 'Democratic People\'s Republic of Korea', 'PRK', 'country'],
378
+ ['180', 'Democratic Republic of the Congo', 'COD', 'country'],
379
+ ['208', 'Denmark', 'DNK', 'country'],
380
+ ['262', 'Djibouti', 'DJI', 'country'],
381
+ ['212', 'Dominica', 'DMA', 'country'],
382
+ ['214', 'Dominican Republic', 'DOM', 'country'],
383
+ ['218', 'Ecuador', 'ECU', 'country'],
384
+ ['818', 'Egypt', 'EGY', 'country'],
385
+ ['222', 'El Salvador', 'SLV', 'country'],
386
+ ['226', 'Equatorial Guinea', 'GNQ', 'country'],
387
+ ['232', 'Eritrea', 'ERI', 'country'],
388
+ ['233', 'Estonia', 'EST', 'country'],
389
+ ['231', 'Ethiopia', 'ETH', 'country'],
390
+ ['234', 'Faeroe Islands', 'FRO', 'country'],
391
+ ['238', 'Falkland Islands (Malvinas)', 'FLK', 'country'],
392
+ ['242', 'Fiji', 'FJI', 'country'],
393
+ ['246', 'Finland', 'FIN', 'country'],
394
+ ['250', 'France', 'FRA', 'country'],
395
+ ['254', 'French Guiana', 'GUF', 'country'],
396
+ ['258', 'French Polynesia', 'PYF', 'country'],
397
+ ['266', 'Gabon', 'GAB', 'country'],
398
+ ['270', 'Gambia', 'GMB', 'country'],
399
+ ['268', 'Georgia', 'GEO', 'country'],
400
+ ['276', 'Germany', 'DEU', 'country'],
401
+ ['288', 'Ghana', 'GHA', 'country'],
402
+ ['292', 'Gibraltar', 'GIB', 'country'],
403
+ ['300', 'Greece', 'GRC', 'country'],
404
+ ['304', 'Greenland', 'GRL', 'country'],
405
+ ['308', 'Grenada', 'GRD', 'country'],
406
+ ['312', 'Guadeloupe', 'GLP', 'country'],
407
+ ['316', 'Guam', 'GUM', 'country'],
408
+ ['320', 'Guatemala', 'GTM', 'country'],
409
+ ['831', 'Guernsey', 'GGY', 'country'],
410
+ ['324', 'Guinea', 'GIN', 'country'],
411
+ ['624', 'Guinea-Bissau', 'GNB', 'country'],
412
+ ['328', 'Guyana', 'GUY', 'country'],
413
+ ['332', 'Haiti', 'HTI', 'country'],
414
+ ['336', 'Holy See', 'VAT', 'country'],
415
+ ['340', 'Honduras', 'HND', 'country'],
416
+ ['348', 'Hungary', 'HUN', 'country'],
417
+ ['352', 'Iceland', 'ISL', 'country'],
418
+ ['356', 'India', 'IND', 'country'],
419
+ ['360', 'Indonesia', 'IDN', 'country'],
420
+ ['364', 'Iran (Islamic Republic of)', 'IRN', 'country'],
421
+ ['368', 'Iraq', 'IRQ', 'country'],
422
+ ['372', 'Ireland', 'IRL', 'country'],
423
+ ['833', 'Isle of Man', 'IMN', 'country'],
424
+ ['376', 'Israel', 'ISR', 'country'],
425
+ ['380', 'Italy', 'ITA', 'country'],
426
+ ['388', 'Jamaica', 'JAM', 'country'],
427
+ ['392', 'Japan', 'JPN', 'country'],
428
+ ['832', 'Jersey', 'JEY', 'country'],
429
+ ['400', 'Jordan', 'JOR', 'country'],
430
+ ['398', 'Kazakhstan', 'KAZ', 'country'],
431
+ ['404', 'Kenya', 'KEN', 'country'],
432
+ ['296', 'Kiribati', 'KIR', 'country'],
433
+ ['414', 'Kuwait', 'KWT', 'country'],
434
+ ['417', 'Kyrgyzstan', 'KGZ', 'country'],
435
+ ['418', 'Lao People\'s Democratic Republic', 'LAO', 'country'],
436
+ ['428', 'Latvia', 'LVA', 'country'],
437
+ ['422', 'Lebanon', 'LBN', 'country'],
438
+ ['426', 'Lesotho', 'LSO', 'country'],
439
+ ['430', 'Liberia', 'LBR', 'country'],
440
+ ['434', 'Libya', 'LBY', 'country'],
441
+ ['438', 'Liechtenstein', 'LIE', 'country'],
442
+ ['440', 'Lithuania', 'LTU', 'country'],
443
+ ['442', 'Luxembourg', 'LUX', 'country'],
444
+ ['450', 'Madagascar', 'MDG', 'country'],
445
+ ['454', 'Malawi', 'MWI', 'country'],
446
+ ['458', 'Malaysia', 'MYS', 'country'],
447
+ ['462', 'Maldives', 'MDV', 'country'],
448
+ ['466', 'Mali', 'MLI', 'country'],
449
+ ['470', 'Malta', 'MLT', 'country'],
450
+ ['584', 'Marshall Islands', 'MHL', 'country'],
451
+ ['474', 'Martinique', 'MTQ', 'country'],
452
+ ['478', 'Mauritania', 'MRT', 'country'],
453
+ ['480', 'Mauritius', 'MUS', 'country'],
454
+ ['175', 'Mayotte', 'MYT', 'country'],
455
+ ['484', 'Mexico', 'MEX', 'country'],
456
+ ['583', 'Micronesia (Federated States of)', 'FSM', 'country'],
457
+ ['492', 'Monaco', 'MCO', 'country'],
458
+ ['496', 'Mongolia', 'MNG', 'country'],
459
+ ['499', 'Montenegro', 'MNE', 'country'],
460
+ ['500', 'Montserrat', 'MSR', 'country'],
461
+ ['504', 'Morocco', 'MAR', 'country'],
462
+ ['508', 'Mozambique', 'MOZ', 'country'],
463
+ ['104', 'Myanmar', 'MMR', 'country'],
464
+ ['516', 'Namibia', 'NAM', 'country'],
465
+ ['520', 'Nauru', 'NRU', 'country'],
466
+ ['524', 'Nepal', 'NPL', 'country'],
467
+ ['528', 'Netherlands', 'NLD', 'country'],
468
+ ['540', 'New Caledonia', 'NCL', 'country'],
469
+ ['554', 'New Zealand', 'NZL', 'country'],
470
+ ['558', 'Nicaragua', 'NIC', 'country'],
471
+ ['562', 'Niger', 'NER', 'country'],
472
+ ['566', 'Nigeria', 'NGA', 'country'],
473
+ ['570', 'Niue', 'NIU', 'country'],
474
+ ['574', 'Norfolk Island', 'NFK', 'country'],
475
+ ['580', 'Northern Mariana Islands', 'MNP', 'country'],
476
+ ['578', 'Norway', 'NOR', 'country'],
477
+ ['512', 'Oman', 'OMN', 'country'],
478
+ ['586', 'Pakistan', 'PAK', 'country'],
479
+ ['585', 'Palau', 'PLW', 'country'],
480
+ ['591', 'Panama', 'PAN', 'country'],
481
+ ['598', 'Papua New Guinea', 'PNG', 'country'],
482
+ ['600', 'Paraguay', 'PRY', 'country'],
483
+ ['604', 'Peru', 'PER', 'country'],
484
+ ['608', 'Philippines', 'PHL', 'country'],
485
+ ['612', 'Pitcairn', 'PCN', 'country'],
486
+ ['616', 'Poland', 'POL', 'country'],
487
+ ['620', 'Portugal', 'PRT', 'country'],
488
+ ['630', 'Puerto Rico', 'PRI', 'country'],
489
+ ['634', 'Qatar', 'QAT', 'country'],
490
+ ['410', 'Republic of Korea', 'KOR', 'country'],
491
+ ['498', 'Republic of Moldova', 'MDA', 'country'],
492
+ ['638', 'Réunion', 'REU', 'country'],
493
+ ['642', 'Romania', 'ROU', 'country'],
494
+ ['643', 'Russian Federation', 'RUS', 'country'],
495
+ ['646', 'Rwanda', 'RWA', 'country'],
496
+ ['652', 'Saint Barthélemy', 'BLM', 'country'],
497
+ ['654', 'Saint Helena', 'SHN', 'country'],
498
+ ['659', 'Saint Kitts and Nevis', 'KNA', 'country'],
499
+ ['662', 'Saint Lucia', 'LCA', 'country'],
500
+ ['663', 'Saint Martin (French part)', 'MAF', 'country'],
501
+ ['666', 'Saint Pierre and Miquelon', 'SPM', 'country'],
502
+ ['670', 'Saint Vincent and the Grenadines', 'VCT', 'country'],
503
+ ['882', 'Samoa', 'WSM', 'country'],
504
+ ['674', 'San Marino', 'SMR', 'country'],
505
+ ['678', 'Sao Tome and Principe', 'STP', 'country'],
506
+ ['680', 'Sark', '', 'country'],
507
+ ['682', 'Saudi Arabia', 'SAU', 'country'],
508
+ ['686', 'Senegal', 'SEN', 'country'],
509
+ ['688', 'Serbia', 'SRB', 'country'],
510
+ ['690', 'Seychelles', 'SYC', 'country'],
511
+ ['694', 'Sierra Leone', 'SLE', 'country'],
512
+ ['702', 'Singapore', 'SGP', 'country'],
513
+ ['534', 'Sint Maarten (Dutch part)', 'SXM', 'country'],
514
+ ['703', 'Slovakia', 'SVK', 'country'],
515
+ ['705', 'Slovenia', 'SVN', 'country'],
516
+ ['090', 'Solomon Islands', 'SLB', 'country'],
517
+ ['706', 'Somalia', 'SOM', 'country'],
518
+ ['710', 'South Africa', 'ZAF', 'country'],
519
+ ['728', 'South Sudan', 'SSD', 'country'],
520
+ ['724', 'Spain', 'ESP', 'country'],
521
+ ['144', 'Sri Lanka', 'LKA', 'country'],
522
+ ['275', 'State of Palestine', 'PSE', 'country'],
523
+ ['729', 'Sudan', 'SDN', 'country'],
524
+ ['740', 'Suriname', 'SUR', 'country'],
525
+ ['744', 'Svalbard and Jan Mayen Islands', 'SJM', 'country'],
526
+ ['748', 'Swaziland', 'SWZ', 'country'],
527
+ ['752', 'Sweden', 'SWE', 'country'],
528
+ ['756', 'Switzerland', 'CHE', 'country'],
529
+ ['760', 'Syrian Arab Republic', 'SYR', 'country'],
530
+ ['762', 'Tajikistan', 'TJK', 'country'],
531
+ ['764', 'Thailand', 'THA', 'country'],
532
+ ['807', 'The former Yugoslav Republic of Macedonia', 'MKD', 'country'],
533
+ ['626', 'Timor-Leste', 'TLS', 'country'],
534
+ ['768', 'Togo', 'TGO', 'country'],
535
+ ['772', 'Tokelau', 'TKL', 'country'],
536
+ ['776', 'Tonga', 'TON', 'country'],
537
+ ['780', 'Trinidad and Tobago', 'TTO', 'country'],
538
+ ['788', 'Tunisia', 'TUN', 'country'],
539
+ ['792', 'Turkey', 'TUR', 'country'],
540
+ ['795', 'Turkmenistan', 'TKM', 'country'],
541
+ ['796', 'Turks and Caicos Islands', 'TCA', 'country'],
542
+ ['798', 'Tuvalu', 'TUV', 'country'],
543
+ ['800', 'Uganda', 'UGA', 'country'],
544
+ ['804', 'Ukraine', 'UKR', 'country'],
545
+ ['784', 'United Arab Emirates', 'ARE', 'country'],
546
+ ['826', 'United Kingdom of Great Britain and Northern Ireland', 'GBR', 'country'],
547
+ ['834', 'United Republic of Tanzania', 'TZA', 'country'],
548
+ ['840', 'United States of America', 'USA', 'country'],
549
+ ['850', 'United States Virgin Islands', 'VIR', 'country'],
550
+ ['858', 'Uruguay', 'URY', 'country'],
551
+ ['860', 'Uzbekistan', 'UZB', 'country'],
552
+ ['548', 'Vanuatu', 'VUT', 'country'],
553
+ ['862', 'Venezuela (Bolivarian Republic of)', 'VEN', 'country'],
554
+ ['704', 'Viet Nam', 'VNM', 'country'],
555
+ ['876', 'Wallis and Futuna Islands', 'WLF', 'country'],
556
+ ['732', 'Western Sahara', 'ESH', 'country'],
557
+ ['887', 'Yemen', 'YEM', 'country'],
558
+ ['894', 'Zambia', 'ZMB', 'country'],
559
+ ['716', 'Zimbabwe', 'ZWE', 'country'],
560
+
561
+ // Regions
562
+ ['001', 'World', '', 'region'],
563
+ ['002', 'Africa', '', 'region'],
564
+ ['014', 'Eastern Africa', '', 'region'],
565
+ ['017', 'Middle Africa', '', 'region'],
566
+ ['015', 'Northern Africa', '', 'region'],
567
+ ['018', 'Southern Africa', '', 'region'],
568
+ ['011', 'Western Africa', '', 'region'],
569
+ ['019', 'Americas', '', 'region'],
570
+ ['419', 'Latin America and the Caribbean', '', 'region'],
571
+ ['029', 'Caribbean', '', 'region'],
572
+ ['013', 'Central America', '', 'region'],
573
+ ['005', 'South America', '', 'region'],
574
+ ['021', 'Northern America', '', 'region'],
575
+ ['142', 'Asia', '', 'region'],
576
+ ['143', 'Central Asia', '', 'region'],
577
+ ['030', 'Eastern Asia', '', 'region'],
578
+ ['034', 'Southern Asia', '', 'region'],
579
+ ['035', 'South-Eastern Asia', '', 'region'],
580
+ ['145', 'Western Asia', '', 'region'],
581
+ ['150', 'Europe', '', 'region'],
582
+ ['151', 'Eastern Europe', '', 'region'],
583
+ ['154', 'Northern Europe', '', 'region'],
584
+ ['039', 'Southern Europe', '', 'region'],
585
+ ['155', 'Western Europe', '', 'region'],
586
+ ['009', 'Oceania', '', 'region'],
587
+ ['053', 'Australia and New Zealand', '', 'region'],
588
+ ['054', 'Melanesia', '', 'region'],
589
+ ['057', 'Micronesia', '', 'region'],
590
+ ['061', 'Polynesia', '', 'region']
591
+ ];
592
+
593
+ // Load concepts into arrays and map
594
+ for (const [code, display, abbrev, class_] of data) {
595
+ const concept = new AreaCodeConcept(code, display, abbrev, class_);
596
+ this.codes.push(concept);
597
+ this.codeMap.set(code, concept);
598
+ }
599
+ }
600
+
601
+ name() {
602
+ return 'Region Codes';
603
+ }
604
+
605
+ id() {
606
+ return "areas";
607
+ }
608
+ }
609
+
610
+ module.exports = {
611
+ AreaCodeServices,
612
+ AreaCodeFactoryProvider,
613
+ AreaCodeConcept,
614
+ AreaCodeConceptFilter
615
+ };