From 59d3e3ad75d4caa2586c5c515f6d57f6ef03d7c9 Mon Sep 17 00:00:00 2001 From: Evgeny Metelkin Date: Mon, 13 Nov 2023 14:38:20 +0200 Subject: [PATCH] spaceFilter as expression --- TODO.md | 4 +++- export-formats.md | 8 +++---- src/another-xlsx-export/index.js | 8 +++---- src/core/abstract-export.js | 7 +++--- src/dbsolve-export/index.js | 39 +++++--------------------------- src/dot-export/index.js | 36 +++-------------------------- src/heta-code-export/index.js | 6 ++--- src/json-export/index.js | 9 +++----- src/julia-export/index.js | 15 +++--------- src/matlab-export/index.js | 37 ++++-------------------------- src/mrgsolve-export/index.js | 37 ++++-------------------------- src/sbml-export/index.js | 32 +++----------------------- src/simbio-export/index.js | 39 ++++---------------------------- src/slv-export/index.js | 37 ++++-------------------------- src/table-export/index.js | 9 +++----- src/yaml-export/index.js | 9 +++----- test/cases/12.js | 7 +++--- test/cases/6.js | 3 ++- test/export/export-check.js | 6 ++--- 19 files changed, 65 insertions(+), 283 deletions(-) diff --git a/TODO.md b/TODO.md index c6824f60..eb135432 100644 --- a/TODO.md +++ b/TODO.md @@ -32,7 +32,8 @@ ## features -- regular expression for spaceFilter +- check empty exports +- default `filepath` for Export - checking legal functions inside Expressions and functionDefinition - `#defineFunction`: circular dependences within functions, internal functions, different exports, functionDef vs units - calculate units for pow function @@ -46,6 +47,7 @@ ## ideas +- deprecated `include` statement - `#move`, `#moveNS` - `#deleteNS` action - `#move`, `#moveNS` diff --git a/export-formats.md b/export-formats.md index 0511c3f5..04c273eb 100644 --- a/export-formats.md +++ b/export-formats.md @@ -21,7 +21,7 @@ The general format for all export actions is the following: #export { format: JSON, // or other supported formats, required filepath: path/to/output, // Relative or absolute path to generated directory or file - spaceFilter: [nameless, another] // [] if set, namespaces out of the list will be skipped. + spaceFilter: "regex-expression" // only filtered namespaces will be exported, see RegExp rules ... // other options }; ``` @@ -73,7 +73,7 @@ All options is the same as for [JSON format](#json). filepath: output, // save result in file "dist/output.json" omit: [aux.wiki], // omit aux.wiki properties from components noUnitsExpr: false, // save units in format UnitsExpr - spaceFilter: [ nameless, another ] + spaceFilter: ".+" // all namespaces }; ``` @@ -143,7 +143,7 @@ Export to SLV format which is the model format for [DBSolveOptimum](http://insys #export { format: SLV, filepath: model, // save results in file "dist/model.slv" - spaceFilter: nameless, // namespace used for model generation + spaceFilter: "^nameless$", // namespace used for model generation eventsOff: false, // all switchers will be transformed to DBSolve events powTransform: keep, // use x^y and pow(x, y) without changes groupConstBy: "tags[1]" // use the second tag @@ -344,7 +344,7 @@ Creation of Matlab files (.m) which represent ODE and code to run ODE. #export { format: Matlab, filepath: matlab_code, // save result in directory "dist/matlab_code" - spaceFilter: nameless // create model based on nameless namespace + spaceFilter: (nameless|another_one) // create model based on nameless namespace }; ``` diff --git a/src/another-xlsx-export/index.js b/src/another-xlsx-export/index.js index 5beed760..28c2b79a 100644 --- a/src/another-xlsx-export/index.js +++ b/src/another-xlsx-export/index.js @@ -14,11 +14,9 @@ class AnotherXLSXExport extends XLSXExport { } makeSheet(){ // filtered namespaces - let nsArray = [...this._container.namespaceStorage] - .map((pair) => pair[1]); - let nsOutput = typeof this.spaceFilter === 'undefined' - ? nsArray - : nsArray.filter((ns) => this.spaceFilter.indexOf(ns.spaceName) !== -1); + let nsOutput = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)) + .map(([spaceName, ns]) => ns); let qArr = nsOutput .map((ns) => ns.toArray()) diff --git a/src/core/abstract-export.js b/src/core/abstract-export.js index b6061ecc..d6a1f1df 100644 --- a/src/core/abstract-export.js +++ b/src/core/abstract-export.js @@ -6,10 +6,7 @@ const schema = { required: ['filepath'], properties: { filepath: {type: 'string', pattern: '^[\\w\\d\\\\/._!-]+$'}, - spaceFilter: { oneOf: [ - { type: 'array', items: { '$ref': '#/definitions/ID' } }, - { '$ref': '#/definitions/ID' } - ]} + spaceFilter: { type: 'string' } }, definitions: { ID: { @@ -40,6 +37,8 @@ class AbstractExport extends Top { if (!valid) { this.errored = true; return; } if (q.filepath) this.filepath = q.filepath; + + this.spaceFilter = q.spaceFilter || '.+'; } get className(){ return 'AbstractExport'; diff --git a/src/dbsolve-export/index.js b/src/dbsolve-export/index.js index e2e8c8e1..4d1a234f 100644 --- a/src/dbsolve-export/index.js +++ b/src/dbsolve-export/index.js @@ -28,11 +28,7 @@ class DBSolveExport extends AbstractExport{ } else { this.groupConstBy = 'tags[0]'; } - if (q.spaceFilter instanceof Array) { - this.spaceFilter = q.spaceFilter; - } else if (typeof q.spaceFilter === 'string') { - this.spaceFilter = [q.spaceFilter]; - } + this.version = q.version ? q.version + '' : '26'; // force string if (q.defaultTask) this.defaultTask = q.defaultTask; @@ -44,26 +40,6 @@ class DBSolveExport extends AbstractExport{ */ makeText(){ let logger = this._container.logger; - - if (this.spaceFilter !== undefined) { - // empty namespace is not allowed - if (this.spaceFilter.length === 0) { - let msg = 'spaceFilter for DBSolve format should include at least one namespace, got empty.'; - logger.error(msg); - return []; // BRAKE - } - - // check if namespaces exists - let lostNamespaces = this.spaceFilter.filter((x) => { - let ns = this._container.namespaceStorage.get(x); - return !ns || ns.isAbstract; - }); - if (lostNamespaces.length > 0) { - let msg = `Namespaces: ${lostNamespaces.join(', ')} either do not exist or are abstract. Simbio export stopped.`; - logger.error(msg); - return []; // BRAKE - } - } // display that function definition is not supported let functionsNames = [...this._container.functionDefStorage.keys()]; @@ -72,15 +48,12 @@ class DBSolveExport extends AbstractExport{ } // filter namespaces if set - let selectedNamespaces = this.spaceFilter !== undefined - ? [...this._container.namespaceStorage].filter((x) => this.spaceFilter.indexOf(x[0]) !== -1) - : [...this._container.namespaceStorage].filter((x) => !x[1].isAbstract); - - let results = selectedNamespaces.map((x) => { - let spaceName = x[0]; - let ns = x[1]; + let selectedNamespaces = [...this._container.namespaceStorage] + .filter(([spaceName, space]) => new RegExp(this.spaceFilter).test(spaceName)) + .filter(([spaceName, space]) => !space.isAbstract); - let image = this.getSLVImage(ns); + let results = selectedNamespaces.map(([spaceName, namespace]) => { + let image = this.getSLVImage(namespace); let content = this.getSLVCode(image); return { diff --git a/src/dot-export/index.js b/src/dot-export/index.js index 63fe22e3..c65474e1 100644 --- a/src/dot-export/index.js +++ b/src/dot-export/index.js @@ -16,12 +16,6 @@ class DotExport extends AbstractExport{ let logger = this._container.logger; let valid = DotExport.isValid(q, logger); if (!valid) { this.errored = true; return; } - - if (q.spaceFilter instanceof Array) { - this.spaceFilter = q.spaceFilter; - } else if (typeof q.spaceFilter === 'string') { - this.spaceFilter = [q.spaceFilter]; - } } get className(){ return 'DotExport'; @@ -32,35 +26,11 @@ class DotExport extends AbstractExport{ makeText(){ let logger = this._container.logger; - if (this.spaceFilter !== undefined) { - // empty namespace is not allowed - if (this.spaceFilter.length === 0) { // check non-empty space filter - let msg = 'spaceFilter for Dot format should include at least one namespace but is empty'; - logger.error(msg); - return []; // BRAKE - } - - // check if namespaces exists - let lostNamespaces = this.spaceFilter.filter((x) => { - let ns = this._container.namespaceStorage.get(x); - return !ns || ns.isAbstract; - }); - if (lostNamespaces.length > 0) { - let msg = `Namespaces: ${lostNamespaces.join(', ')} either do not exist or are abstract. Dot export stopped.`; - logger.error(msg); - return []; // BRAKE - } - } - // filter namespaces if set - let selectedNamespaces = this.spaceFilter !== undefined - ? [...this._container.namespaceStorage].filter((x) => this.spaceFilter.indexOf(x[0]) !== -1) - : [...this._container.namespaceStorage].filter((x) => !x[1].isAbstract); - - let results = selectedNamespaces.map((x) => { - let spaceName = x[0]; - let ns = x[1]; + let selectedNamespaces = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)); + let results = selectedNamespaces.map(([spaceName, ns]) => { let image = this.getDotImage(ns); let content = this.getDotCode(image); diff --git a/src/heta-code-export/index.js b/src/heta-code-export/index.js index 4021c95c..ab8affbd 100644 --- a/src/heta-code-export/index.js +++ b/src/heta-code-export/index.js @@ -16,7 +16,6 @@ class HetaCodeExport extends AbstractExport{ let logger = this._container.logger; let valid = HetaCodeExport.isValid(q, logger); if (!valid) { this.errored = true; return; } - if (q.spaceFilter) this.spaceFilter = q.spaceFilter; } get className(){ return 'HetaExport'; @@ -50,9 +49,8 @@ class HetaCodeExport extends AbstractExport{ getHetaCodeImage(container){ // let logger = this._container.logger; - let filteredNamespaceStorage = this.spaceFilter === undefined - ? [...container.namespaceStorage] - : [...container.namespaceStorage].filter((x) => this.spaceFilter.indexOf(x[0]) !== -1); + let filteredNamespaceStorage = [...container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)); return { functionDefStorage: [...container.functionDefStorage], diff --git a/src/json-export/index.js b/src/json-export/index.js index 838751d4..13463b36 100644 --- a/src/json-export/index.js +++ b/src/json-export/index.js @@ -21,7 +21,6 @@ class JSONExport extends AbstractExport { if (q.omit) this.omit = q.omit; if (q.noUnitsExpr) this.noUnitsExpr = q.noUnitsExpr; - if (q.spaceFilter) this.spaceFilter = q.spaceFilter; } get className(){ return 'JSONExport'; @@ -34,11 +33,9 @@ class JSONExport extends AbstractExport { } makeText(){ // filtered namespaces - let nsArray = [...this._container.namespaceStorage] - .map((pair) => pair[1]); - let nsArrayFiltered = typeof this.spaceFilter === 'undefined' - ? nsArray - : nsArray.filter((ns) => this.spaceFilter.indexOf(ns.spaceName) !== -1); + let nsArrayFiltered = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)) + .map(([spaceName, ns]) => ns); // create qArr from NS let qArr_ns = nsArrayFiltered.reduce((accumulator, ns) => { diff --git a/src/julia-export/index.js b/src/julia-export/index.js index 8a4285ae..38c14dc3 100644 --- a/src/julia-export/index.js +++ b/src/julia-export/index.js @@ -18,12 +18,6 @@ class JuliaExport extends AbstractExport { let logger = this._container.logger; let valid = JuliaExport.isValid(q, logger); if (!valid) { this.errored = true; return; } - - if (q.spaceFilter instanceof Array) { - this.spaceFilter = q.spaceFilter; - } else if (typeof q.spaceFilter === 'string') { - this.spaceFilter = [q.spaceFilter]; - } } get className(){ return 'JuliaExport'; @@ -40,12 +34,9 @@ class JuliaExport extends AbstractExport { //let logger = this._container.logger; // create image for multiple namespaces let nsImages = [...this._container.namespaceStorage] - .filter((pair) => { - let allowedByFilter = typeof this.spaceFilter === 'undefined' - || this.spaceFilter.indexOf(pair[0]) !== -1; - return allowedByFilter && !pair[1].isAbstract; - }) - .map((pair) => this.getJuliaImage(pair[1])); + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)) + .filter(([spaceName, ns]) => !ns.isAbstract) + .map(([spaceName, ns]) => this.getJuliaImage(ns)); // create Content let image = { diff --git a/src/matlab-export/index.js b/src/matlab-export/index.js index 50da22e2..e8c5d557 100644 --- a/src/matlab-export/index.js +++ b/src/matlab-export/index.js @@ -18,12 +18,6 @@ class MatlabExport extends AbstractExport { let logger = this._container.logger; let valid = MatlabExport.isValid(q, logger); if (!valid) { this.errored = true; return; } - - if (q.spaceFilter instanceof Array) { - this.spaceFilter = q.spaceFilter; - } else if (typeof q.spaceFilter === 'string') { - this.spaceFilter = [q.spaceFilter]; - } } get className(){ return 'MatlabExport'; @@ -40,37 +34,14 @@ class MatlabExport extends AbstractExport { makeText(skipVersionCode = false){ let logger = this._container.logger; - if (this.spaceFilter !== undefined) { - // empty namespace is not allowed - if (this.spaceFilter.length === 0) { - let msg = 'spaceFilter for Matlab format should include at least one namespace, got empty'; - logger.error(msg); - return []; // BRAKE - } - - // check if namespaces exists - let lostNamespaces = this.spaceFilter.filter((x) => { - let ns = this._container.namespaceStorage.get(x); - return !ns || ns.isAbstract; - }); - if (lostNamespaces.length > 0) { - let msg = `Namespaces: ${lostNamespaces.join(', ')} either do not exist or are abstract. Simbio export stopped.`; - logger.error(msg); - return []; // BRAKE - } - } - // filter namespaces if set - let selectedNamespaces = this.spaceFilter !== undefined - ? [...this._container.namespaceStorage].filter((x) => this.spaceFilter.indexOf(x[0]) !== -1) - : [...this._container.namespaceStorage].filter((x) => !x[1].isAbstract); + let selectedNamespaces = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)) + .filter(([spaceName, ns]) => !ns.isAbstract); let results = []; - selectedNamespaces.forEach((x) => { - let spaceName = x[0]; - let ns = x[1]; - + selectedNamespaces.forEach(([spaceName, ns]) => { let image = this.getMatlabImage(ns); let modelContent = this.getModelCode(image); diff --git a/src/mrgsolve-export/index.js b/src/mrgsolve-export/index.js index 2562b85e..2b9c074e 100644 --- a/src/mrgsolve-export/index.js +++ b/src/mrgsolve-export/index.js @@ -17,12 +17,6 @@ class MrgsolveExport extends AbstractExport { let logger = this._container.logger; let valid = MrgsolveExport.isValid(q, logger); if (!valid) { this.errored = true; return; } - - if (q.spaceFilter instanceof Array) { - this.spaceFilter = q.spaceFilter; - } else if (typeof q.spaceFilter === 'string') { - this.spaceFilter = [q.spaceFilter]; - } } get className(){ return 'MrgsolveExport'; @@ -36,30 +30,10 @@ class MrgsolveExport extends AbstractExport { makeText(){ let logger = this._container.logger; - if (this.spaceFilter !== undefined) { - // empty namespace is not allowed - if (this.spaceFilter.length === 0) { - let msg = 'spaceFilter for Mrgsolve format should include at least one namespace, got empty.'; - logger.error(msg); - return []; // BRAKE - } - - // check if namespaces exists - let lostNamespaces = this.spaceFilter.filter((x) => { - let ns = this._container.namespaceStorage.get(x); - return !ns || ns.isAbstract; - }); - if (lostNamespaces.length > 0) { - let msg = `Namespaces: ${lostNamespaces.join(', ')} either do not exist or are abstract. Simbio export stopped.`; - logger.error(msg); - return []; // BRAKE - } - } - // filter namespaces if set - let selectedNamespaces = this.spaceFilter !== undefined - ? [...this._container.namespaceStorage].filter((x) => this.spaceFilter.indexOf(x[0]) !== -1) - : [...this._container.namespaceStorage].filter((x) => !x[1].isAbstract); + let selectedNamespaces = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)) + .filter(([spaceName, ns]) => !ns.isAbstract); // display that function definition is not supported let functionsNames = [...this._container.functionDefStorage.keys()]; @@ -67,10 +41,7 @@ class MrgsolveExport extends AbstractExport { logger.warn(`"FunctionDef" object: ${functionsNames.join(', ')} are presented in platform but not supported by Mrgsolve export.`); } - let results = selectedNamespaces.map((x) => { - let spaceName = x[0]; - let ns = x[1]; - + let results = selectedNamespaces.map(([spaceName, ns]) => { let image = this.getMrgsolveImage(ns); var codeContent = this.getMrgsolveCode(image); diff --git a/src/sbml-export/index.js b/src/sbml-export/index.js index 0f8655ba..b62e59b9 100644 --- a/src/sbml-export/index.js +++ b/src/sbml-export/index.js @@ -25,12 +25,6 @@ class SBMLExport extends AbstractExport { } else { this.version = 'L2V4'; } - - if (q.spaceFilter instanceof Array) { - this.spaceFilter = q.spaceFilter; - } else if (typeof q.spaceFilter === 'string') { - this.spaceFilter = [q.spaceFilter]; - } } get className(){ return 'SBMLExport'; @@ -44,31 +38,11 @@ class SBMLExport extends AbstractExport { makeText(){ let logger = this._container.logger; - if (this.spaceFilter !== undefined) { - // empty namespace is not allowed - if (this.spaceFilter.length === 0) { - let msg = 'spaceFilter for SBML format should include at least one namespace, got empty'; - logger.error(msg); - return []; // BRAKE - } - - // check if namespaces exists - let lostNamespaces = this.spaceFilter.filter((x) => !this._container.namespaceStorage.has(x)); - if (lostNamespaces.length > 0) { - let msg = `Namespaces: ${lostNamespaces.join(', ')} do not exist. SBML export stopped.`; - logger.error(msg); - return []; // BRAKE - } - } - // filter namespaces if set - let selectedNamespaces = this.spaceFilter !== undefined - ? [...this._container.namespaceStorage].filter((x) => this.spaceFilter.indexOf(x[0]) !== -1) - : [...this._container.namespaceStorage]; + let selectedNamespaces = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)); - let results = selectedNamespaces.map((x) => { - let spaceName = x[0]; - let ns = x[1]; + let results = selectedNamespaces.map(([spaceName, ns]) => { let image = this.getSBMLImage(ns); var content = this.getSBMLCode(image); diff --git a/src/simbio-export/index.js b/src/simbio-export/index.js index dfb122b0..cab69de8 100644 --- a/src/simbio-export/index.js +++ b/src/simbio-export/index.js @@ -17,12 +17,6 @@ class SimbioExport extends AbstractExport{ let logger = this._container.logger; let valid = SimbioExport.isValid(q, logger); if (!valid) { this.errored = true; return; } - - if (q.spaceFilter instanceof Array) { - this.spaceFilter = q.spaceFilter; - } else if (typeof q.spaceFilter === 'string') { - this.spaceFilter = [q.spaceFilter]; - } } get className(){ return 'SimbioExport'; @@ -33,35 +27,12 @@ class SimbioExport extends AbstractExport{ makeText(){ let logger = this._container.logger; - if (this.spaceFilter !== undefined) { - // empty namespace is not allowed - if (this.spaceFilter.length === 0) { // check non-empty space filter - let msg = 'spaceFilter for Simbio format should include at least one namespace but is empty'; - logger.error(msg); - return []; // BRAKE - } - - // check if namespaces exists - let lostNamespaces = this.spaceFilter.filter((x) => { - let ns = this._container.namespaceStorage.get(x); - return !ns || ns.isAbstract; - }); - if (lostNamespaces.length > 0) { - let msg = `Namespaces: ${lostNamespaces.join(', ')} either do not exist or are abstract. Simbio export stopped.`; - logger.error(msg); - return []; // BRAKE - } - } - // filter namespaces if set - let selectedNamespaces = this.spaceFilter !== undefined - ? [...this._container.namespaceStorage].filter((x) => this.spaceFilter.indexOf(x[0]) !== -1) - : [...this._container.namespaceStorage].filter((x) => !x[1].isAbstract); - - let results = selectedNamespaces.map((x) => { - let spaceName = x[0]; - let ns = x[1]; - + let selectedNamespaces = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)) + .filter(([spaceName, ns]) => !ns.isAbstract); + + let results = selectedNamespaces.map(([spaceName, ns]) => { // checking unitTerm for Species ns.selectByInstanceOf('Species') .filter((species) => species.isAmount) diff --git a/src/slv-export/index.js b/src/slv-export/index.js index 2a68f6aa..f46ec812 100644 --- a/src/slv-export/index.js +++ b/src/slv-export/index.js @@ -30,11 +30,6 @@ class SLVExport extends AbstractExport{ } if (q.eventsOff) this.eventsOff = q.eventsOff; if (q.defaultTask) this.defaultTask = q.defaultTask; - if (q.spaceFilter instanceof Array) { - this.spaceFilter = q.spaceFilter; - } else if (typeof q.spaceFilter === 'string') { - this.spaceFilter = [q.spaceFilter]; - } this.version = q.version ? q.version + '' : '26'; // force string } get className(){ @@ -51,27 +46,6 @@ class SLVExport extends AbstractExport{ makeText(){ let logger = this._container.logger; - if (this.spaceFilter !== undefined) { - // empty namespace is not allowed - if (this.spaceFilter.length === 0) { - let msg = 'spaceFilter for SLV format should include at least one namespace, got empty.'; - logger.error(msg); - return []; // BRAKE - } - - // check if namespaces exists - let lostNamespaces = this.spaceFilter.filter((x) => { - let ns = this._container.namespaceStorage.get(x); - return !ns || ns.isAbstract; - }); - - if (lostNamespaces.length > 0) { - let msg = `Namespaces: ${lostNamespaces.join(', ')} either do not exist or are abstract. Simbio export stopped.`; - logger.error(msg); - return []; // BRAKE - } - } - // display that function definition is not supported let functionsNames = [...this._container.functionDefStorage.keys()]; if (functionsNames.length > 0) { @@ -79,14 +53,11 @@ class SLVExport extends AbstractExport{ } // filter namespaces if set - let selectedNamespaces = this.spaceFilter !== undefined - ? [...this._container.namespaceStorage].filter((x) => this.spaceFilter.indexOf(x[0]) !== -1) - : [...this._container.namespaceStorage].filter((x) => !x[1].isAbstract); - - let results = selectedNamespaces.map((x) => { - let spaceName = x[0]; - let ns = x[1]; + let selectedNamespaces = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)) + .filter(([spaceName, ns]) => !ns.isAbstract); + let results = selectedNamespaces.map(([spaceName, ns]) => { let image = this.getSLVImage(ns); let content = this.getSLVCode(image); diff --git a/src/table-export/index.js b/src/table-export/index.js index c5d7df41..31850b09 100644 --- a/src/table-export/index.js +++ b/src/table-export/index.js @@ -68,7 +68,6 @@ class TableExport extends AbstractExport { if (!valid) { this.errored = true; return; } if (q.omitRows!==undefined) this.omitRows = q.omitRows; - if (q.spaceFilter) this.spaceFilter = q.spaceFilter; this.bookType = q.bookType ? q.bookType : 'csv'; if (q.omit) this.omit = q.omit; @@ -81,11 +80,9 @@ class TableExport extends AbstractExport { } makeSheet(){ // filtered namespaces - let nsArray = [...this._container.namespaceStorage] - .map((pair) => pair[1]); - let nsArrayFiltered = typeof this.spaceFilter === 'undefined' - ? nsArray - : nsArray.filter((ns) => this.spaceFilter.indexOf(ns.spaceName) !== -1); + let nsArrayFiltered = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)) + .map(([spaceName, ns]) => ns); // create array of flat let fArr_ns = nsArrayFiltered.reduce((accumulator, ns) => { diff --git a/src/yaml-export/index.js b/src/yaml-export/index.js index 6459d43c..8424e4dc 100644 --- a/src/yaml-export/index.js +++ b/src/yaml-export/index.js @@ -22,7 +22,6 @@ class YAMLExport extends AbstractExport { if (q.omit) this.omit = q.omit; if (q.noUnitsExpr) this.noUnitsExpr = q.noUnitsExpr; - if (q.spaceFilter) this.spaceFilter = q.spaceFilter; } get className(){ return 'YAMLExport'; @@ -32,11 +31,9 @@ class YAMLExport extends AbstractExport { } makeText(){ // filtered namespaces - let nsArray = [...this._container.namespaceStorage] - .map((pair) => pair[1]); - let nsArrayFiltered = typeof this.spaceFilter === 'undefined' - ? nsArray - : nsArray.filter((ns) => this.spaceFilter.indexOf(ns.spaceName) !== -1); + let nsArrayFiltered = [...this._container.namespaceStorage] + .filter(([spaceName, ns]) => new RegExp(this.spaceFilter).test(spaceName)) + .map(([spaceName, ns]) => ns); // create qArr from NS let qArr_ns = nsArrayFiltered.reduce((accumulator, ns) => { diff --git a/test/cases/12.js b/test/cases/12.js index 794ba3c8..b53c20bb 100644 --- a/test/cases/12.js +++ b/test/cases/12.js @@ -36,7 +36,8 @@ describe('Testing "cases/12-to-sbml"', () => { it('Run @SBMLExport, check and compare.', () => { const SBMLExport = b.container.classes.SBML; - let sbml_export = new SBMLExport({spaceFilter: 'first'}); + let sbml_export = new SBMLExport({spaceFilter: 'first', filepath: 'yyy'}); + expect(sbml_export).not.to.has.property('errored', true); let code = sbml_export.makeText()[0].content; expect(code).xml.to.to.be.valid(); @@ -46,12 +47,12 @@ describe('Testing "cases/12-to-sbml"', () => { it('Run @JSONExport, check and compare.', () => { const JSONExport = b.container.classes.JSON; - let json_export = new JSONExport({spaceFilter: 'first'}); + let json_export = new JSONExport({spaceFilter: 'first', filepath: 'xxx'}); + expect(json_export).not.to.has.property('errored', true); let code = json_export.makeText()[0].content; let obj = JSON.parse(code); expect(obj).to.be.deep.equal(json_correct); - //console.log(obj); }); }); diff --git a/test/cases/6.js b/test/cases/6.js index 76dafed0..05f5e951 100644 --- a/test/cases/6.js +++ b/test/cases/6.js @@ -45,7 +45,8 @@ describe('Testing "cases/6-import"', () => { it('Run @JSONExport, check and compare.', () => { const JSONExport = b.container.classes.JSON; - let json_export = new JSONExport({spaceFilter: 'model'}); + let json_export = new JSONExport({spaceFilter: 'model', filepath: 'xxx'}); + expect(json_export).not.to.have.property('errored', true); let code = json_export.makeText()[0].content; let obj = JSON.parse(code); diff --git a/test/export/export-check.js b/test/export/export-check.js index 700b8cc3..716ffefb 100644 --- a/test/export/export-check.js +++ b/test/export/export-check.js @@ -11,7 +11,7 @@ describe('General argument checking', () => { filepath: './1.json', omit: ['num'], noUnitsExpr: true, - spaceFilter: ['one'], + spaceFilter: 'one', powTransform: 'function' }); expect(p.logger).to.have.property('hasErrors').false; @@ -20,7 +20,7 @@ describe('General argument checking', () => { expect(json_export).to.have.property('format', 'JSON'); expect(json_export).to.have.deep.property('omit', ['num']); expect(json_export).to.have.property('noUnitsExpr', true); - expect(json_export).to.have.deep.property('spaceFilter', ['one']); + expect(json_export).to.have.deep.property('spaceFilter', 'one'); p.logger.resetErrors(); }); @@ -101,7 +101,7 @@ describe('General argument checking', () => { let json_export = p.export({ format: 'JSON', filepath: './1.txt', - spaceFilter: [12] + spaceFilter: 12 }); expect(p.logger).to.have.property('hasErrors').true; expect(json_export).to.be.instanceOf(p.classes.JSON);