From 0a0afa255c468b5d3adb6c353461867d889c210b Mon Sep 17 00:00:00 2001 From: rhenck <richard.henck@iqb.hu-berlin.de> Date: Wed, 9 Feb 2022 10:59:07 +0100 Subject: [PATCH] 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. --- package-lock.json | 11 +-- package.json | 2 - .../common/classes/importedModuleVersion.ts | 88 +++++++++---------- 3 files changed, 44 insertions(+), 57 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72a625df4..66a16a19d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 08fbd436c..795d17b82 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/projects/common/classes/importedModuleVersion.ts b/projects/common/classes/importedModuleVersion.ts index e5da40381..38e48342c 100644 --- a/projects/common/classes/importedModuleVersion.ts +++ b/projects/common/classes/importedModuleVersion.ts @@ -1,62 +1,54 @@ -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; } } -- GitLab