编译器增强了对entity和entityId的检查

This commit is contained in:
Xu Chang 2022-12-15 12:44:46 +08:00
parent 15f6ca6623
commit c295b4a339
2 changed files with 51 additions and 64 deletions

View File

@ -367,7 +367,7 @@ function analyzeEntity(filename, path, program, relativePath) {
var hasEntityAttr_1 = false;
var hasEntityIdAttr_1 = false;
var members = node.members, heritageClauses = node.heritageClauses;
(0, assert_1.default)(['EntityShape', 'FileCarrierEntityShape'].includes(heritageClauses[0].types[0].expression.text));
(0, assert_1.default)(['EntityShape'].includes(heritageClauses[0].types[0].expression.text), moduleName);
members.forEach(function (attrNode) {
var _a, _b;
var _c = attrNode, type = _c.type, name = _c.name, questionToken = _c.questionToken;
@ -439,39 +439,33 @@ function analyzeEntity(filename, path, program, relativePath) {
}
}
}
if (attrName === 'entity'
&& ts.isTypeReferenceNode(type)
&& ts.isIdentifier(type.typeName)) {
if (attrName === 'entity') {
(0, assert_1.default)(ts.isTypeReferenceNode(type) && ts.isIdentifier(type.typeName), "\u300C".concat(moduleName, "\u300D\u4E2Dentity\u5C5E\u6027\u7684\u5B9A\u4E49\u4E0D\u662FString<32>\u7C7B\u578B\uFF0Centity\u662F\u7CFB\u7EDF\u7528\u4E8E\u8868\u793A\u53CD\u6307\u6307\u9488\u7684\u4FDD\u7559\u5C5E\u6027\uFF0C\u8BF7\u52FF\u4ED6\u7528"));
var typeArguments = type.typeArguments;
if (type.typeName.text === 'String'
(0, assert_1.default)(type.typeName.text === 'String'
&& typeArguments
&& typeArguments.length === 1) {
var _d = tslib_1.__read(typeArguments, 1), node_1 = _d[0];
if (ts.isLiteralTypeNode(node_1) && ts.isNumericLiteral(node_1.literal)) {
if (parseInt(node_1.literal.text) > 32) {
console.warn("\u300C\u300D\u4E2Dentity\u5C5E\u6027\u5B9A\u4E49\u7684\u957F\u5EA6\u5927\u4E8E32\uFF0C\u8BF7\u786E\u8BA4\u5B83\u4E0D\u662F\u4E00\u4E2A\u53CD\u6307\u5BF9\u8C61");
}
else {
hasEntityAttr_1 = true;
}
&& typeArguments.length === 1, "\u300C".concat(moduleName, "\u300D\u4E2Dentity\u5C5E\u6027\u7684\u5B9A\u4E49\u4E0D\u662FString<32>\u7C7B\u578B\uFF0Centity\u662F\u7CFB\u7EDF\u7528\u4E8E\u8868\u793A\u53CD\u6307\u6307\u9488\u7684\u4FDD\u7559\u5C5E\u6027\uFF0C\u8BF7\u52FF\u4ED6\u7528"));
var _d = tslib_1.__read(typeArguments, 1), node_1 = _d[0];
if (ts.isLiteralTypeNode(node_1) && ts.isNumericLiteral(node_1.literal)) {
if (parseInt(node_1.literal.text) > 32) {
(0, assert_1.default)(false, "\u300C".concat(moduleName, "\u300D\u4E2Dentity\u5C5E\u6027\u7684\u5B9A\u4E49\u4E0D\u662FString<32>\u7C7B\u578B\uFF0Centity\u662F\u7CFB\u7EDF\u7528\u4E8E\u8868\u793A\u53CD\u6307\u6307\u9488\u7684\u4FDD\u7559\u5C5E\u6027\uFF0C\u8BF7\u52FF\u4ED6\u7528"));
}
else {
hasEntityAttr_1 = true;
}
}
}
if (attrName === 'entityId'
&& ts.isTypeReferenceNode(type)
&& ts.isIdentifier(type.typeName)) {
if (attrName === 'entityId') {
(0, assert_1.default)(ts.isTypeReferenceNode(type) && ts.isIdentifier(type.typeName), "\u300C".concat(moduleName, "\u300D\u4E2DentityId\u5C5E\u6027\u7684\u5B9A\u4E49\u4E0D\u662FString<64>\u7C7B\u578B\uFF0CentityId\u662F\u7CFB\u7EDF\u7528\u4E8E\u8868\u793A\u53CD\u6307\u6307\u9488\u7684\u4FDD\u7559\u5C5E\u6027\uFF0C\u8BF7\u52FF\u4ED6\u7528"));
var typeArguments = type.typeArguments;
if (type.typeName.text === 'String'
&& typeArguments
&& typeArguments.length === 1) {
var _e = tslib_1.__read(typeArguments, 1), node_2 = _e[0];
if (ts.isLiteralTypeNode(node_2) && ts.isNumericLiteral(node_2.literal)) {
if (parseInt(node_2.literal.text) !== 64) {
console.warn("\u300C".concat(filename, "\u300D\u4E2DentityId\u5C5E\u6027\u5B9A\u4E49\u7684\u957F\u5EA6\u4E0D\u7B49\u4E8E64\uFF0C\u8BF7\u786E\u8BA4\u5B83\u4E0D\u662F\u4E00\u4E2A\u53CD\u6307\u5BF9\u8C61"));
}
else {
hasEntityIdAttr_1 = true;
}
(0, assert_1.default)(type.typeName.text === 'String' && typeArguments && typeArguments.length === 1, "\u300C".concat(moduleName, "\u300D\u4E2DentityId\u5C5E\u6027\u7684\u5B9A\u4E49\u4E0D\u662FString<64>\u7C7B\u578B\uFF0CentityId\u662F\u7CFB\u7EDF\u7528\u4E8E\u8868\u793A\u53CD\u6307\u6307\u9488\u7684\u4FDD\u7559\u5C5E\u6027\uFF0C\u8BF7\u52FF\u4ED6\u7528"));
var _e = tslib_1.__read(typeArguments, 1), node_2 = _e[0];
if (ts.isLiteralTypeNode(node_2) && ts.isNumericLiteral(node_2.literal)) {
if (parseInt(node_2.literal.text) !== 64) {
(0, assert_1.default)(false, "\u300C".concat(moduleName, "\u300D\u4E2DentityId\u5C5E\u6027\u7684\u5B9A\u4E49\u4E0D\u662FString<64>\u7C7B\u578B\uFF0CentityId\u662F\u7CFB\u7EDF\u7528\u4E8E\u8868\u793A\u53CD\u6307\u6307\u9488\u7684\u4FDD\u7559\u5C5E\u6027\uFF0C\u8BF7\u52FF\u4ED6\u7528"));
}
else {
hasEntityIdAttr_1 = true;
}
}
}

View File

@ -7,12 +7,10 @@ import { assign, cloneDeep, difference, identity, intersection, keys, uniq, uniq
import * as ts from 'typescript';
const { factory } = ts;
import {
ENTITY_PATH_IN_OAK_GENERAL_BUSINESS,
ACTION_CONSTANT_IN_OAK_DOMAIN,
TYPE_PATH_IN_OAK_DOMAIN,
RESERVED_ENTITIES,
STRING_LITERAL_MAX_LENGTH,
ENTITY_PATH_IN_OAK_DOMAIN,
NUMERICAL_LITERL_DEFAULT_PRECISION,
NUMERICAL_LITERL_DEFAULT_SCALE,
INT_LITERL_DEFAULT_WIDTH,
@ -515,13 +513,13 @@ function analyzeEntity(filename: string, path: string, program: ts.Program, rela
// 编译后的路径默认要深一层
const moduleSpecifier2Text = relativePath
? PathLib.join(
relativePath,
moduleSpecifier.text
).replace(/\\/g, '/')
relativePath,
moduleSpecifier.text
).replace(/\\/g, '/')
: PathLib.join('..', moduleSpecifier.text).replace(
/\\/g,
'/'
);
/\\/g,
'/'
);
additionalImports.push(
factory.updateImportDeclaration(
node,
@ -543,7 +541,7 @@ function analyzeEntity(filename: string, path: string, program: ts.Program, rela
let hasEntityAttr = false;
let hasEntityIdAttr = false;
const { members, heritageClauses } = node;
assert(['EntityShape', 'FileCarrierEntityShape'].includes((<ts.Identifier>heritageClauses![0].types![0].expression).text));
assert(['EntityShape'].includes((<ts.Identifier>heritageClauses![0].types![0].expression).text), moduleName);
members.forEach(
(attrNode) => {
const { type, name, questionToken } = <ts.PropertySignature>attrNode;
@ -622,40 +620,35 @@ function analyzeEntity(filename: string, path: string, program: ts.Program, rela
}
}
if (attrName === 'entity'
&& ts.isTypeReferenceNode(type!)
&& ts.isIdentifier(type.typeName)) {
if (attrName === 'entity') {
assert(ts.isTypeReferenceNode(type!) && ts.isIdentifier(type.typeName), `${moduleName}」中entity属性的定义不是String<32>类型entity是系统用于表示反指指针的保留属性请勿他用`);
const { typeArguments } = type;
if (type.typeName.text === 'String'
assert(type.typeName.text === 'String'
&& typeArguments
&& typeArguments.length === 1) {
const [node] = typeArguments;
if (ts.isLiteralTypeNode(node) && ts.isNumericLiteral(node.literal)) {
if (parseInt(node.literal.text) > 32) {
console.warn(`「」中entity属性定义的长度大于32请确认它不是一个反指对象`);
}
else {
hasEntityAttr = true;
}
&& typeArguments.length === 1, `${moduleName}」中entity属性的定义不是String<32>类型entity是系统用于表示反指指针的保留属性请勿他用`);
const [node] = typeArguments;
if (ts.isLiteralTypeNode(node) && ts.isNumericLiteral(node.literal)) {
if (parseInt(node.literal.text) > 32) {
assert(false, `${moduleName}」中entity属性的定义不是String<32>类型entity是系统用于表示反指指针的保留属性请勿他用`);
}
else {
hasEntityAttr = true;
}
}
}
if (attrName === 'entityId'
&& ts.isTypeReferenceNode(type!)
&& ts.isIdentifier(type.typeName)) {
if (attrName === 'entityId') {
assert(ts.isTypeReferenceNode(type!) && ts.isIdentifier(type.typeName), `${moduleName}」中entityId属性的定义不是String<64>类型entityId是系统用于表示反指指针的保留属性请勿他用`);
const { typeArguments } = type;
if (type.typeName.text === 'String'
&& typeArguments
&& typeArguments.length === 1) {
const [node] = typeArguments;
if (ts.isLiteralTypeNode(node) && ts.isNumericLiteral(node.literal)) {
if (parseInt(node.literal.text) !== 64) {
console.warn(`${filename}」中entityId属性定义的长度不等于64请确认它不是一个反指对象`);
}
else {
hasEntityIdAttr = true;
}
assert(type.typeName.text === 'String' && typeArguments && typeArguments.length === 1, `${moduleName}」中entityId属性的定义不是String<64>类型entityId是系统用于表示反指指针的保留属性请勿他用`);
const [node] = typeArguments;
if (ts.isLiteralTypeNode(node) && ts.isNumericLiteral(node.literal)) {
if (parseInt(node.literal.text) !== 64) {
assert(false, `${moduleName}」中entityId属性的定义不是String<64>类型entityId是系统用于表示反指指针的保留属性请勿他用`);
}
else {
hasEntityIdAttr = true;
}
}
}