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
package/tx/params.js ADDED
@@ -0,0 +1,613 @@
1
+ const {Languages, LanguageDefinitions} = require("../library/languages");
2
+ const { validateResource, strToBool, getValuePrimitive, validateParameter, Utilities} = require("../library/utilities");
3
+ const {Issue} = require("./library/operation-outcome");
4
+ const {I18nSupport} = require("../library/i18nsupport");
5
+
6
+ class VersionRule {
7
+ system;
8
+ version;
9
+ mode;
10
+
11
+ constructor(system, version, vs, mode = null) {
12
+ this.system = system;
13
+ this.version = version;
14
+ this.vs = vs;
15
+ this.mode = mode;
16
+ }
17
+ asString() {
18
+ return this.mode + ':' + this.system + '#' + this.version;
19
+ }
20
+
21
+ asParam() {
22
+ switch (this.mode) {
23
+ case 'default': return (this.vs ? "default-valueset-version": "system-version") + '=' + this.system + '|' + this.version;
24
+ case 'override': return (this.vs ? "force-valueset-version": "force-system-version") + '=' + this.system + '|' + this.version;
25
+ case 'check': return (this.vs ? "check-valueset-version": "check-system-version") + '=' + this.system + '|' + this.version;
26
+ default: throw new Error("Unsupported mode '" + this.mode + "'");
27
+ }
28
+ }
29
+
30
+ }
31
+
32
+ class TxParameters {
33
+ count = -1;
34
+ limit = -1;
35
+ offset = -1;
36
+ validating = false;
37
+
38
+ constructor(languages, i18n, validating) {
39
+ validateParameter(languages, 'languages', LanguageDefinitions);
40
+ validateParameter(i18n, 'i18n', I18nSupport);
41
+
42
+ this.languageDefinitions = languages;
43
+ this.i18n = i18n;
44
+ this.validating = validating;
45
+ this.FVersionRules = [];
46
+ this.FProperties = [];
47
+ this.FDesignations = [];
48
+ this.FGenerateNarrative = true;
49
+
50
+ this.FHTTPLanguages = null;
51
+ this.FDisplayLanguages = null;
52
+ this.FValueSetVersionRules = null;
53
+ this.FUid = '';
54
+
55
+ this.FActiveOnly = false;
56
+ this.FExcludeNested = false;
57
+ this.FLimitedExpansion = false;
58
+ this.FExcludeNotForUI = false;
59
+ this.FExcludePostCoordinated = false;
60
+ this.FIncludeDesignations = false;
61
+ this.FIncludeDefinition = false;
62
+ this.FDefaultToLatestVersion = false;
63
+ this.FIncompleteOK = false;
64
+ this.FDisplayWarning = false;
65
+ this.FMembershipOnly = false;
66
+ this.FDiagnostics = false;
67
+
68
+ this.hasActiveOnly = false;
69
+ this.hasExcludeNested = false;
70
+ this.hasGenerateNarrative = false;
71
+ this.hasLimitedExpansion = false;
72
+ this.hasExcludeNotForUI = false;
73
+ this.hasExcludePostCoordinated = false;
74
+ this.hasIncludeDesignations = false;
75
+ this.hasIncludeDefinition = false;
76
+ this.hasDefaultToLatestVersion = false;
77
+ this.hasIncompleteOK = false;
78
+ this.hasDisplayWarning = false;
79
+ this.hasMembershipOnly = false;
80
+ }
81
+
82
+ readParams(params) {
83
+ validateResource(params, "params", "Parameters");
84
+
85
+ if (!params.parameter) {
86
+ return;
87
+ }
88
+
89
+ for (let p of params.parameter) {
90
+ switch (p.name) {
91
+ // Version rules
92
+ case 'system-version': {
93
+ this.seeVersionRule(getValuePrimitive(p), false,'default');
94
+ break;
95
+ }
96
+ case 'check-system-version': {
97
+ this.seeVersionRule(getValuePrimitive(p), false, 'check');
98
+ break;
99
+ }
100
+ case 'force-system-version': {
101
+ this.seeVersionRule(getValuePrimitive(p), false, 'override');
102
+ break;
103
+ }
104
+ case 'default-valueset-version': {
105
+ this.seeVersionRule(getValuePrimitive(p), true, 'default');
106
+ break;
107
+ }
108
+ case 'force-valueset-version': {
109
+ this.seeVersionRule().push(getValuePrimitive(p), true, 'override');
110
+ break;
111
+ }
112
+ case 'check-valueset-version': {
113
+ this.seeVersionRule().push(getValuePrimitive(p), true, 'check');
114
+ break;
115
+ }
116
+
117
+ case 'displayLanguage': {
118
+ try {
119
+ this.DisplayLanguages = Languages.fromAcceptLanguage(getValuePrimitive(p), this.languageDefinitions, !this.validating);
120
+ } catch (error) {
121
+ throw new Issue("error", "processing", null, 'INVALID_DISPLAY_NAME', this.i18n.translate('INVALID_DISPLAY_NAME', this.HTTPLanguages, getValuePrimitive(p))).handleAsOO(400);
122
+ }
123
+ break;
124
+ }
125
+ case 'designation': {
126
+ this.designations.push(getValuePrimitive(p));
127
+ break;
128
+ }
129
+ case 'property': {
130
+ this.properties.push(getValuePrimitive(p));
131
+ break;
132
+ }
133
+ case 'no-cache': {
134
+ if (getValuePrimitive(p) === 'true') this.uid = crypto.randomUUID();
135
+ break;
136
+ }
137
+ case '_incomplete':
138
+ case 'limitedExpansion': {
139
+ let value = getValuePrimitive(p);
140
+ this.limitedExpansion = strToBool(value, false);
141
+ break;
142
+ }
143
+ case 'includeDesignations': {
144
+ let value = getValuePrimitive(p);
145
+ this.includeDesignations = strToBool(value, false);
146
+ break;
147
+ }
148
+ case 'includeDefinition': {
149
+ let value = getValuePrimitive(p);
150
+ this.includeDefinition = strToBool(value, false);
151
+ break;
152
+ }
153
+ case 'activeOnly': {
154
+ let value = getValuePrimitive(p);
155
+ this.activeOnly = strToBool(value, false);
156
+ break;
157
+ }
158
+ case 'excludeNested': {
159
+ let value = getValuePrimitive(p);
160
+ this.excludeNested = strToBool(value, false);
161
+ break;
162
+ }
163
+ case 'excludeNotForUI': {
164
+ let value = getValuePrimitive(p);
165
+ this.excludeNotForUI = strToBool(value, false);
166
+ break;
167
+ }
168
+ case 'excludePostCoordinated': {
169
+ let value = getValuePrimitive(p);
170
+ this.excludePostCoordinated = strToBool(value, false);
171
+ break;
172
+ }
173
+ case 'default-to-latest-version': {
174
+ let value = getValuePrimitive(p);
175
+ this.defaultToLatestVersion = strToBool(value, false);
176
+ break;
177
+ }
178
+ case 'incomplete-ok': {
179
+ let value = getValuePrimitive(p);
180
+ this.incompleteOK = strToBool(value, false);
181
+ break;
182
+ }
183
+ case 'diagnostics': {
184
+ let value = getValuePrimitive(p);
185
+ this.diagnostics = strToBool(value, false);
186
+ break;
187
+ }
188
+ case 'lenient-display-validation': {
189
+ if (getValuePrimitive(p) == true) this.displayWarning = true;
190
+ break;
191
+ }
192
+ case 'valueset-membership-only': {
193
+ if (getValuePrimitive(p) == true) this.membershipOnly = true;
194
+ break;
195
+ }
196
+ case 'profile' : {
197
+ let value = p.resource;
198
+ if (value && (value.resourceType === 'Parameters' || value.resourceType === 'ExpansionProfile')) {
199
+ this.readParams(value);
200
+ }
201
+ }
202
+ // eslint-disable-next-line no-fallthrough
203
+ case 'term': // jQuery support
204
+ case 'filter' : {
205
+ this.filter = getValuePrimitive(p);
206
+ break;
207
+ }
208
+ case 'count' : {
209
+ this.count = Utilities.parseIntOrDefault(getValuePrimitive(p), -1);
210
+ break;
211
+ }
212
+ case 'offset' : {
213
+ this.offset = Utilities.parseIntOrDefault(getValuePrimitive(p), -1);
214
+ break;
215
+ }
216
+
217
+ case 'limit' : {
218
+ this.limit = Utilities.parseIntOrDefault(getValuePrimitive(p), -1);
219
+ break;
220
+ }
221
+ }
222
+ }
223
+
224
+ if (!this.hasHTTPLanguages && this.hasParam(params, "__Content-Language")) {
225
+ this.HTTPLanguages = Languages.fromAcceptLanguage(this.paramstr(params, "__Content-Language"), this.languageDefinitions, !this.validating);
226
+ }
227
+ if (!this.hasHTTPLanguages && this.hasParam(params, "__Accept-Language")) {
228
+ this.HTTPLanguages = Languages.fromAcceptLanguage(this.paramstr(params, "__Accept-Language"), this.languageDefinitions, !this.validating);
229
+ }
230
+ }
231
+
232
+ paramstr(params, name) {
233
+ if (params.parameter) {
234
+ for (let p of params.parameter) {
235
+ if (p.name == name) {
236
+ return getValuePrimitive(p);
237
+ }
238
+ }
239
+ }
240
+ }
241
+
242
+ hasParam(params, name) {
243
+ return params.parameter && params.parameter.find(p => p.name == name);
244
+ }
245
+
246
+ get HTTPLanguages() {
247
+ return this.FHTTPLanguages;
248
+ }
249
+
250
+ set HTTPLanguages(value) {
251
+ this.FHTTPLanguages = value;
252
+ }
253
+
254
+ get DisplayLanguages() {
255
+ return this.FDisplayLanguages;
256
+ }
257
+
258
+ set DisplayLanguages(value) {
259
+ this.FDisplayLanguages = value;
260
+ }
261
+
262
+ get hasHTTPLanguages() {
263
+ return this.FHTTPLanguages && this.FHTTPLanguages.source;
264
+ }
265
+
266
+ get hasDisplayLanguages() {
267
+ return this.FDisplayLanguages && this.FDisplayLanguages.source;
268
+ }
269
+
270
+ get hasDesignations() {
271
+ return this.FDesignations.length > 0;
272
+ }
273
+
274
+ get activeOnly() {
275
+ return this.FActiveOnly;
276
+ }
277
+
278
+ set activeOnly(value) {
279
+ this.FActiveOnly = value;
280
+ this.hasActiveOnly = true;
281
+ }
282
+
283
+ get excludeNested() {
284
+ return this.FExcludeNested;
285
+ }
286
+
287
+ set excludeNested(value) {
288
+ this.FExcludeNested = value;
289
+ this.hasExcludeNested = true;
290
+ }
291
+
292
+ get generateNarrative() {
293
+ return this.FGenerateNarrative;
294
+ }
295
+
296
+ set generateNarrative(value) {
297
+ this.FGenerateNarrative = value;
298
+ this.hasGenerateNarrative = true;
299
+ }
300
+
301
+ get limitedExpansion() {
302
+ return this.FLimitedExpansion;
303
+ }
304
+
305
+ set limitedExpansion(value) {
306
+ this.FLimitedExpansion = value;
307
+ this.hasLimitedExpansion = true;
308
+ }
309
+
310
+ get excludeNotForUI() {
311
+ return this.FExcludeNotForUI;
312
+ }
313
+
314
+ set excludeNotForUI(value) {
315
+ this.FExcludeNotForUI = value;
316
+ this.hasExcludeNotForUI = true;
317
+ }
318
+
319
+ get excludePostCoordinated() {
320
+ return this.FExcludePostCoordinated;
321
+ }
322
+
323
+ set excludePostCoordinated(value) {
324
+ this.FExcludePostCoordinated = value;
325
+ this.hasExcludePostCoordinated = true;
326
+ }
327
+
328
+ get includeDesignations() {
329
+ return this.FIncludeDesignations;
330
+ }
331
+
332
+ set includeDesignations(value) {
333
+ this.FIncludeDesignations = value;
334
+ this.hasIncludeDesignations = true;
335
+ }
336
+
337
+ get includeDefinition() {
338
+ return this.FIncludeDefinition;
339
+ }
340
+
341
+ set includeDefinition(value) {
342
+ this.FIncludeDefinition = value;
343
+ this.hasIncludeDefinition = true;
344
+ }
345
+
346
+ get defaultToLatestVersion() {
347
+ return this.FDefaultToLatestVersion;
348
+ }
349
+
350
+ set defaultToLatestVersion(value) {
351
+ this.FDefaultToLatestVersion = value;
352
+ this.hasDefaultToLatestVersion = true;
353
+ }
354
+
355
+ get incompleteOK() {
356
+ return this.FIncompleteOK;
357
+ }
358
+
359
+ set incompleteOK(value) {
360
+ this.FIncompleteOK = value;
361
+ this.hasIncompleteOK = true;
362
+ }
363
+
364
+ get displayWarning() {
365
+ return this.FDisplayWarning;
366
+ }
367
+
368
+ set displayWarning(value) {
369
+ this.FDisplayWarning = value;
370
+ this.hasDisplayWarning = true;
371
+ }
372
+
373
+ get membershipOnly() {
374
+ return this.FMembershipOnly;
375
+ }
376
+
377
+ set membershipOnly(value) {
378
+ this.FMembershipOnly = value;
379
+ this.hasMembershipOnly = true;
380
+ }
381
+
382
+ get versionRules() {
383
+ return this.FVersionRules;
384
+ }
385
+
386
+ get properties() {
387
+ return this.FProperties;
388
+ }
389
+
390
+ get designations() {
391
+ return this.FDesignations;
392
+ }
393
+
394
+ static defaultProfile(langDefs) {
395
+ return new TxParameters(langDefs);
396
+ }
397
+
398
+ seeParameter(name, value, overwrite) {
399
+ if (value) {
400
+ if (name === 'displayLanguage' && (!this.FDisplayLanguages || overwrite)) {
401
+ this.DisplayLanguages = Languages.fromAcceptLanguage(getValuePrimitive(value), this.languageDefinitions, !this.validating)
402
+ }
403
+
404
+ if (name === 'designation') {
405
+ this.designations.push(getValuePrimitive(value));
406
+ }
407
+ }
408
+ }
409
+
410
+ getVersionForRule(systemURI, mode) {
411
+ for (let rule of this.FVersionRules) {
412
+ if (rule.system === systemURI && rule.mode === mode) {
413
+ return rule.version;
414
+ }
415
+ }
416
+ return '';
417
+ }
418
+
419
+ rulesForSystem(systemURI) {
420
+ let result = [];
421
+ for (let t of this.FVersionRules) {
422
+ if (t.system === systemURI) {
423
+ result.push(t);
424
+ }
425
+ }
426
+ return result;
427
+ }
428
+
429
+ seeVersionRule(url, vs, mode) {
430
+ let sl = url ? url.split('|') : [];
431
+ if (sl.length === 2) {
432
+ this.versionRules.push(new VersionRule(sl[0], sl[1], vs, mode));
433
+ } else {
434
+ throw new Error('Unable to understand ' + mode + ' system version "' + url + '"');
435
+ }
436
+ }
437
+
438
+ workingLanguages() {
439
+ if (this.FDisplayLanguages) {
440
+ return this.FDisplayLanguages;
441
+ } else {
442
+ return this.FHTTPLanguages;
443
+ }
444
+ }
445
+
446
+ langSummary() {
447
+ if (this.FDisplayLanguages) {
448
+ return this.FDisplayLanguages.asString(false);
449
+ } else if (this.FHTTPLanguages) {
450
+ return this.FHTTPLanguages.asString(false);
451
+ } else {
452
+ return '--';
453
+ }
454
+ }
455
+
456
+ summary() {
457
+ let result = '';
458
+
459
+ const commaAdd = (r, s) => {
460
+ if (!r) return s;
461
+ return r + ', ' + s;
462
+ };
463
+
464
+ const b = (s, v) => {
465
+ if (v) {
466
+ result = commaAdd(result, s);
467
+ }
468
+ };
469
+
470
+ const sv = (s, v) => {
471
+ if (v) {
472
+ result = commaAdd(result, s + '=' + v);
473
+ }
474
+ };
475
+
476
+ sv('uid', this.FUid);
477
+ if (this.FProperties) {
478
+ sv('properties', this.FProperties.join(','));
479
+ }
480
+ if (this.FHTTPLanguages) {
481
+ sv('http-lang', this.FHTTPLanguages.asString(true));
482
+ }
483
+ if (this.FDisplayLanguages) {
484
+ sv('disp-lang', this.FDisplayLanguages.asString(true));
485
+ }
486
+ if (this.FDesignations) {
487
+ sv('designations', this.FDesignations.join(','));
488
+ }
489
+ b('active-only', this.FActiveOnly);
490
+ b('exclude-nested', this.FExcludeNested);
491
+ b('generate-narrative', this.FGenerateNarrative);
492
+ b('limited-expansion', this.FLimitedExpansion);
493
+ b('for-ui', this.FExcludeNotForUI);
494
+ b('exclude-post-coordinated', this.FExcludePostCoordinated);
495
+ b('include-designations', this.FIncludeDesignations);
496
+ b('include-definition', this.FIncludeDefinition);
497
+ b('membership-only', this.FMembershipOnly);
498
+ b('default-to-latest', this.FDefaultToLatestVersion);
499
+ b('incomplete-ok', this.FIncompleteOK);
500
+ b('display-warning', this.FDisplayWarning);
501
+
502
+ return result;
503
+ }
504
+
505
+ verSummary() {
506
+ let result = '';
507
+ for (let p of this.FVersionRules) {
508
+ if (!result) {
509
+ result = p.asString();
510
+ } else {
511
+ result = result + ', ' + p.asString();
512
+ }
513
+ }
514
+ return result;
515
+ }
516
+
517
+ hashSource() {
518
+ const b = (v) => {
519
+ return v ? '1|' : '0|';
520
+ };
521
+
522
+ let s = '|'+this.count+'|'+this.limit+'|'+this.offset+
523
+ this.FUid + '|' + b(this.FMembershipOnly) + '|' + this.FProperties.join(',') + '|' +
524
+ b(this.FActiveOnly) + b(this.FIncompleteOK) + b(this.FDisplayWarning) + b(this.FExcludeNested) + b(this.FGenerateNarrative) + b(this.FLimitedExpansion) + b(this.FExcludeNotForUI) + b(this.FExcludePostCoordinated) +
525
+ b(this.FIncludeDesignations) + b(this.FIncludeDefinition) + b(this.hasActiveOnly) + b(this.hasExcludeNested) + b(this.hasGenerateNarrative) +
526
+ b(this.hasLimitedExpansion) + b(this.hasExcludeNotForUI) + b(this.hasExcludePostCoordinated) + b(this.hasIncludeDesignations) +
527
+ b(this.hasIncludeDefinition) + b(this.hasDefaultToLatestVersion) + b(this.hasIncompleteOK) + b(this.hasDisplayWarning) + b(this.hasExcludeNotForUI) + b(this.hasMembershipOnly) + b(this.FDefaultToLatestVersion);
528
+
529
+ if (this.hasHTTPLanguages) {
530
+ s = s + this.FHTTPLanguages.asString(true) + '|';
531
+ }
532
+ if (this.hasDisplayLanguages) {
533
+ s = s + '*' + this.FDisplayLanguages.asString(true) + '|';
534
+ }
535
+ if (this.hasDesignations) {
536
+ s = s + this.FDesignations.join(',') + '|';
537
+ }
538
+ for (let t of this.FVersionRules) {
539
+ s = s + t.asString() + '|';
540
+ }
541
+ for (let t of this.FValueSetVersionRules || []) {
542
+ s = s + t.asString() + '|';
543
+ }
544
+
545
+ return s;
546
+ }
547
+
548
+ link() {
549
+ return this;
550
+ }
551
+
552
+ clone() {
553
+ let result = new TxParameters(this.languageDefinitions, this.i18n, this.validating);
554
+ result.assign(this);
555
+ return result;
556
+ }
557
+
558
+ assign(other) {
559
+ if (other.FVersionRules) {
560
+ this.FVersionRules = [...other.FVersionRules];
561
+ }
562
+ if (other.FValueSetVersionRules) {
563
+ this.FValueSetVersionRules = [...other.FValueSetVersionRules];
564
+ }
565
+ this.FActiveOnly = other.FActiveOnly;
566
+ this.FExcludeNested = other.FExcludeNested;
567
+ this.FGenerateNarrative = other.FGenerateNarrative;
568
+ this.FLimitedExpansion = other.FLimitedExpansion;
569
+ this.FExcludeNotForUI = other.FExcludeNotForUI;
570
+ this.FExcludePostCoordinated = other.FExcludePostCoordinated;
571
+ this.FIncludeDesignations = other.FIncludeDesignations;
572
+ this.FIncludeDefinition = other.FIncludeDefinition;
573
+ this.FUid = other.FUid;
574
+ this.FMembershipOnly = other.FMembershipOnly;
575
+ this.FDefaultToLatestVersion = other.FDefaultToLatestVersion;
576
+ this.FIncompleteOK = other.FIncompleteOK;
577
+ this.FDisplayWarning = other.FDisplayWarning;
578
+ this.FDiagnostics = other.FDiagnostics;
579
+ this.hasActiveOnly = other.hasActiveOnly;
580
+ this.hasExcludeNested = other.hasExcludeNested;
581
+ this.hasGenerateNarrative = other.hasGenerateNarrative;
582
+ this.hasLimitedExpansion = other.hasLimitedExpansion;
583
+ this.hasExcludeNotForUI = other.hasExcludeNotForUI;
584
+ this.hasExcludePostCoordinated = other.hasExcludePostCoordinated;
585
+ this.hasIncludeDesignations = other.hasIncludeDesignations;
586
+ this.hasIncludeDefinition = other.hasIncludeDefinition;
587
+ this.hasDefaultToLatestVersion = other.hasDefaultToLatestVersion;
588
+ this.hasIncompleteOK = other.hasIncompleteOK;
589
+ this.hasMembershipOnly = other.hasMembershipOnly;
590
+ this.hasDisplayWarning = other.hasDisplayWarning;
591
+
592
+ if (other.FProperties) {
593
+ this.FProperties = [...other.FProperties];
594
+ }
595
+
596
+ if (other.FDesignations) {
597
+ this.FDesignations = [...other.FDesignations];
598
+ }
599
+
600
+ if (other.FHTTPLanguages) {
601
+ this.FHTTPLanguages = other.FHTTPLanguages;
602
+ }
603
+ if (other.FDisplayLanguages) {
604
+ this.FDisplayLanguages = other.FDisplayLanguages;
605
+ }
606
+ }
607
+
608
+ logInfo() {
609
+ return ""; // any parameters worth logging
610
+ }
611
+ }
612
+
613
+ module.exports = { TxParameters, VersionRule };