fhirsmith 0.8.6 → 0.9.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 CHANGED
@@ -5,6 +5,33 @@ All notable changes to the Health Intersections Node Server will be documented i
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [v0.9.0] - 2026-04-09
9
+
10
+ ### Added
11
+
12
+ - TX: VSAC upgrade to pick up more changes
13
+ - TX: add definition of $related operation to CapabilityStatement
14
+
15
+ ### Changed
16
+
17
+ - TX: Deal with regex Denial of Service Issue
18
+ - TX: improve fragment handling in extensions per TI decision
19
+ - TX: Reduce snomed loaded versions - have already moved to affiliate managed servers
20
+ - TX: fix bug handling excluded concepts using a filter
21
+ - improve dashboard template
22
+
23
+ ### Fixed
24
+
25
+ - Update dependencies for security fixes
26
+ - TX: fix error in SNOMED translate for implicit concept maps
27
+ - TX: Fix OCL cache invalidation and case-insensitive concept lookups
28
+ - Publisher: fix handling of web templates folder
29
+ - Publisher: fix webtemplates table headings
30
+
31
+ ### Tx Conformance Statement
32
+
33
+ FHIRsmith passed all 1578 HL7 terminology service tests (modes tx.fhir.org+omop+general+snomed, tests v1.9.1, runner v6.9.5)
34
+
8
35
  ## [v0.8.6] - 2026-04-06
9
36
 
10
37
  ### Added
@@ -0,0 +1,13 @@
1
+ const { RE2 } = require('re2-wasm');
2
+
3
+ class RegExUtilities {
4
+
5
+ compile(pattern, flags) {
6
+ // RE2 requires the unicode flag; add it if not already present
7
+ const re2Flags = flags && flags.includes('u') ? flags : (flags || '') + 'u';
8
+ return new RE2(pattern, re2Flags);
9
+ }
10
+
11
+ }
12
+
13
+ module.exports = new RegExUtilities();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fhirsmith",
3
- "version": "0.8.6",
3
+ "version": "0.9.0",
4
4
  "txVersion": "1.9.1",
5
5
  "description": "A Node.js server that provides a collection of tools to serve the FHIR ecosystem",
6
6
  "main": "server.js",
@@ -51,7 +51,7 @@
51
51
  "fs-extra": "^11.3.3",
52
52
  "ini": "^6.0.0",
53
53
  "inquirer": "^8.2.5",
54
- "liquidjs": "^10.24.0",
54
+ "liquidjs": "^10.25.5",
55
55
  "lusca": "^1.7.0",
56
56
  "natural": "^6.12.0",
57
57
  "node-cron": "^3.0.3",
@@ -61,6 +61,7 @@
61
61
  "passport-github2": "^0.1.12",
62
62
  "passport-google-oauth20": "^2.0.0",
63
63
  "properties-file": "^3.6.4",
64
+ "re2-wasm": "^1.0.2",
64
65
  "rimraf": "^5.0.10",
65
66
  "sqlite3": "^5.1.7",
66
67
  "tar": "^7.5.7",
@@ -714,17 +714,38 @@ class PublisherModule {
714
714
 
715
715
  // Step 1: Clone supporting repositories into the task directory
716
716
  const registryDir = path.join(taskDir, 'ig-registry');
717
- const historyDir = path.join(taskDir, 'fhir-ig-history-template');
718
- const templatesDir = path.join(taskDir, 'fhir-web-templates');
719
717
 
720
718
  await this.runCommand('git', ['clone', 'git@github.com:FHIR/ig-registry.git', registryDir],
721
719
  {}, task.id, 'Cloning ig-registry');
722
720
 
723
- await this.runCommand('git', ['clone', 'https://github.com/HL7/fhir-ig-history-template.git', historyDir],
724
- {}, task.id, 'Cloning fhir-ig-history-template');
721
+ // Use website-configured history templates path if provided, otherwise clone the default repo
722
+ let historyDir;
723
+ if (website.history_templates) {
724
+ historyDir = website.history_templates;
725
+ await this.logTaskMessage(task.id, 'info', 'Using configured history templates: ' + historyDir);
726
+ if (!fs.existsSync(historyDir)) {
727
+ throw new Error('Configured history_templates path does not exist: ' + historyDir);
728
+ }
729
+ } else {
730
+ historyDir = path.join(taskDir, 'fhir-ig-history-template');
731
+ await this.runCommand('git', ['clone', 'https://github.com/HL7/fhir-ig-history-template.git', historyDir],
732
+ {}, task.id, 'Cloning fhir-ig-history-template');
733
+ }
725
734
 
726
- await this.runCommand('git', ['clone', 'https://github.com/HL7/fhir-web-templates.git', templatesDir],
727
- {}, task.id, 'Cloning fhir-web-templates');
735
+ // Use website-configured web templates path if provided, otherwise clone the default repo.
736
+ // This allows pointing to a subdirectory of the templates repo for different target websites.
737
+ let templatesDir;
738
+ if (website.web_templates) {
739
+ templatesDir = website.web_templates;
740
+ await this.logTaskMessage(task.id, 'info', 'Using configured web templates: ' + templatesDir);
741
+ if (!fs.existsSync(templatesDir)) {
742
+ throw new Error('Configured web_templates path does not exist: ' + templatesDir);
743
+ }
744
+ } else {
745
+ templatesDir = path.join(taskDir, 'fhir-web-templates');
746
+ await this.runCommand('git', ['clone', 'https://github.com/HL7/fhir-web-templates.git', templatesDir],
747
+ {}, task.id, 'Cloning fhir-web-templates');
748
+ }
728
749
 
729
750
  // Step 2: Reuse the publisher.jar from the draft build
730
751
  const publisherJar = path.join(taskDir, 'publisher.jar');
@@ -1853,7 +1874,7 @@ class PublisherModule {
1853
1874
  } else {
1854
1875
  content += '<div class="table-responsive">';
1855
1876
  content += '<table class="table table-striped">';
1856
- content += '<thead><tr><th>Name</th><th>Local Folder</th><th>Git Root</th><th>Update Script</th><th>Active</th><th>Created</th><th>Actions</th></tr></thead>';
1877
+ content += '<thead><tr><th>Name</th><th>Local Folder</th><th>Git Root</th><th>History Templates</th><th>Web Templates</th><th>Update Script</th><th>Active</th><th>Created</th><th>Actions</th></tr></thead>';
1857
1878
  content += '<tbody>';
1858
1879
 
1859
1880
  websites.forEach(website => {