diff --git a/package.json b/package.json index 715c5143a7b6748a0835dd15ec4bccab7303d94d..20d8ebadbf7d5967bbb33798db09a073b863fbbe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "zap", "version": "0.99.1", + "featureLevel": 1, "description": "Configuration tool for the Zigbee Cluster Library", "productName": "zap", "cordovaId": "", diff --git a/src-electron/generator/generation-engine.js b/src-electron/generator/generation-engine.js index 683c74f1ed3600f7b9f2e037840de40e0b635c37..d11579ecc879208cb5ceffab08eaf5f7f8ee5013 100644 --- a/src-electron/generator/generation-engine.js +++ b/src-electron/generator/generation-engine.js @@ -349,7 +349,7 @@ function writeFile(fileName, content, doBackup) { function generateGenerationContent(genResult) { var out = { writeTime: new Date().toString(), - featureLevel: env.featureLevel, + featureLevel: env.zapVersion().featureLevel, creator: 'zap', content: [], } diff --git a/src-electron/importexport/export.js b/src-electron/importexport/export.js index 9e7b4d697d12f69f701bf361ea1372d65e6a74ba..4fef336d0f40f19734e4e55973d8e4be4e2024bc 100644 --- a/src-electron/importexport/export.js +++ b/src-electron/importexport/export.js @@ -172,7 +172,7 @@ function createStateFromDatabase(db, sessionId) { return new Promise((resolve, reject) => { var state = { writeTime: new Date().toString(), - featureLevel: env.featureLevel, + featureLevel: env.zapVersion().featureLevel, creator: 'zap', } var promises = [] diff --git a/src-electron/importexport/import.js b/src-electron/importexport/import.js index 0a78874fb78062c24e16ea194607f45b0282acd7..53c5f72bb4f294dbdd343bd5638d6b627b8f75ac 100644 --- a/src-electron/importexport/import.js +++ b/src-electron/importexport/import.js @@ -235,9 +235,11 @@ function readDataFromFile(filePath) { if (!('featureLevel' in state)) { state.featureLevel = 0 } - if (state.featureLevel > env.featureLevel) { + if (state.featureLevel > env.zapVersion().featureLevel) { reject( - `File requires feature level ${state.featureLevel}, we only have ${env.featureLevel}. Please upgrade your zap!` + `File requires feature level ${state.featureLevel}, we only have ${ + env.zapVersion().featureLevel + }. Please upgrade your zap!` ) } else { resolve(state) diff --git a/src-electron/util/args.js b/src-electron/util/args.js index 1ac817e682a2e227acea842be8ac926a437adda6..aabd23b6bfbd6df472c0b3276bbc6a69407cdbe9 100644 --- a/src-electron/util/args.js +++ b/src-electron/util/args.js @@ -115,7 +115,7 @@ function processCommandLineArguments(argv) { }) .usage('Usage: $0 <command> [options]') .version( - `Version: ${zapVersion.version}\nHash: ${zapVersion.hash}\nDate: ${zapVersion.date}` + `Version: ${zapVersion.version}\nFeature level: ${zapVersion.featureLevel}\nHash: ${zapVersion.hash}\nDate: ${zapVersion.date}` ) .help() .alias({ diff --git a/src-electron/util/env.js b/src-electron/util/env.js index cd0d6dbd4db9a303bbf5940aa1ffb5ae1a718d87..f701fe0d9fc67163a9576b481b4fab9dca59dd83 100644 --- a/src-electron/util/env.js +++ b/src-electron/util/env.js @@ -22,17 +22,6 @@ const pino = require('pino') const zapBaseUrl = 'http://localhost:' const zapUrlLog = 'zap.url' -// Feature level: -// please increase this with care. Increasing this number means that -// when you save a.zap file, anyone with an older feature level will -// NOT BE ABLE to read it in. So use this only in cases of real -// file compatibility issues, where you are ok with forcing everyone -// else to upgrade. -// Do note, that zap should still ALWAYS be able to read in older -// files, so this only affects forward compatibility, not backwards compatibility. -// -const featureLevel = 1 - // Basic environment tie-ins var pino_logger = pino({ name: 'zap', @@ -103,16 +92,22 @@ function sqliteTestFile(id, deleteExistingFile = true) { return fileName } +/** + * Returns the zap version. + * + * @returns zap version, which is an object that contains 'featureLevel', 'hash', 'timestamp' and 'date' + */ function zapVersion() { if (versionObject == null) { - versionObject = { - featureLevel: featureLevel, - } + versionObject = {} try { - var { version } = require('../../package.json') - versionObject.version = version - } catch { + var p = require('../../package.json') + versionObject.version = p.version + versionObject.featureLevel = p.featureLevel + } catch (err) { logError('Could not retrieve version from package.json') + versionObject.featureLevel = 0 + versionObject.version = '0.0.0' } try { @@ -255,4 +250,3 @@ exports.logHttpServerUrl = logHttpServerUrl exports.urlLogFile = urlLogFile exports.baseUrl = baseUrl exports.versionsCheck = versionsCheck -exports.featureLevel = featureLevel diff --git a/test/env.test.js b/test/env.test.js index 81a862ac2f260cd5b1917dae64c6b209977ec3b0..89a5c0783050b6266e6433aab4e684df9e822582 100644 --- a/test/env.test.js +++ b/test/env.test.js @@ -43,7 +43,7 @@ test('Versions check', () => { }) test('Feature level', () => { - expect(env.featureLevel).toBeGreaterThan(0) + expect(env.zapVersion().featureLevel).toBeGreaterThan(0) }) test('Version', () => { diff --git a/test/importexport.test.js b/test/importexport.test.js index 702bb455b8c8f5a143da2431734ed5ac7e77ef43..b2d657ea370e0562f85db12f44fee64a9aeecd60 100644 --- a/test/importexport.test.js +++ b/test/importexport.test.js @@ -100,7 +100,7 @@ test('Test file 1 import', () => { .then((state) => { var commandCount = 0 var attributeCount = 0 - expect(state.featureLevel).toBe(env.featureLevel) + expect(state.featureLevel).toBe(env.zapVersion().featureLevel) expect(state.endpointTypes.length).toBe(1) expect(state.endpointTypes[0].clusters.length).toBe(11) state.endpointTypes[0].clusters.forEach((c) => {