Skip to content
Snippets Groups Projects
Commit 0a0afa25 authored by rhenck's avatar rhenck
Browse files

Refactor imported unit version to not rely on semver package

The package was not a proper ECMA Script package and therefore can not 
be tree shaken properly and would unnecessarily increase the package 
size.
parent e1644795
No related branches found
No related tags found
No related merge requests found
......@@ -2287,12 +2287,6 @@
"@types/prosemirror-transform": "*"
}
},
"@types/semver": {
"version": "7.3.9",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz",
"integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==",
"dev": true
},
"@types/source-list-map": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
......@@ -8073,6 +8067,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
}
......@@ -11631,6 +11626,7 @@
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
......@@ -14671,7 +14667,8 @@
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"yaml": {
"version": "1.10.2",
......
......@@ -79,7 +79,6 @@
"ngx-tiptap": "^3.0.4",
"prosemirror-state": "^1.3.4",
"rxjs": "~6.6.0",
"semver": "^7.3.5",
"testcafe": "^1.17.0",
"tslib": "^2.1.0",
"zone.js": "~0.11.4"
......@@ -91,7 +90,6 @@
"@iqb/eslint-config": "^1.0.2",
"@types/jasmine": "~3.6.0",
"@types/node": "^12.11.1",
"@types/semver": "^7.3.9",
"iqb-dev-components": "^1.4.0",
"jasmine-core": "^3.8.0",
"karma": "~6.3.0",
......
export class ImportModuleVersion {
private static unitLoaded: boolean;
private static version: string;
export class ImportedModuleVersion {
static unitLoaded: boolean;
static version: string | null = null; // null for invalid
static setVersion(importedModuleVersion: string): void {
ImportModuleVersion.unitLoaded = false;
ImportModuleVersion.version = importedModuleVersion;
}
static setUnitLoaded(): void {
ImportModuleVersion.unitLoaded = true;
}
static isUnitLoaded(): boolean {
return ImportModuleVersion.unitLoaded;
}
static getVersion(): { fullName: string, type: string, version: number[] } {
return {
fullName: ImportModuleVersion.version,
type: ImportModuleVersion.getVersionType(),
version: ImportModuleVersion.getVersionNumbers()
};
static setVersion(importedModuleVersion: string | undefined): void {
ImportedModuleVersion.unitLoaded = false;
if (importedModuleVersion) {
ImportedModuleVersion.verifyVersionString(importedModuleVersion) ?
ImportedModuleVersion.version = importedModuleVersion.split('@')[1] :
ImportedModuleVersion.version = null;
}
}
private static getVersionType(): string {
if (ImportModuleVersion.version && ImportModuleVersion.version.length) {
const importedModuleVersionArray = ImportModuleVersion.version.split('@');
if (importedModuleVersionArray.length === 2) {
return importedModuleVersionArray[0];
}
}
return 'none';
/*
Checks for existence of parts before and after the @ sign. The first part has to be
'iqb-aspect-definition', which indicates a known and supported version.
The second part has to have exactly 3 numbers, split at the . (dot) sign.
*/
static verifyVersionString(versionString: string): boolean {
if (versionString.split('@').length !== 2 ||
versionString.split('@')[0] !== 'iqb-aspect-definition' ||
versionString.split('@')[1].split('.').length !== 3) {
console.error('Error reading the unit definition!');
return false;
}
return true;
}
private static getVersionNumbers(): number[] {
if (ImportModuleVersion.version && ImportModuleVersion.version.length) {
const importedModuleVersionArray = ImportModuleVersion.version.split('@');
if (importedModuleVersionArray.length === 2) {
const versionArray = importedModuleVersionArray[1].split('.');
if (versionArray.length === 3) {
return versionArray.map(number => Number(number));
}
}
}
return [0, 0, 0];
}
static isGreaterThanOrEqualTo(versionString: string): boolean {
if (!ImportedModuleVersion.version) {
return false;
}
static verifyVersion(): boolean {
if (!ImportModuleVersion.getVersion().fullName) {
if (ImportedModuleVersion.version[0] < versionString[0]) {
return false;
}
if (ImportModuleVersion.getVersionType() !== 'iqb-aspect-definition') {
if (ImportedModuleVersion.version[0] > versionString[0]) {
return true;
}
if (ImportedModuleVersion.version[1] < versionString[1]) {
return false;
}
const numbers = ImportModuleVersion.getVersionNumbers();
if (numbers[0] < 1) {
if (ImportedModuleVersion.version[1] > versionString[1]) {
return true;
}
if (ImportedModuleVersion.version[2] < versionString[2]) {
return false;
}
return numbers[1] >= 1;
return true;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment