From 31ba6b52848da2b629b1c911b3f6c1902e8a20b0 Mon Sep 17 00:00:00 2001 From: "Xc@centOs" Date: Tue, 31 Jan 2023 20:58:36 +0800 Subject: [PATCH 1/4] 2.4.3-dev --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7d04d7c..f14cac2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "oak-domain", - "version": "2.4.2", + "version": "2.4.3", "author": { "name": "XuChang" }, From c290bb35efe36b826c83dc3073a0f2975a89d5f1 Mon Sep 17 00:00:00 2001 From: "Xc@centOs" Date: Wed, 1 Feb 2023 14:39:29 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=9C=A8=E4=BF=AE=E6=AD=A3selection?= =?UTF-8?q?=E6=97=B6,=E5=A6=82=E6=9E=9C=E4=BB=A5createAt=E4=BD=9C=E4=B8=BA?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=8E=92=E5=BA=8F=E5=88=97,=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=8A=A0=E4=B8=8A=E7=9B=B8=E5=BA=94=E7=9A=84=E6=8A=95?= =?UTF-8?q?=E5=BD=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/store/selection.js | 3 +++ src/store/selection.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/lib/store/selection.js b/lib/store/selection.js index 05db686..11faa26 100644 --- a/lib/store/selection.js +++ b/lib/store/selection.js @@ -230,6 +230,9 @@ function reinforceSelection(schema, entity, selection) { } ] }); + Object.assign(data, { + $$createAt$$: 1, + }); } } exports.reinforceSelection = reinforceSelection; diff --git a/src/store/selection.ts b/src/store/selection.ts index b1fefe0..ca62d1b 100644 --- a/src/store/selection.ts +++ b/src/store/selection.ts @@ -228,5 +228,8 @@ export function reinforceSelection(schema: StorageSchema< } ] }); + Object.assign(data, { + $$createAt$$: 1, + }); } } \ No newline at end of file From 9db80782f638c75821c9824eba1e9471e5bedae2 Mon Sep 17 00:00:00 2001 From: "Xc@centOs" Date: Wed, 1 Feb 2023 19:16:00 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=AF=B9cascadePath=E7=9A=84=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/store/checker.js | 46 +++++++++++++++++++------------------------- src/store/checker.ts | 40 ++++++++++++++++---------------------- 2 files changed, 37 insertions(+), 49 deletions(-) diff --git a/lib/store/checker.js b/lib/store/checker.js index e3a35d8..cab6831 100644 --- a/lib/store/checker.js +++ b/lib/store/checker.js @@ -287,8 +287,13 @@ function translateCascadeRelationFilterMaker(schema, lch, entity2) { var cascadePath = lch.cascadePath, relations = lch.relations; var paths = cascadePath.split('.'); var translateRelationFilter = function (entity) { - // 有两种情况,此entity和user有Relation定义,或是此entity上有userId - if (schema[entity].relation) { + // 有两种情况,此entity和user有Relation定义,或是此entity已经指向user + if (entity === 'user') { + return function (userId) { return ({ + id: userId, + }); }; + } + else if (schema[entity].relation) { var relationEntityName_1 = "user".concat((0, string_1.firstLetterUpperCase)(entity)); return function (userId) { var _a; @@ -313,11 +318,9 @@ function translateCascadeRelationFilterMaker(schema, lch, entity2) { }; }; } - var attributes = schema[entity].attributes; - (0, assert_1.default)(attributes.hasOwnProperty('userId') && attributes.userId.type === 'ref' && attributes.userId.ref === 'user', "\u5728".concat(entity, "\u4E0A\u65E2\u627E\u4E0D\u5230userId\uFF0C\u4E5F\u6CA1\u6709relation\u5B9A\u4E49")); - return function (userId) { return ({ - userId: userId, - }); }; + else { + (0, assert_1.default)(false, "".concat(entity2, "\u4E0A\u67D0auth\u5B9A\u4E49\u7684cascadePath").concat(cascadePath, "\u4E0D\u80FD\u5B9A\u4F4D\u5230User\u5BF9\u8C61\u6216\u8005\u548CUser\u5173\u8054\u7684\u5173\u7CFB\u5BF9\u8C61\uFF0C \u8BF7\u4ED4\u7EC6\u68C0\u67E5")); + } }; var translateFilterMakerIter = function (entity, iter) { var relation = (0, relation_1.judgeRelation)(schema, entity, paths[iter]); @@ -325,32 +328,23 @@ function translateCascadeRelationFilterMaker(schema, lch, entity2) { if (relation === 2) { var filterMaker_1 = translateRelationFilter(paths[iter]); return function (userId) { - var _a; var filter = filterMaker_1(userId); - if (filter.$in) { - return { - entity: paths[iter], - entityId: filter, - }; - } - return _a = {}, - _a[paths[iter]] = filter, - _a; + (0, assert_1.default)(filter.id); + return { + entity: paths[iter], + entityId: filter.id, + }; }; } (0, assert_1.default)(typeof relation === 'string'); var filterMaker_2 = translateRelationFilter(relation); return function (userId) { - var _a, _b; + var _a; var filter = filterMaker_2(userId); - if (filter.$in) { - return _a = {}, - _a["".concat(paths[iter], "Id")] = filter, - _a; - } - return _b = {}, - _b[paths[iter]] = filter, - _b; + (0, assert_1.default)(filter.id); + return _a = {}, + _a["".concat(paths[iter], "Id")] = filter.id, + _a; }; } else { diff --git a/src/store/checker.ts b/src/store/checker.ts index ae421d1..ac18283 100644 --- a/src/store/checker.ts +++ b/src/store/checker.ts @@ -255,8 +255,13 @@ function translateCascadeRelationFilterMaker(entity: T): (userId: string) => ED[T]['Selection']['filter'] => { - // 有两种情况,此entity和user有Relation定义,或是此entity上有userId - if (schema[entity].relation) { + // 有两种情况,此entity和user有Relation定义,或是此entity已经指向user + if (entity === 'user') { + return (userId) => ({ + id: userId, + }); + } + else if (schema[entity].relation) { const relationEntityName = `user${firstLetterUpperCase(entity as string)}`; return (userId) => { const filter = relations ? { @@ -280,12 +285,9 @@ function translateCascadeRelationFilterMaker ({ - userId, - }); + else { + assert(false, `${entity2 as string}上某auth定义的cascadePath${cascadePath}不能定位到User对象或者和User关联的关系对象, 请仔细检查`); + } }; const translateFilterMakerIter = (entity: T, iter: number): (userId: string) => ED[T]['Selection']['filter'] => { @@ -294,30 +296,22 @@ function translateCascadeRelationFilterMaker { - const filter = filterMaker(userId); - if (filter!.$in) { - return { - entity: paths[iter], - entityId: filter, - }; - } + const filter = filterMaker(userId)!; + assert(filter.id); return { - [paths[iter]]: filter, + entity: paths[iter], + entityId: filter.id, }; } } assert(typeof relation === 'string'); const filterMaker = translateRelationFilter(relation); return (userId) => { - const filter = filterMaker(userId); + const filter = filterMaker(userId)!; - if (filter!.$in) { - return { - [`${paths[iter]}Id`]: filter - }; - } + assert(filter.id); return { - [paths[iter]]: filter, + [`${paths[iter]}Id`]: filter.id, }; } } From 5d296f0135ddbe27d7ea59e346f46bc5c156ddab Mon Sep 17 00:00:00 2001 From: "Xc@centOs" Date: Wed, 1 Feb 2023 20:57:18 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E6=97=B6=E5=AF=B9auth=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E4=B8=ADrelation=E7=9A=84=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/store/checker.js | 6 ++++++ src/store/checker.ts | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/store/checker.js b/lib/store/checker.js index cab6831..15a6927 100644 --- a/lib/store/checker.js +++ b/lib/store/checker.js @@ -294,6 +294,12 @@ function translateCascadeRelationFilterMaker(schema, lch, entity2) { }); }; } else if (schema[entity].relation) { + if (relations) { + var diff = (0, lodash_1.difference)(relations, schema[entity].relation); + if (diff.length > 0) { + throw new Error("".concat(entity2, "\u4E0A\u67D0auth\u5B9A\u4E49\u7684relations\u4E2D\u542B\u6709\u4E0D\u53EF\u8BC6\u522B\u7684\u5173\u7CFB\u5B9A\u4E49").concat(diff.join(','), "\uFF0C \u8BF7\u4ED4\u7EC6\u68C0\u67E5")); + } + } var relationEntityName_1 = "user".concat((0, string_1.firstLetterUpperCase)(entity)); return function (userId) { var _a; diff --git a/src/store/checker.ts b/src/store/checker.ts index ac18283..f32cf41 100644 --- a/src/store/checker.ts +++ b/src/store/checker.ts @@ -10,7 +10,7 @@ import { AsyncContext } from "./AsyncRowStore"; import { getFullProjection } from './actionDef'; import { SyncContext } from './SyncRowStore'; import { firstLetterUpperCase } from '../utils/string'; -import { uniq } from '../utils/lodash'; +import { uniq, difference } from '../utils/lodash'; import { judgeRelation } from './relation'; export function translateCheckerInAsyncContext< @@ -262,6 +262,12 @@ function translateCascadeRelationFilterMaker 0) { + throw new Error(`${entity2 as string}上某auth定义的relations中含有不可识别的关系定义${diff.join(',')}, 请仔细检查`); + } + } const relationEntityName = `user${firstLetterUpperCase(entity as string)}`; return (userId) => { const filter = relations ? {