Change Db to typescript and add types

This commit is contained in:
yari-dewalt
2025-01-17 09:27:54 -08:00
parent 1d9c2aab8d
commit adec6cd254
2 changed files with 97 additions and 28 deletions

View File

@@ -8,12 +8,15 @@ import {
setAccDescription, setAccDescription,
clear as commonClear, clear as commonClear,
} from '../common/commonDb.js'; } from '../common/commonDb.js';
import type {
let relations = []; Element,
let latestRequirement = {}; Relation,
let requirements = new Map(); RelationshipType,
let latestElement = {}; Requirement,
let elements = new Map(); RequirementType,
RiskLevel,
VerifyType,
} from './types.js';
const RequirementType = { const RequirementType = {
REQUIREMENT: 'Requirement', REQUIREMENT: 'Requirement',
@@ -47,78 +50,108 @@ const Relationships = {
TRACES: 'traces', TRACES: 'traces',
}; };
const addRequirement = (name, type) => { const getInitialRequirement = (): Requirement => ({
id: '',
text: '',
risk: RiskLevel.LOW_RISK as RiskLevel,
verifyMethod: VerifyType.VERIFY_ANALYSIS as VerifyType,
name: '',
type: RequirementType.REQUIREMENT as RequirementType,
});
const getInitialElement = (): Element => ({
name: '',
type: '',
docRef: '',
});
// Update initial declarations
let relations: Relation[] = [];
let latestRequirement: Requirement = getInitialRequirement();
let requirements = new Map<string, Requirement>();
let latestElement: Element = getInitialElement();
let elements = new Map<string, Element>();
// Add reset functions
const resetLatestRequirement = () => {
latestRequirement = getInitialRequirement();
};
const resetLatestElement = () => {
latestElement = getInitialElement();
};
const addRequirement = (name: string, type: RequirementType) => {
if (!requirements.has(name)) { if (!requirements.has(name)) {
requirements.set(name, { requirements.set(name, {
name, name,
type, type,
id: latestRequirement.id, id: latestRequirement.id,
text: latestRequirement.text, text: latestRequirement.text,
risk: latestRequirement.risk, risk: latestRequirement.risk,
verifyMethod: latestRequirement.verifyMethod, verifyMethod: latestRequirement.verifyMethod,
}); });
} }
latestRequirement = {}; resetLatestRequirement();
return requirements.get(name); return requirements.get(name);
}; };
const getRequirements = () => requirements; const getRequirements = () => requirements;
const setNewReqId = (id) => { const setNewReqId = (id: string) => {
if (latestRequirement !== undefined) { if (latestRequirement !== undefined) {
latestRequirement.id = id; latestRequirement.id = id;
} }
}; };
const setNewReqText = (text) => { const setNewReqText = (text: string) => {
if (latestRequirement !== undefined) { if (latestRequirement !== undefined) {
latestRequirement.text = text; latestRequirement.text = text;
} }
}; };
const setNewReqRisk = (risk) => { const setNewReqRisk = (risk: RiskLevel) => {
if (latestRequirement !== undefined) { if (latestRequirement !== undefined) {
latestRequirement.risk = risk; latestRequirement.risk = risk;
} }
}; };
const setNewReqVerifyMethod = (verifyMethod) => { const setNewReqVerifyMethod = (verifyMethod: VerifyType) => {
if (latestRequirement !== undefined) { if (latestRequirement !== undefined) {
latestRequirement.verifyMethod = verifyMethod; latestRequirement.verifyMethod = verifyMethod;
} }
}; };
const addElement = (name) => { const addElement = (name: string) => {
if (!elements.has(name)) { if (!elements.has(name)) {
elements.set(name, { elements.set(name, {
name, name,
type: latestElement.type, type: latestElement.type,
docRef: latestElement.docRef, docRef: latestElement.docRef,
}); });
log.info('Added new requirement: ', name); log.info('Added new element: ', name);
} }
latestElement = {}; resetLatestElement();
return elements.get(name); return elements.get(name);
}; };
const getElements = () => elements; const getElements = () => elements;
const setNewElementType = (type) => { const setNewElementType = (type: string) => {
if (latestElement !== undefined) { if (latestElement !== undefined) {
latestElement.type = type; latestElement.type = type;
} }
}; };
const setNewElementDocRef = (docRef) => { const setNewElementDocRef = (docRef: string) => {
if (latestElement !== undefined) { if (latestElement !== undefined) {
latestElement.docRef = docRef; latestElement.docRef = docRef;
} }
}; };
const addRelationship = (type, src, dst) => { const addRelationship = (type: RelationshipType, src: string, dst: string) => {
relations.push({ relations.push({
type, type,
src, src,
@@ -130,21 +163,19 @@ const getRelationships = () => relations;
const clear = () => { const clear = () => {
relations = []; relations = [];
latestRequirement = {}; resetLatestRequirement();
requirements = new Map(); requirements = new Map();
latestElement = {}; resetLatestElement();
elements = new Map(); elements = new Map();
commonClear(); commonClear();
}; };
export default { export default {
Relationships,
RequirementType, RequirementType,
RiskLevel, RiskLevel,
VerifyType, VerifyType,
Relationships, getConfig: () => getConfig().requirement,
getConfig: () => getConfig().req,
addRequirement, addRequirement,
getRequirements, getRequirements,
setNewReqId, setNewReqId,
@@ -155,14 +186,11 @@ export default {
getAccTitle, getAccTitle,
setAccDescription, setAccDescription,
getAccDescription, getAccDescription,
addElement, addElement,
getElements, getElements,
setNewElementType, setNewElementType,
setNewElementDocRef, setNewElementDocRef,
addRelationship, addRelationship,
getRelationships, getRelationships,
clear, clear,
}; };

View File

@@ -0,0 +1,41 @@
export type RequirementType =
| 'Requirement'
| 'Functional Requirement'
| 'Interface Requirement'
| 'Performance Requirement'
| 'Physical Requirement'
| 'Design Constraint';
export type RiskLevel = 'Low' | 'Medium' | 'High';
export type VerifyType = 'Analysis' | 'Demonstration' | 'Inspection' | 'Test';
export interface Requirement {
name: string;
type: RequirementType;
id: string;
text: string;
risk: RiskLevel;
verifyMethod: VerifyType;
}
export type RelationshipType =
| 'contains'
| 'copies'
| 'derives'
| 'satisfies'
| 'verifies'
| 'refines'
| 'traces';
export interface Relation {
type: RelationshipType;
src: string;
dst: string;
}
export interface Element {
name: string;
type: string;
docRef: string;
}