编译器增强了对entity和entityId的检查
This commit is contained in:
parent
15f6ca6623
commit
c295b4a339
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue