@bcgsc-pori/graphkb-schema v4.0.0
GraphKB Schema
This repository is part of the platform for oncogenomic reporting and interpretation.
This is the package which defines the schema logic used to create the database, build the API and GUI. It is a dependency of both the API and GUI and uses the parser package.
This is where all database constraints and swagger metadata associated with a particular database model is defined
Deployment
This package is installed on our local npm server. To install simply add to your package.json as you would with any other package and supply the registry argument to npm install
Getting Started (For Developers)
Install the dependencies
npm install
Then run the tests
npm run test
Using with OrientJS
To avoid requiring orientjs in this package, the RID class is defaulted to the builtin String class. It is expected that if you want your RID strings cast to RID objects (orientjs.RID or orientjs.RecordID for orientjs 3.X.X) that you will patch this after import. For example
const {RID} = require('orientjs');
const {constants, schema} = require('@bcgsc-pori/graphkb-schema');
const {PERMISSIONS} = constants;
constants.RID = RID; // IMPORTANT: Without this all castToRID will do is convert to a string
Migrating from v3 to v4
To facilitate more reuseable typing schemes ClassModel and Property classes have been removed and now are simply objects. All interactions with these models should go through the schema class instead of interacting directly with the model and property objects. Return types are given only when they differ.
v3 | v4 equivalent |
---|---|
ClassModel._properties | ClassDefinition.properties |
ClassModel.properties | SchemaDefinition.getProperties(modelName: string) |
ClassModel.required | SchemaDefinition.requiredProperties(modelName: string) |
ClassModel.optional | SchemaDefinition.optionalProperties(modelName: string) |
ClassModel.getActiveProperties() | SchemaDefinition.activeProperties(modelName: string) |
ClassModel.inherits | SchemaDefinition.ancestors(modelName: string) |
ClassModel.subclasses: ClassModel[] | SchemaDefinition.children(modelName: string): string[] |
ClassModel.descendantTree(excludeAbstract: boolean): ClassModel[] | SchemaDefinition.descendants(modelName: string, opt: { excludeAbstract?: boolean, includeSelf?: boolean }): string[] ^1 |
ClassModel.queryProperties: Record<string,Property[]> | SchemaDefinition.queryableProperties(modelName: string): Record<string,PropertyDefinition[]> |
ClassModel.inheritsProperty(propName: string) | SchemaDefinition.inheritsProperty(modelName: string, propName: string) |
ClassModel.toJSON | N/A ^2 |
ClassModel.formatRecord(record: GraphRecord, opt = {}) | SchemaDefinition.formatRecord(modelName: string, record: GraphRecord, opt = {}) |
Property.validate(inputValue: unknown): unknown | validateProperty = (prop: PropertyDefinition, inputValue: unknown): unknown |
^1: must be called with includeSelf=true to match v3 edition ^2: There is no need for this function now since the ClassDefinition object is effectively already a JSON object