From a07ddd95a96b41890baf07d999291438a42b59fe Mon Sep 17 00:00:00 2001 From: Xc Date: Wed, 13 Mar 2024 20:52:09 +0800 Subject: [PATCH] =?UTF-8?q?object=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- es/store.js | 36 ++++++++++++++++++++++++------------ lib/store.js | 36 ++++++++++++++++++++++++------------ package.json | 2 +- src/store.ts | 36 ++++++++++++++++++++++++------------ test/test.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 113 insertions(+), 37 deletions(-) diff --git a/es/store.js b/es/store.js index 3869a98..7c4fece 100644 --- a/es/store.js +++ b/es/store.js @@ -405,74 +405,86 @@ export default class TreeStore extends CascadeStore { switch (predicate) { case '$gt': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data > value || obscurePass(data, option); }; } case '$lt': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data < value || obscurePass(data, option); }; } case '$gte': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data >= value || obscurePass(data, option); }; } case '$lte': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data <= value || obscurePass(data, option); }; } case '$eq': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data === value || obscurePass(data, option); }; } case '$ne': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data !== value || obscurePass(data, option); }; } case '$between': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data >= value[0] && data <= value[1] || obscurePass(data, option); }; } case '$mod': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return typeof data === 'number' && data % value[0] === value[1] || obscurePass(data, option); }; } case '$startsWith': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['string'].includes(typeof data) && data.startsWith(value) || obscurePass(data, option); }; } case '$endsWith': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['string'].includes(typeof data) && data.endsWith(value) || obscurePass(data, option); }; } case '$includes': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['string'].includes(typeof data) && data.includes(value) || obscurePass(data, option); }; } case '$exists': { assert(typeof value === 'boolean'); return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; if (value) { return ![null, undefined].includes(data) || obscurePass(data, option); } diff --git a/lib/store.js b/lib/store.js index ba84717..2233131 100644 --- a/lib/store.js +++ b/lib/store.js @@ -407,74 +407,86 @@ class TreeStore extends CascadeStore_1.CascadeStore { switch (predicate) { case '$gt': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['number', 'string'].includes(typeof data) && data > value || obscurePass(data, option); }; } case '$lt': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['number', 'string'].includes(typeof data) && data < value || obscurePass(data, option); }; } case '$gte': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['number', 'string'].includes(typeof data) && data >= value || obscurePass(data, option); }; } case '$lte': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['number', 'string'].includes(typeof data) && data <= value || obscurePass(data, option); }; } case '$eq': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['number', 'string'].includes(typeof data) && data === value || obscurePass(data, option); }; } case '$ne': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['number', 'string'].includes(typeof data) && data !== value || obscurePass(data, option); }; } case '$between': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['number', 'string'].includes(typeof data) && data >= value[0] && data <= value[1] || obscurePass(data, option); }; } case '$mod': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return typeof data === 'number' && data % value[0] === value[1] || obscurePass(data, option); }; } case '$startsWith': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['string'].includes(typeof data) && data.startsWith(value) || obscurePass(data, option); }; } case '$endsWith': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['string'].includes(typeof data) && data.endsWith(value) || obscurePass(data, option); }; } case '$includes': { return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; return ['string'].includes(typeof data) && data.includes(value) || obscurePass(data, option); }; } case '$exists': { (0, assert_1.assert)(typeof value === 'boolean'); return (row) => { - const data = (0, lodash_1.get)(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? (0, lodash_1.get)(row, path) : row; if (value) { return ![null, undefined].includes(data) || obscurePass(data, option); } diff --git a/package.json b/package.json index 53a2278..41c3801 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "es/**/*" ], "dependencies": { - "oak-domain": "file:../oak-domain", + "oak-domain": "^4.2.7", "uuid": "^8.3.2" }, "scripts": { diff --git a/src/store.ts b/src/store.ts index 8422c46..806e626 100644 --- a/src/store.ts +++ b/src/store.ts @@ -543,73 +543,85 @@ export default class TreeStore extends C switch (predicate) { case '$gt': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data > value || obscurePass(data, option); }; } case '$lt': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data < value || obscurePass(data, option); }; } case '$gte': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data >= value || obscurePass(data, option); }; } case '$lte': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data <= value || obscurePass(data, option); }; } case '$eq': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data === value || obscurePass(data, option); }; } case '$ne': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data !== value || obscurePass(data, option); }; } case '$between': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['number', 'string'].includes(typeof data) && data >= value[0] && data <= value[1] || obscurePass(data, option); }; } case '$mod': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return typeof data === 'number' && data % value[0] === value[1] || obscurePass(data, option); }; } case '$startsWith': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['string'].includes(typeof data) && data.startsWith(value) || obscurePass(data, option); }; } case '$endsWith': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['string'].includes(typeof data) && data.endsWith(value) || obscurePass(data, option); }; } case '$includes': { return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; return ['string'].includes(typeof data) && data.includes(value) || obscurePass(data, option); }; } case '$exists': { assert(typeof value === 'boolean'); return (row) => { - const data = get(row, path); + // JsonFilter有可能是根结点,path为空 + const data = path ? get(row, path) : row; if (value) { return ![null, undefined].includes(data) || obscurePass(data, option); } diff --git a/test/test.ts b/test/test.ts index 590d2c8..647ed81 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1264,6 +1264,44 @@ describe('基础测试', function () { } }, context, {}); + /** + * object 的 $exists查询 + */ + const row10 = store.select('oper', { + data: { + id: 1, + data: { + name: 1, + price: 1, + }, + }, + filter: { + id, + action: 'test', + targetEntity: 'bbb', + data: { + $exists: true, + } + } + }, context, {}); + const row11 = store.select('oper', { + data: { + id: 1, + data: { + name: 1, + price: 1, + }, + }, + filter: { + id, + action: 'test', + targetEntity: 'bbb', + data: { + $exists: false, + } + } + }, context, {}); + context.commit(); assert(row.length === 1); assert(row2.length === 0); @@ -1274,6 +1312,8 @@ describe('基础测试', function () { assert(row7.length === 1); assert(row8.length === 1); assert(row9.length === 1); + assert(row10.length === 1); + assert(row11.length === 0); // console.log(JSON.stringify(row7)); });