Skip to content
forked from FHIR/sushi

SUSHI (aka "SUSHI Unshortens Short Hand Inputs") is a reference implementation command-line interpreter/compiler for FHIR Shorthand (FSH).

License

Notifications You must be signed in to change notification settings

markkramerus/sushi

 
 

Repository files navigation

GitHub Workflow Status npm

SUSHI

SUSHI (aka "SUSHI Unshortens Short Hand Inputs") is a reference implementation command-line interpreter/compiler for FHIR Shorthand (FSH).

FHIR Shorthand (FSH) is a specially-designed language for defining the content of FHIR Implementation Guides (IG). It is simple and compact, with tools to produce Fast Healthcare Interoperability Resources (FHIR) profiles, extensions and implementation guides (IG). Because it is a language, written in text statements, FHIR Shorthand encourages distributed, team-based development using conventional source code control tools such as Github.

For more information about the evolving FSH syntax see the FHIR Shorthand Reference Manual.

Installation for SUSHI Users

SUSHI requires Node.js to be installed on the user's system. Users should install Node.js 12 (LTS), although the previous LTS version (Node.js 10) is also expected to work.

Once Node.js is installed, run the following command to install or update SUSHI:

$ npm install -g fsh-sushi

After installation, the sushi commandline will be available on your path:

$ sushi --help
Usage: sushi [path-to-fsh-defs] [options]

Options:
  -o, --out <out>  the path to the output folder
  -d, --debug      output extra debugging information
  -s, --snapshot   generate snapshot in Structure Definition output (default: false)
  -i, --init       initialize a SUSHI project
  -v, --version    print SUSHI version
  -h, --help       output usage information

Additional information:
  [path-to-fsh-defs]
    Default: "."
    If input/fsh/ subdirectory present, it is included in [path-to-fsh-defs]
  -o, --out <out>
    Default: "fsh-generated"
    If legacy publisher mode (fsh subdirectory present), default output is parent of "fsh"
    If legacy flat mode (no input/fsh or fsh subdirectories present), default output is "build"

See the SUSHI documentation for detailed information on using SUSHI.

IG Generation

SUSHI supports publishing implementation guides via the new template-based IG Publisher. The template-based publisher is still being developed by the FHIR community. See the Guidance for HL7 IG Creation for more details.

Based on the inputs in FSH files, sushi-config.yaml, and the IG project directory, SUSHI populates the output directory. See the documentation on IG Project with SUSHI for more information on using SUSHI to generate IGs.

Installation for Developers

SUSHI is a TypeScript project. At a minimum, SUSHI requires Node.js to build, test, and run the CLI. Developers should install Node.js 12 (LTS), although the previous LTS version (Node.js 10) is also expected to work.

Once Node.js is installed, run the following command from this project's root folder:

$ npm install

NPM tasks

The following NPM tasks are useful in development:

Task Description
build compiles src/**/*.ts files to dist/**/*.js files using the TypeScript compiler (tsc)
build:watch similar to build but automatically builds when changes are detected in src files
build:grammar builds the ANTLR grammar from 'antlr/src/main/antlr' to 'src/import/generated'
test runs all unit tests using Jest
test:watch similar to test, but automatically runs affected tests when changes are detected in src files
lint checks all src files to ensure they follow project code styles and rules
lint:fix fixes lint errors when automatic fixes are available for them
prettier checks all src files to ensure they follow project formatting conventions
prettier:fix fixes prettier errors by rewriting files using project formatting conventions
check runs all the checks performed as part of ci (test, lint, prettier)
regression runs regression against the repos in regression/all-repos.txt (mac only)

To run any of these tasks, use npm run. For example:

$ npm run check

Regression

WARNING: The regression script currently works on Mac systems only. It is not expected to work on Windows at this time.

The regression/run-regression.sh script can be used to run regression on a set of repos. It takes the following arguments:

  • repoFile: A text file for which each line is a GitHub clone URL for a repository to run regression on. # comments out a line. (default: regression/all-repos.txt)
  • version1: The base version of SUSHI to use. Can be a specific version number, github:fhir/sushi#branch to use a GitHub branch, or local to use the local code with ts-node. (default: github:fhir/sushi)
  • version2: The version of SUSHI under test. Can be a specific version number, github:fhir/sushi#branch to use a GitHub branch, or local to use the local code with ts-node. (default: local)

For example:

$ regression/run-regression.sh regression/all-repos.txt 0.16.0 local

NOTE: Using GitHub branches of SUSHI is slow. This may be optimized in the future.

The regression script will do the following for each repository:

  1. Clone the repo from GitHub, creating two copies (for the base version of SUSHI and the version under test)
  2. Run the base version of SUSHI against one copy of the repo
  3. Run the version of SUSHI under test against the other copy of the repo
  4. Compare results and generate a report of the differences

When the script is complete, it will generate and launch a top-level index file with links to the reports and logs for each repo.

Recommended Development Environment

For the best experience, developers should use Visual Studio Code with the following plugins:

License

Copyright 2019 Health Level Seven International

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

SUSHI (aka "SUSHI Unshortens Short Hand Inputs") is a reference implementation command-line interpreter/compiler for FHIR Shorthand (FSH).

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 84.7%
  • JavaScript 14.7%
  • Other 0.6%