oak-domain 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/base-app-domain/Modi/Schema.d.ts +10 -23
- package/lib/base-app-domain/ModiEntity/Schema.d.ts +4 -16
- package/lib/base-app-domain/Oper/Schema.d.ts +6 -18
- package/lib/base-app-domain/OperEntity/Schema.d.ts +4 -17
- package/lib/base-app-domain/User/Schema.d.ts +14 -21
- package/lib/checkers/index.d.ts +2 -2
- package/lib/checkers/index.js +6 -1
- package/lib/compiler/schemalBuilder.js +145 -31
- package/lib/store/AsyncRowStore.d.ts +3 -1
- package/lib/store/AsyncRowStore.js +3 -0
- package/lib/store/CascadeStore.d.ts +4 -2
- package/lib/store/CascadeStore.js +141 -62
- package/lib/store/SyncRowStore.d.ts +3 -1
- package/lib/store/SyncRowStore.js +3 -0
- package/lib/store/TriggerExecutor.js +43 -5
- package/lib/store/checker.d.ts +2 -1
- package/lib/store/checker.js +193 -23
- package/lib/store/filter.d.ts +1 -0
- package/lib/store/filter.js +49 -26
- package/lib/store/modi.js +39 -5
- package/lib/store/relation.js +4 -2
- package/lib/store/selection.js +2 -2
- package/lib/types/Auth.d.ts +11 -2
- package/lib/types/Entity.d.ts +32 -1
- package/lib/types/Expression.js +19 -4
- package/lib/types/Storage.d.ts +4 -3
- package/lib/types/Timer.d.ts +1 -2
- package/lib/types/Trigger.d.ts +12 -0
- package/lib/utils/SimpleConnector.js +15 -0
- package/lib/utils/cron.d.ts +1 -0
- package/lib/utils/cron.js +18 -0
- package/lib/utils/lodash.d.ts +16 -1
- package/lib/utils/lodash.js +48 -31
- package/lib/utils/uuid.js +18 -6
- package/package.json +2 -2
|
@@ -337,6 +337,7 @@ function analyzeEntity(filename, path, program, relativePath) {
|
|
|
337
337
|
var localEnumStringTypes = [];
|
|
338
338
|
var additionalImports = [];
|
|
339
339
|
var localeDef = undefined;
|
|
340
|
+
var relationHierarchy = undefined;
|
|
340
341
|
ts.forEachChild(sourceFile, function (node) {
|
|
341
342
|
var _a, _b, _c, _d;
|
|
342
343
|
if (ts.isImportDeclaration(node)) {
|
|
@@ -519,7 +520,7 @@ function analyzeEntity(filename, path, program, relativePath) {
|
|
|
519
520
|
actionDefNodes.push(factory.createTypeReferenceNode('RelationAction', undefined));
|
|
520
521
|
}
|
|
521
522
|
pushStatementIntoActionAst(moduleName, factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("Action"), undefined, factory.createUnionTypeNode(actionDefNodes)), sourceFile);
|
|
522
|
-
dealWithActions(moduleName, filename, node.type, program, sourceFile, hasRelationDef || moduleName === 'User');
|
|
523
|
+
dealWithActions(moduleName, filename, node.type, program, sourceFile, !!hasRelationDef || moduleName === 'User');
|
|
523
524
|
}
|
|
524
525
|
else if (node.name.text === 'Relation') {
|
|
525
526
|
(0, assert_1.default)(!hasActionDef, "\u3010".concat(filename, "\u3011action\u5B9A\u4E49\u987B\u5728Relation\u4E4B\u540E"));
|
|
@@ -541,18 +542,22 @@ function analyzeEntity(filename, path, program, relativePath) {
|
|
|
541
542
|
var relationSchemaAttrs = [
|
|
542
543
|
factory.createPropertySignature(undefined, factory.createIdentifier("user"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("User"), undefined)),
|
|
543
544
|
factory.createPropertySignature(undefined, factory.createIdentifier(entityLc), undefined, factory.createTypeReferenceNode(factory.createIdentifier(moduleName), undefined)),
|
|
544
|
-
factory.createPropertySignature(undefined, factory.createIdentifier('relation'), undefined,
|
|
545
|
+
factory.createPropertySignature(undefined, factory.createIdentifier('relation'), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Relation"), undefined)),
|
|
545
546
|
];
|
|
546
547
|
(0, lodash_1.assign)(Schema, (_d = {},
|
|
547
548
|
_d[relationEntityName] = {
|
|
548
549
|
schemaAttrs: relationSchemaAttrs,
|
|
549
550
|
sourceFile: sourceFile,
|
|
551
|
+
enumStringAttrs: ['relation'],
|
|
550
552
|
actionType: 'excludeUpdate',
|
|
553
|
+
additionalImports: [
|
|
554
|
+
factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("Relation"))])), factory.createStringLiteral("../".concat(moduleName, "/Schema")), undefined)
|
|
555
|
+
],
|
|
551
556
|
},
|
|
552
557
|
_d));
|
|
553
558
|
addRelationship(relationEntityName, 'User', 'user', true);
|
|
554
559
|
addRelationship(relationEntityName, moduleName, entityLc, true);
|
|
555
|
-
hasRelationDef =
|
|
560
|
+
hasRelationDef = node;
|
|
556
561
|
}
|
|
557
562
|
else if (node.name.text.endsWith('Action') || node.name.text.endsWith('State')) {
|
|
558
563
|
(0, assert_1.default)(!localeDef, "\u3010".concat(filename, "\u3011locale\u5B9A\u4E49\u987B\u5728Action/State\u4E4B\u540E"));
|
|
@@ -790,6 +795,13 @@ function analyzeEntity(filename, path, program, relativePath) {
|
|
|
790
795
|
_static = true; // static如果有值只能为true
|
|
791
796
|
}
|
|
792
797
|
}
|
|
798
|
+
else if (ts.isTypeReferenceNode(declaration.type) && ts.isIdentifier(declaration.type.typeName) && declaration.type.typeName.text === 'RelationHierarchy') {
|
|
799
|
+
// RelationHierary
|
|
800
|
+
(0, assert_1.default)(hasRelationDef, "".concat(moduleName, "\u4E2D\u7684Relation\u5B9A\u4E49\u5728RelationHierarchy\u4E4B\u540E"));
|
|
801
|
+
var initializer = declaration.initializer;
|
|
802
|
+
(0, assert_1.default)(ts.isObjectLiteralExpression(initializer), "".concat(moduleName, "\u4E2D\u7684RelationHierarchy\u7684\u5B9A\u4E49\u5FC5\u987B\u662F\u521D\u59CB\u5316\u4E3AObjectLiteralExpress"));
|
|
803
|
+
relationHierarchy = initializer;
|
|
804
|
+
}
|
|
793
805
|
else {
|
|
794
806
|
throw new Error("".concat(moduleName, "\uFF1A\u4E0D\u80FD\u7406\u89E3\u7684\u5B9A\u4E49\u5185\u5BB9").concat(declaration.name.getText()));
|
|
795
807
|
}
|
|
@@ -831,6 +843,15 @@ function analyzeEntity(filename, path, program, relativePath) {
|
|
|
831
843
|
locale: localeDef,
|
|
832
844
|
});
|
|
833
845
|
}
|
|
846
|
+
if (hasRelationDef) {
|
|
847
|
+
(0, assert_1.default)(relationHierarchy, "".concat(filename, "\u4E2D\u7F3A\u5C11\u4E86relationHierarchy\u5B9A\u4E49"));
|
|
848
|
+
(0, lodash_1.assign)(schema, {
|
|
849
|
+
relationHierarchy: relationHierarchy,
|
|
850
|
+
});
|
|
851
|
+
}
|
|
852
|
+
else {
|
|
853
|
+
(0, assert_1.default)(!relationHierarchy, "".concat(filename, "\u4E2D\u5177\u6709relationHierarchy\u5B9A\u4E49\u4F46\u6CA1\u6709Relation\u5B9A\u4E49"));
|
|
854
|
+
}
|
|
834
855
|
(0, lodash_1.assign)(Schema, (_a = {},
|
|
835
856
|
_a[moduleName] = schema,
|
|
836
857
|
_a));
|
|
@@ -962,6 +983,8 @@ function constructSchema(statements, entity) {
|
|
|
962
983
|
foreignKeySet[entityName].forEach(function (foreignKey) {
|
|
963
984
|
var identifier = "".concat(entityNameLc, "$").concat(foreignKey);
|
|
964
985
|
members2.push(factory.createPropertySignature(undefined, identifier, factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(factory.createIdentifier("Array"), [factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'Schema'), undefined)])));
|
|
986
|
+
var aggrIdentifier = "".concat(entityNameLc, "$").concat(foreignKey, "$$aggr");
|
|
987
|
+
members2.push(factory.createPropertySignature(undefined, aggrIdentifier, factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(factory.createIdentifier("AggregationResult"), [factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'Schema'), undefined)])));
|
|
965
988
|
});
|
|
966
989
|
};
|
|
967
990
|
for (var entityName in foreignKeySet) {
|
|
@@ -1161,7 +1184,7 @@ function constructProjection(statements, entity) {
|
|
|
1161
1184
|
var _a, e_4, _b, e_5, _c;
|
|
1162
1185
|
var schemaAttrs = Schema[entity].schemaAttrs;
|
|
1163
1186
|
var properties = [
|
|
1164
|
-
['id',
|
|
1187
|
+
['id', false],
|
|
1165
1188
|
['$$createAt$$', false],
|
|
1166
1189
|
['$$updateAt$$', false],
|
|
1167
1190
|
['$$seq$$', false],
|
|
@@ -1202,7 +1225,10 @@ function constructProjection(statements, entity) {
|
|
|
1202
1225
|
});
|
|
1203
1226
|
if (manyToOneItem) {
|
|
1204
1227
|
// 外键投影
|
|
1205
|
-
properties.push(["".concat(attrName, "Id"), false, undefined], [name_4, false, factory.createTypeReferenceNode(createForeignRef(entity, text2_4, 'Projection')), factory.createTypeReferenceNode(
|
|
1228
|
+
properties.push(["".concat(attrName, "Id"), false, undefined], [name_4, false, factory.createTypeReferenceNode(createForeignRef(entity, text2_4, 'Projection')) /* , factory.createTypeReferenceNode(
|
|
1229
|
+
createForeignRef(entity, text2, 'ExportProjection')
|
|
1230
|
+
) */
|
|
1231
|
+
]);
|
|
1206
1232
|
if (foreignKeyProperties.hasOwnProperty(text2_4)) {
|
|
1207
1233
|
foreignKeyProperties[text2_4].push(attrName);
|
|
1208
1234
|
}
|
|
@@ -1252,7 +1278,10 @@ function constructProjection(statements, entity) {
|
|
|
1252
1278
|
ReversePointerRelations[entity].forEach(function (one) {
|
|
1253
1279
|
var _a;
|
|
1254
1280
|
var text2 = one === 'Schema' ? entity : one;
|
|
1255
|
-
properties.push([(0, string_1.firstLetterLowerCase)(one), false, factory.createTypeReferenceNode(createForeignRef(entity, one, 'Projection')), factory.createTypeReferenceNode(
|
|
1281
|
+
properties.push([(0, string_1.firstLetterLowerCase)(one), false, factory.createTypeReferenceNode(createForeignRef(entity, one, 'Projection')) /* , factory.createTypeReferenceNode(
|
|
1282
|
+
createForeignRef(entity, one, 'ExportProjection')
|
|
1283
|
+
) */
|
|
1284
|
+
]);
|
|
1256
1285
|
if (foreignKeyProperties.hasOwnProperty(one)) {
|
|
1257
1286
|
foreignKeyProperties[text2].push('entity');
|
|
1258
1287
|
}
|
|
@@ -1290,15 +1319,31 @@ function constructProjection(statements, entity) {
|
|
|
1290
1319
|
var entityNameLc = (0, string_1.firstLetterLowerCase)(entityName);
|
|
1291
1320
|
foreignKeySet[entityName].forEach(function (foreignKey) {
|
|
1292
1321
|
var identifier = "".concat(entityNameLc, "$").concat(foreignKey);
|
|
1322
|
+
var aggrIdentifier = "".concat(entityNameLc, "$").concat(foreignKey, "$$aggr");
|
|
1293
1323
|
properties.push([identifier, false,
|
|
1294
1324
|
factory.createIntersectionTypeNode([
|
|
1295
1325
|
factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'Selection'), undefined),
|
|
1296
1326
|
factory.createTypeLiteralNode([
|
|
1297
1327
|
factory.createPropertySignature(undefined, factory.createIdentifier("$entity"), undefined, factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(entityName))))
|
|
1298
1328
|
])
|
|
1299
|
-
]),
|
|
1329
|
+
]) /* ,
|
|
1330
|
+
factory.createIntersectionTypeNode([
|
|
1331
|
+
factory.createTypeReferenceNode(
|
|
1332
|
+
createForeignRef(entity, entityName, 'Exportation'),
|
|
1333
|
+
undefined
|
|
1334
|
+
),
|
|
1335
|
+
factory.createTypeLiteralNode([
|
|
1336
|
+
factory.createPropertySignature(
|
|
1337
|
+
undefined,
|
|
1338
|
+
factory.createIdentifier("$entity"),
|
|
1339
|
+
undefined,
|
|
1340
|
+
factory.createLiteralTypeNode(factory.createStringLiteral(firstLetterLowerCase(entityName)))
|
|
1341
|
+
)
|
|
1342
|
+
])
|
|
1343
|
+
]) */
|
|
1344
|
+
], [aggrIdentifier, false,
|
|
1300
1345
|
factory.createIntersectionTypeNode([
|
|
1301
|
-
factory.createTypeReferenceNode(createForeignRef(entity, entityName, '
|
|
1346
|
+
factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'Aggregation'), undefined),
|
|
1302
1347
|
factory.createTypeLiteralNode([
|
|
1303
1348
|
factory.createPropertySignature(undefined, factory.createIdentifier("$entity"), undefined, factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(entityName))))
|
|
1304
1349
|
])
|
|
@@ -1320,28 +1365,47 @@ function constructProjection(statements, entity) {
|
|
|
1320
1365
|
factory.createTypeReferenceNode(factory.createIdentifier('OpAttr'))
|
|
1321
1366
|
])
|
|
1322
1367
|
]);
|
|
1323
|
-
var
|
|
1368
|
+
var MetaPropertySignatures = [
|
|
1324
1369
|
factory.createPropertySignature(undefined, factory.createStringLiteral("#id"), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode('NodeId'))
|
|
1325
1370
|
];
|
|
1326
1371
|
if (process.env.COMPLING_AS_LIB) {
|
|
1327
|
-
|
|
1372
|
+
MetaPropertySignatures.push(factory.createIndexSignature(undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, undefined, factory.createIdentifier("k"), undefined, factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword), undefined)], factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)));
|
|
1328
1373
|
}
|
|
1329
1374
|
// Projection,正常查询的投影
|
|
1330
1375
|
statements.push(factory.createTypeAliasDeclaration(undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("Projection"), undefined, factory.createIntersectionTypeNode([
|
|
1331
|
-
factory.createTypeLiteralNode(
|
|
1376
|
+
factory.createTypeLiteralNode(MetaPropertySignatures.concat(properties.map(function (_a) {
|
|
1332
1377
|
var _b = tslib_1.__read(_a, 3), n = _b[0], q = _b[1], v = _b[2];
|
|
1333
1378
|
return factory.createPropertySignature(undefined, n, q ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken), v || factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword));
|
|
1334
1379
|
}))),
|
|
1335
1380
|
exprNode,
|
|
1336
1381
|
])));
|
|
1337
|
-
// ExportProjection,下载查询的投影
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1382
|
+
// ExportProjection,下载查询的投影
|
|
1383
|
+
// 已经废弃。By Xc 2023.01.08
|
|
1384
|
+
/* statements.push(
|
|
1385
|
+
factory.createTypeAliasDeclaration(
|
|
1386
|
+
undefined,
|
|
1387
|
+
[factory.createModifier(ts.SyntaxKind.ExportKeyword)],
|
|
1388
|
+
factory.createIdentifier("ExportProjection"),
|
|
1389
|
+
undefined,
|
|
1390
|
+
factory.createIntersectionTypeNode([
|
|
1391
|
+
factory.createTypeLiteralNode(
|
|
1392
|
+
MetaPropertySignaturs.concat(
|
|
1393
|
+
properties.map(
|
|
1394
|
+
([n, q, v, v2]) => {
|
|
1395
|
+
return factory.createPropertySignature(
|
|
1396
|
+
undefined,
|
|
1397
|
+
n,
|
|
1398
|
+
factory.createToken(ts.SyntaxKind.QuestionToken),
|
|
1399
|
+
v2 || factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
|
|
1400
|
+
)
|
|
1401
|
+
}
|
|
1402
|
+
)
|
|
1403
|
+
)
|
|
1404
|
+
),
|
|
1405
|
+
exprNode,
|
|
1406
|
+
])
|
|
1407
|
+
)
|
|
1408
|
+
); */
|
|
1345
1409
|
// ${Entity}Projection,外键查询的专用投影
|
|
1346
1410
|
for (var foreignKey in foreignKeyProperties) {
|
|
1347
1411
|
var identifier = "".concat(foreignKey, "IdProjection");
|
|
@@ -1717,14 +1781,43 @@ function constructActions(statements, entity) {
|
|
|
1717
1781
|
factory.createTypeReferenceNode(factory.createIdentifier("P"), undefined)
|
|
1718
1782
|
]),
|
|
1719
1783
|
factory.createLiteralTypeNode(factory.createStringLiteral("action"))
|
|
1784
|
+
])), factory.createTypeAliasDeclaration(undefined, [factory.createToken(ts.SyntaxKind.ExportKeyword)], factory.createIdentifier("Aggregation"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
|
|
1785
|
+
factory.createTypeReferenceNode(factory.createIdentifier("DeduceAggregation"), [
|
|
1786
|
+
factory.createTypeReferenceNode(factory.createIdentifier("Schema"), undefined),
|
|
1787
|
+
factory.createTypeReferenceNode(factory.createIdentifier("Projection"), undefined),
|
|
1788
|
+
factory.createTypeReferenceNode(factory.createIdentifier("Filter"), undefined),
|
|
1789
|
+
factory.createTypeReferenceNode(factory.createIdentifier("Sorter"), undefined)
|
|
1790
|
+
]),
|
|
1791
|
+
factory.createLiteralTypeNode(factory.createStringLiteral("id"))
|
|
1720
1792
|
])));
|
|
1721
1793
|
// Exportation
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1794
|
+
// 已经废弃,by Xc 2023.01.08
|
|
1795
|
+
/* statements.push(
|
|
1796
|
+
factory.createTypeAliasDeclaration(
|
|
1797
|
+
undefined,
|
|
1798
|
+
[factory.createModifier(ts.SyntaxKind.ExportKeyword)],
|
|
1799
|
+
factory.createIdentifier("Exportation"),
|
|
1800
|
+
undefined,
|
|
1801
|
+
factory.createTypeReferenceNode(
|
|
1802
|
+
factory.createIdentifier("OakOperation"),
|
|
1803
|
+
[
|
|
1804
|
+
factory.createLiteralTypeNode(factory.createStringLiteral("export")),
|
|
1805
|
+
factory.createTypeReferenceNode(
|
|
1806
|
+
factory.createIdentifier("ExportProjection"),
|
|
1807
|
+
undefined
|
|
1808
|
+
),
|
|
1809
|
+
factory.createTypeReferenceNode(
|
|
1810
|
+
factory.createIdentifier("Filter"),
|
|
1811
|
+
undefined
|
|
1812
|
+
),
|
|
1813
|
+
factory.createTypeReferenceNode(
|
|
1814
|
+
factory.createIdentifier("Sorter"),
|
|
1815
|
+
undefined
|
|
1816
|
+
)
|
|
1817
|
+
]
|
|
1818
|
+
)
|
|
1819
|
+
)
|
|
1820
|
+
); */
|
|
1728
1821
|
var _k = ManyToOne, _l = entity, manyToOneSet = _k[_l];
|
|
1729
1822
|
var _m = OneToMany, _o = entity, oneToManySet = _m[_o];
|
|
1730
1823
|
var foreignKeySet = {};
|
|
@@ -2539,9 +2632,11 @@ var initialStatements = function () { return [
|
|
|
2539
2632
|
factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([
|
|
2540
2633
|
factory.createImportSpecifier(false, undefined, factory.createIdentifier("FormCreateData")),
|
|
2541
2634
|
factory.createImportSpecifier(false, undefined, factory.createIdentifier("FormUpdateData")),
|
|
2635
|
+
factory.createImportSpecifier(false, undefined, factory.createIdentifier("DeduceAggregation")),
|
|
2542
2636
|
factory.createImportSpecifier(false, factory.createIdentifier("Operation"), factory.createIdentifier("OakOperation")),
|
|
2543
2637
|
factory.createImportSpecifier(false, factory.createIdentifier("MakeAction"), factory.createIdentifier("OakMakeAction")),
|
|
2544
2638
|
factory.createImportSpecifier(false, undefined, factory.createIdentifier("EntityShape")),
|
|
2639
|
+
factory.createImportSpecifier(false, undefined, factory.createIdentifier("AggregationResult")),
|
|
2545
2640
|
])), factory.createStringLiteral("".concat((0, env_1.TYPE_PATH_IN_OAK_DOMAIN)(), "Entity")), undefined)
|
|
2546
2641
|
]; };
|
|
2547
2642
|
function outputSubQuery(outputDir, printer) {
|
|
@@ -2649,6 +2744,11 @@ function outputSchema(outputDir, printer) {
|
|
|
2649
2744
|
if ((additionalImports === null || additionalImports === void 0 ? void 0 : additionalImports.length) > 0) {
|
|
2650
2745
|
statements.push.apply(statements, tslib_1.__spreadArray([], tslib_1.__read(additionalImports), false));
|
|
2651
2746
|
}
|
|
2747
|
+
// Relation定义加入
|
|
2748
|
+
if (typeof Schema[entity].hasRelationDef === 'object' && ts.isTypeAliasDeclaration(Schema[entity].hasRelationDef)) {
|
|
2749
|
+
var node = Schema[entity].hasRelationDef;
|
|
2750
|
+
statements.push(factory.updateTypeAliasDeclaration(node, undefined, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], node.name, node.typeParameters, node.type));
|
|
2751
|
+
}
|
|
2652
2752
|
constructSchema(statements, entity);
|
|
2653
2753
|
constructFilter(statements, entity);
|
|
2654
2754
|
constructProjection(statements, entity);
|
|
@@ -2676,6 +2776,7 @@ function outputSchema(outputDir, printer) {
|
|
|
2676
2776
|
factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
|
|
2677
2777
|
]) : actionTypeNode),
|
|
2678
2778
|
factory.createPropertySignature(undefined, factory.createIdentifier("Selection"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Selection"), undefined)),
|
|
2779
|
+
factory.createPropertySignature(undefined, factory.createIdentifier("Aggregation"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Aggregation"), undefined)),
|
|
2679
2780
|
factory.createPropertySignature(undefined, factory.createIdentifier("Operation"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("Operation"), undefined)),
|
|
2680
2781
|
factory.createPropertySignature(undefined, factory.createIdentifier("Create"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("CreateOperation"), undefined)),
|
|
2681
2782
|
factory.createPropertySignature(undefined, factory.createIdentifier("Update"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("UpdateOperation"), undefined)),
|
|
@@ -2807,7 +2908,7 @@ function constructAttributes(entity) {
|
|
|
2807
2908
|
attrAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("type"), factory.createStringLiteral("ref")), factory.createPropertyAssignment(factory.createIdentifier("ref"), factory.createStringLiteral((0, string_1.firstLetterLowerCase)(text2_6))));
|
|
2808
2909
|
}
|
|
2809
2910
|
else {
|
|
2810
|
-
if (enumStringAttrs.includes(name.text)) {
|
|
2911
|
+
if (enumStringAttrs && enumStringAttrs.includes(name.text)) {
|
|
2811
2912
|
attrAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("type"), factory.createStringLiteral("varchar")), factory.createPropertyAssignment(factory.createIdentifier("params"), factory.createObjectLiteralExpression([factory.createPropertyAssignment(factory.createIdentifier("length"), factory.createNumericLiteral(env_1.STRING_LITERAL_MAX_LENGTH))], true)));
|
|
2812
2913
|
}
|
|
2813
2914
|
else {
|
|
@@ -2944,10 +3045,16 @@ function outputStorage(outputDir, printer) {
|
|
|
2944
3045
|
var entityAssignments = [];
|
|
2945
3046
|
for (var entity in Schema) {
|
|
2946
3047
|
var indexExpressions = [];
|
|
2947
|
-
var _a = Schema[entity], sourceFile = _a.sourceFile, inModi = _a.inModi, indexes = _a.indexes, toModi = _a.toModi, actionType = _a.actionType, _static = _a.static;
|
|
3048
|
+
var _a = Schema[entity], sourceFile = _a.sourceFile, inModi = _a.inModi, indexes = _a.indexes, toModi = _a.toModi, actionType = _a.actionType, _static = _a.static, relationHierarchy = _a.relationHierarchy;
|
|
3049
|
+
var fromSchemaSpecifiers = [
|
|
3050
|
+
factory.createImportSpecifier(false, undefined, factory.createIdentifier("OpSchema"))
|
|
3051
|
+
];
|
|
3052
|
+
if (relationHierarchy) {
|
|
3053
|
+
fromSchemaSpecifiers.push(factory.createImportSpecifier(false, undefined, factory.createIdentifier("Relation")));
|
|
3054
|
+
}
|
|
2948
3055
|
var statements = [
|
|
2949
3056
|
factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier("StorageDesc"))])), factory.createStringLiteral("".concat((0, env_1.TYPE_PATH_IN_OAK_DOMAIN)(), "Storage")), undefined),
|
|
2950
|
-
factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports(
|
|
3057
|
+
factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports(fromSchemaSpecifiers)), factory.createStringLiteral("./Schema"), undefined)
|
|
2951
3058
|
];
|
|
2952
3059
|
var needImportActions = [];
|
|
2953
3060
|
switch (actionType) {
|
|
@@ -3003,9 +3110,16 @@ function outputStorage(outputDir, printer) {
|
|
|
3003
3110
|
if (indexExpressions.length > 0) {
|
|
3004
3111
|
propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("indexes"), factory.createArrayLiteralExpression(indexExpressions, true)));
|
|
3005
3112
|
}
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3113
|
+
if (relationHierarchy) {
|
|
3114
|
+
propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("relationHierarchy"), relationHierarchy));
|
|
3115
|
+
}
|
|
3116
|
+
var sdTypeArguments = [
|
|
3117
|
+
factory.createTypeReferenceNode(factory.createIdentifier("OpSchema"), undefined)
|
|
3118
|
+
];
|
|
3119
|
+
if (relationHierarchy) {
|
|
3120
|
+
sdTypeArguments.push(factory.createTypeReferenceNode(factory.createIdentifier("Relation"), undefined));
|
|
3121
|
+
}
|
|
3122
|
+
statements.push(factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier("desc"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("StorageDesc"), sdTypeArguments), factory.createObjectLiteralExpression(propertyAssignments, true))], ts.NodeFlags.Const)));
|
|
3009
3123
|
var result_2 = printer.printList(ts.ListFormat.SourceFileStatements, factory.createNodeArray(statements), sourceFile);
|
|
3010
3124
|
var filename_1 = path_1.default.join(outputDir, entity, 'Storage.ts');
|
|
3011
3125
|
(0, fs_1.writeFileSync)(filename_1, result_2, { flag: 'w' });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { EntityDict, RowStore, OperateOption, OperationResult, SelectOption, Context, TxnOption, OpRecord } from "../types";
|
|
2
|
+
import { EntityDict, RowStore, OperateOption, OperationResult, SelectOption, Context, TxnOption, OpRecord, AggregationResult } from "../types";
|
|
3
3
|
import { IncomingHttpHeaders } from "http";
|
|
4
4
|
export declare abstract class AsyncContext<ED extends EntityDict> implements Context {
|
|
5
5
|
private rowStore;
|
|
@@ -27,6 +27,7 @@ export declare abstract class AsyncContext<ED extends EntityDict> implements Con
|
|
|
27
27
|
rollback(): Promise<void>;
|
|
28
28
|
operate<T extends keyof ED, OP extends OperateOption>(entity: T, operation: ED[T]['Operation'], option: OP): Promise<OperationResult<ED>>;
|
|
29
29
|
select<T extends keyof ED, OP extends SelectOption>(entity: T, selection: ED[T]['Selection'], option: OP): Promise<Partial<ED[T]["Schema"]>[]>;
|
|
30
|
+
aggregate<T extends keyof ED, OP extends SelectOption>(entity: T, aggregation: ED[T]['Aggregation'], option: OP): Promise<AggregationResult<ED[T]["Schema"]>>;
|
|
30
31
|
count<T extends keyof ED, OP extends SelectOption>(entity: T, selection: Pick<ED[T]['Selection'], 'filter' | 'count'>, option: OP): Promise<number>;
|
|
31
32
|
mergeMultipleResults(toBeMerged: OperationResult<ED>[]): OperationResult<ED>;
|
|
32
33
|
getCurrentTxnId(): string | undefined;
|
|
@@ -39,6 +40,7 @@ export declare abstract class AsyncContext<ED extends EntityDict> implements Con
|
|
|
39
40
|
export interface AsyncRowStore<ED extends EntityDict, Cxt extends Context> extends RowStore<ED> {
|
|
40
41
|
operate<T extends keyof ED, OP extends OperateOption>(entity: T, operation: ED[T]['Operation'], context: Cxt, option: OP): Promise<OperationResult<ED>>;
|
|
41
42
|
select<T extends keyof ED, OP extends SelectOption>(entity: T, selection: ED[T]['Selection'], context: Cxt, option: OP): Promise<Partial<ED[T]['Schema']>[]>;
|
|
43
|
+
aggregate<T extends keyof ED, OP extends SelectOption>(entity: T, aggregation: ED[T]['Aggregation'], context: Cxt, option: OP): Promise<AggregationResult<ED[T]['Schema']>>;
|
|
42
44
|
count<T extends keyof ED, OP extends SelectOption>(entity: T, selection: Pick<ED[T]['Selection'], 'filter' | 'count'>, context: Cxt, option: OP): Promise<number>;
|
|
43
45
|
begin(option?: TxnOption): Promise<string>;
|
|
44
46
|
commit(txnId: string): Promise<void>;
|
|
@@ -161,6 +161,9 @@ var AsyncContext = /** @class */ (function () {
|
|
|
161
161
|
AsyncContext.prototype.select = function (entity, selection, option) {
|
|
162
162
|
return this.rowStore.select(entity, selection, this, option);
|
|
163
163
|
};
|
|
164
|
+
AsyncContext.prototype.aggregate = function (entity, aggregation, option) {
|
|
165
|
+
return this.rowStore.aggregate(entity, aggregation, this, option);
|
|
166
|
+
};
|
|
164
167
|
AsyncContext.prototype.count = function (entity, selection, option) {
|
|
165
168
|
return this.rowStore.count(entity, selection, this, option);
|
|
166
169
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityDict, OperateOption, SelectOption, OperationResult, DeduceFilter } from "../types/Entity";
|
|
1
|
+
import { EntityDict, OperateOption, SelectOption, OperationResult, DeduceFilter, AggregationResult } from "../types/Entity";
|
|
2
2
|
import { EntityDict as BaseEntityDict } from '../base-app-domain';
|
|
3
3
|
import { RowStore } from '../types/RowStore';
|
|
4
4
|
import { StorageSchema } from '../types/Storage';
|
|
@@ -13,7 +13,9 @@ export declare abstract class CascadeStore<ED extends EntityDict & BaseEntityDic
|
|
|
13
13
|
protected abstract updateAbjointRow<T extends keyof ED, OP extends OperateOption, Cxt extends SyncContext<ED>>(entity: T, operation: ED[T]['Operation'], context: Cxt, option: OP): number;
|
|
14
14
|
protected abstract selectAbjointRowAsync<T extends keyof ED, OP extends SelectOption, Cxt extends AsyncContext<ED>>(entity: T, selection: ED[T]['Selection'], context: Cxt, option: OP): Promise<Partial<ED[T]['Schema']>[]>;
|
|
15
15
|
protected abstract updateAbjointRowAsync<T extends keyof ED, OP extends OperateOption, Cxt extends AsyncContext<ED>>(entity: T, operation: ED[T]['Create'] | ED[T]['Update'] | ED[T]['Remove'], context: Cxt, option: OP): Promise<number>;
|
|
16
|
-
protected
|
|
16
|
+
protected abstract aggregateSync<T extends keyof ED, OP extends SelectOption, Cxt extends SyncContext<ED>>(entity: T, aggregation: ED[T]['Aggregation'], context: Cxt, option: OP): AggregationResult<ED[T]['Schema']>;
|
|
17
|
+
protected abstract aggregateAsync<T extends keyof ED, OP extends SelectOption, Cxt extends AsyncContext<ED>>(entity: T, aggregation: ED[T]['Aggregation'], context: Cxt, option: OP): Promise<AggregationResult<ED[T]['Schema']>>;
|
|
18
|
+
protected destructCascadeSelect<T extends keyof ED, OP extends SelectOption, Cxt extends SyncContext<ED> | AsyncContext<ED>>(entity: T, projection2: ED[T]['Selection']['data'], context: Cxt, cascadeSelectFn: <T2 extends keyof ED>(entity2: T2, selection: ED[T2]['Selection'], context: Cxt, op: OP) => Partial<ED[T2]['Schema']>[] | Promise<Partial<ED[T2]['Schema']>[]>, aggregateFn: <T2 extends keyof ED>(entity2: T2, aggregation: ED[T2]['Aggregation'], context: Cxt, op: OP) => AggregationResult<ED[T2]['Schema']> | Promise<AggregationResult<ED[T2]['Schema']>>, option: OP): {
|
|
17
19
|
projection: ED[T]["Selection"]["data"];
|
|
18
20
|
cascadeSelectionFns: ((result: Partial<ED[T]['Schema']>[]) => Promise<void> | void)[];
|
|
19
21
|
};
|