diff --git a/lib/compiler/schemalBuilder.js b/lib/compiler/schemalBuilder.js
index dd09082..abab16c 100644
--- a/lib/compiler/schemalBuilder.js
+++ b/lib/compiler/schemalBuilder.js
@@ -31,7 +31,7 @@ const lodash_1 = require("lodash");
const ts = __importStar(require("typescript"));
const { factory } = ts;
const env_1 = require("./env");
-const utils_1 = require("./utils");
+const string_1 = require("../utils/string");
const Schema = {};
const OneToMany = {};
const ManyToOne = {};
@@ -97,7 +97,7 @@ function pushStatementIntoActionAst(moduleName, node, sourceFile) {
declarations.forEach((declaration) => {
if (ts.isIdentifier(declaration.name) && declaration.name.text.endsWith('ActionDef')) {
const { text } = declaration.name;
- actionDefName = (0, utils_1.firstLetterLowerCase)(text.slice(0, text.length - 9));
+ actionDefName = (0, string_1.firstLetterLowerCase)(text.slice(0, text.length - 9));
}
});
}
@@ -452,7 +452,7 @@ function analyzeEntity(filename, path, program) {
(0, assert_1.default)(ele.literal.text.length < env_1.STRING_LITERAL_MAX_LENGTH, `Relation定义的字符串长度不长于${env_1.STRING_LITERAL_MAX_LENGTH}(${filename},${ele.literal.text})`);
});
}
- const entityLc = (0, utils_1.firstLetterLowerCase)(moduleName);
+ const entityLc = (0, string_1.firstLetterLowerCase)(moduleName);
const relationEntityName = `User${moduleName}`;
const relationSchemaAttrs = [
factory.createPropertySignature(undefined, factory.createIdentifier("user"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("User"), undefined)),
@@ -473,7 +473,7 @@ function analyzeEntity(filename, path, program) {
(0, assert_1.default)(!localeDef, `【${filename}】locale定义须在Action/State之后`);
pushStatementIntoActionAst(moduleName, factory.updateTypeAliasDeclaration(node, node.decorators, [factory.createModifier(ts.SyntaxKind.ExportKeyword)], node.name, node.typeParameters, node.type), sourceFile);
if (node.name.text.endsWith('State')) {
- states.push((0, utils_1.firstLetterLowerCase)(node.name.text));
+ states.push((0, string_1.firstLetterLowerCase)(node.name.text));
}
}
else if (beforeSchema) {
@@ -521,7 +521,7 @@ function analyzeEntity(filename, path, program) {
pushStatementIntoActionAst(moduleName, node, sourceFile);
const adName = declaration.name.text.slice(0, declaration.name.text.length - 9);
const attr = adName.concat('State');
- schemaAttrs.push(factory.createPropertySignature(undefined, factory.createIdentifier((0, utils_1.firstLetterLowerCase)(attr)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(factory.createIdentifier(attr))));
+ schemaAttrs.push(factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(attr)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(factory.createIdentifier(attr))));
}
else if (declaration.type && (ts.isArrayTypeNode(declaration.type)
&& ts.isTypeReferenceNode(declaration.type.elementType)
@@ -598,7 +598,7 @@ function analyzeEntity(filename, path, program) {
throw new Error(`「${filename}」中索引「${indexName}」的属性「${indexAttrName}」定义非法`);
}
const { type, name } = schemaNode;
- const entity = (0, utils_1.firstLetterLowerCase)(moduleName);
+ const entity = (0, string_1.firstLetterLowerCase)(moduleName);
const { [entity]: manyToOneSet } = ManyToOne;
if (ts.isTypeReferenceNode(type)) {
const { typeName } = type;
@@ -759,18 +759,18 @@ function constructSchema(statements, entity) {
const foreignKey = `${attrName}Id`;
members.push(factory.createPropertySignature(undefined, factory.createIdentifier(foreignKey), questionToken, questionToken ? factory.createUnionTypeNode([
factory.createTypeReferenceNode(factory.createIdentifier('ForeignKey'), [
- factory.createLiteralTypeNode(factory.createStringLiteral((0, utils_1.firstLetterLowerCase)(text2)))
+ factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(text2)))
]),
factory.createLiteralTypeNode(factory.createNull())
]) : factory.createTypeReferenceNode(factory.createIdentifier('ForeignKey'), [
- factory.createLiteralTypeNode(factory.createStringLiteral((0, utils_1.firstLetterLowerCase)(text2)))
+ factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(text2)))
])));
}
else {
// assert(types.includes(text), `${entity}中的属性${name.toString()}有非法的属性类型定义`);
// 处理entity这种特殊情况
if (ReversePointerRelations[entity] && attrName === 'entity') {
- const entityUnionTypeNode = ReversePointerRelations[entity].map(ele => factory.createLiteralTypeNode(factory.createStringLiteral((0, utils_1.firstLetterLowerCase)(ele))));
+ const entityUnionTypeNode = ReversePointerRelations[entity].map(ele => factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(ele))));
if (process.env.COMPLING_AS_LIB) {
// 如果是建立 base-domain,还要容纳可能的其它对象引用
entityUnionTypeNode.push(factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));
@@ -806,7 +806,7 @@ function constructSchema(statements, entity) {
if (reverseOnes) {
reverseOnes.forEach((one) => {
referenceEntities.push(one);
- members2.push(factory.createPropertySignature(undefined, (0, utils_1.firstLetterLowerCase)(one), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'Schema'))));
+ members2.push(factory.createPropertySignature(undefined, (0, string_1.firstLetterLowerCase)(one), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'Schema'))));
});
}
const foreignKeySet = {};
@@ -824,7 +824,7 @@ function constructSchema(statements, entity) {
}
}
for (const entityName in foreignKeySet) {
- const entityNameLc = (0, utils_1.firstLetterLowerCase)(entityName);
+ const entityNameLc = (0, string_1.firstLetterLowerCase)(entityName);
foreignKeySet[entityName].forEach((foreignKey) => {
const identifier = `${entityNameLc}$${foreignKey}`;
members2.push(factory.createPropertySignature(undefined, identifier, factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(factory.createIdentifier("Array"), [factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'Schema'), undefined)])));
@@ -992,7 +992,7 @@ function constructFilter(statements, entity) {
}
}
// type AttrFilter = {};
- const eumUnionTypeNode = ReversePointerRelations[entity] && ReversePointerRelations[entity].map(ele => factory.createLiteralTypeNode(factory.createStringLiteral((0, utils_1.firstLetterLowerCase)(ele))));
+ const eumUnionTypeNode = ReversePointerRelations[entity] && ReversePointerRelations[entity].map(ele => factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(ele))));
if (process.env.COMPLING_AS_LIB) {
eumUnionTypeNode && eumUnionTypeNode.push(factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));
}
@@ -1104,7 +1104,7 @@ function constructProjection(statements, entity) {
if (ReversePointerRelations[entity]) {
ReversePointerRelations[entity].forEach((one) => {
const text2 = one === 'Schema' ? entity : one;
- properties.push([(0, utils_1.firstLetterLowerCase)(one), false, factory.createTypeReferenceNode(createForeignRef(entity, one, 'Projection')), factory.createTypeReferenceNode(createForeignRef(entity, one, 'ExportProjection'))]);
+ properties.push([(0, string_1.firstLetterLowerCase)(one), false, factory.createTypeReferenceNode(createForeignRef(entity, one, 'Projection')), factory.createTypeReferenceNode(createForeignRef(entity, one, 'ExportProjection'))]);
if (foreignKeyProperties.hasOwnProperty(one)) {
foreignKeyProperties[text2].push('entity');
}
@@ -1129,20 +1129,20 @@ function constructProjection(statements, entity) {
}
}
for (const entityName in foreignKeySet) {
- const entityNameLc = (0, utils_1.firstLetterLowerCase)(entityName);
+ const entityNameLc = (0, string_1.firstLetterLowerCase)(entityName);
foreignKeySet[entityName].forEach((foreignKey) => {
const identifier = `${entityNameLc}$${foreignKey}`;
properties.push([identifier, false,
factory.createIntersectionTypeNode([
factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'Selection'), undefined),
factory.createTypeLiteralNode([
- factory.createPropertySignature(undefined, factory.createIdentifier("$entity"), undefined, factory.createLiteralTypeNode(factory.createStringLiteral((0, utils_1.firstLetterLowerCase)(entityName))))
+ factory.createPropertySignature(undefined, factory.createIdentifier("$entity"), undefined, factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(entityName))))
])
]),
factory.createIntersectionTypeNode([
factory.createTypeReferenceNode(createForeignRef(entity, entityName, 'Exportation'), undefined),
factory.createTypeLiteralNode([
- factory.createPropertySignature(undefined, factory.createIdentifier("$entity"), undefined, factory.createLiteralTypeNode(factory.createStringLiteral((0, utils_1.firstLetterLowerCase)(entityName))))
+ factory.createPropertySignature(undefined, factory.createIdentifier("$entity"), undefined, factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(entityName))))
])
])
]);
@@ -1188,7 +1188,7 @@ function constructProjection(statements, entity) {
* @param entity
*/
function constructQuery(statements, entity) {
- const entityLc = (0, utils_1.firstLetterLowerCase)(entity);
+ const entityLc = (0, string_1.firstLetterLowerCase)(entity);
/* statements.push(
factory.createTypeAliasDeclaration(
undefined,
@@ -1368,7 +1368,7 @@ function constructSorter(statements, entity) {
}
if (ReversePointerRelations[entity]) {
ReversePointerRelations[entity].forEach((one) => {
- members.push(factory.createPropertySignature(undefined, (0, utils_1.firstLetterLowerCase)(one), undefined, factory.createTypeReferenceNode(createForeignRef(entity, one, 'SortAttr'))));
+ members.push(factory.createPropertySignature(undefined, (0, string_1.firstLetterLowerCase)(one), undefined, factory.createTypeReferenceNode(createForeignRef(entity, one, 'SortAttr'))));
});
if (process.env.COMPLING_AS_LIB) {
members.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)));
@@ -1447,7 +1447,7 @@ function constructFullAttrs(statements, entity) {
}
const otmAttrs = [];
for (const entityName in foreignKeySet) {
- const entityNameLc = (0, utils_1.firstLetterLowerCase)(entityName);
+ const entityNameLc = (0, string_1.firstLetterLowerCase)(entityName);
if (foreignKeySet[entityName].length > 1) {
foreignKeySet[entityName].forEach((foreignKey) => {
const head = `${entityNameLc}s$${foreignKey}`;
@@ -1568,14 +1568,14 @@ function constructActions(statements, entity) {
reverseOneNodes.push(factory.createTypeLiteralNode([
factory.createPropertySignature(undefined, factory.createIdentifier('entity'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
factory.createPropertySignature(undefined, factory.createIdentifier('entityId'), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword)),
- factory.createPropertySignature(undefined, factory.createIdentifier((0, utils_1.firstLetterLowerCase)(one)), undefined, // 反向指针好像不能为空,以后或许会有特例 by Xc
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), undefined, // 反向指针好像不能为空,以后或许会有特例 by Xc
factory.createTypeReferenceNode(createForeignRef(entity, one, 'CreateSingleOperation')))
]), factory.createTypeLiteralNode([
factory.createPropertySignature(undefined, factory.createIdentifier('entity'), undefined, // 反向指针好像不能为空,以后或许会有特例 by Xc
- factory.createLiteralTypeNode(factory.createStringLiteral(`${(0, utils_1.firstLetterLowerCase)(one)}`))),
+ factory.createLiteralTypeNode(factory.createStringLiteral(`${(0, string_1.firstLetterLowerCase)(one)}`))),
factory.createPropertySignature(undefined, factory.createIdentifier('entityId'), undefined, // 反向指针好像不能为空,以后或许会有特例 by Xc
factory.createTypeReferenceNode(factory.createIdentifier("String"), [factory.createLiteralTypeNode(factory.createNumericLiteral("64"))])),
- factory.createPropertySignature(undefined, factory.createIdentifier((0, utils_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')))
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')))
]));
}
if (process.env.COMPLING_AS_LIB) {
@@ -1599,7 +1599,7 @@ function constructActions(statements, entity) {
}
if (oneToManySet) {
for (const entityName in foreignKeySet) {
- const entityNameLc = (0, utils_1.firstLetterLowerCase)(entityName);
+ const entityNameLc = (0, string_1.firstLetterLowerCase)(entityName);
foreignKeySet[entityName].forEach((foreignKey) => {
const identifier = `${entityNameLc}$${foreignKey}`;
const otmCreateOperationDataNode = factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
@@ -1714,9 +1714,9 @@ function constructActions(statements, entity) {
if (ReversePointerRelations[entity]) {
const refEntityLitrals = [];
for (const one of ReversePointerRelations[entity]) {
- refEntityLitrals.push(factory.createLiteralTypeNode(factory.createStringLiteral(`${(0, utils_1.firstLetterLowerCase)(one)}`)));
+ refEntityLitrals.push(factory.createLiteralTypeNode(factory.createStringLiteral(`${(0, string_1.firstLetterLowerCase)(one)}`)));
reverseOneNodes.push(factory.createTypeLiteralNode([
- factory.createPropertySignature(undefined, factory.createIdentifier((0, utils_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
factory.createTypeReferenceNode(createForeignRef(entity, one, 'CreateSingleOperation')),
factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')),
factory.createTypeReferenceNode(createForeignRef(entity, one, 'RemoveOperation'))
@@ -1750,7 +1750,7 @@ function constructActions(statements, entity) {
}
if (oneToManySet) {
for (const entityName in foreignKeySet) {
- const entityNameLc = (0, utils_1.firstLetterLowerCase)(entityName);
+ const entityNameLc = (0, string_1.firstLetterLowerCase)(entityName);
foreignKeySet[entityName].forEach((foreignKey) => {
const identifier = `${entityNameLc}s$${foreignKey}`;
const otmCreateOperationDataNode = factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
@@ -1825,11 +1825,11 @@ function constructActions(statements, entity) {
if (ReversePointerRelations[entity]) {
const refEntityLitrals = [];
for (const one of ReversePointerRelations[entity]) {
- refEntityLitrals.push(factory.createLiteralTypeNode(factory.createStringLiteral(`${(0, utils_1.firstLetterLowerCase)(one)}`)));
+ refEntityLitrals.push(factory.createLiteralTypeNode(factory.createStringLiteral(`${(0, string_1.firstLetterLowerCase)(one)}`)));
reverseOneNodes.push(factory.createTypeLiteralNode([
- factory.createPropertySignature(undefined, factory.createIdentifier((0, utils_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')))
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'UpdateOperation')))
]), factory.createTypeLiteralNode([
- factory.createPropertySignature(undefined, factory.createIdentifier((0, utils_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'RemoveOperation')))
+ factory.createPropertySignature(undefined, factory.createIdentifier((0, string_1.firstLetterLowerCase)(one)), factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode(createForeignRef(entity, one, 'RemoveOperation')))
]));
}
if (process.env.COMPLING_AS_LIB) {
@@ -1996,7 +1996,7 @@ function outputSubQuery(outputDir, printer) {
fromEntites.push(one);
const inUnionTypeNode = fromEntites.map(ele => factory.createIntersectionTypeNode([
factory.createTypeReferenceNode(factory.createQualifiedName(factory.createIdentifier(ele), factory.createIdentifier(identifier)), undefined),
- factory.createTypeLiteralNode([factory.createPropertySignature(undefined, factory.createIdentifier("entity"), undefined, factory.createLiteralTypeNode(factory.createStringLiteral((0, utils_1.firstLetterLowerCase)(ele))))])
+ factory.createTypeLiteralNode([factory.createPropertySignature(undefined, factory.createIdentifier("entity"), undefined, factory.createLiteralTypeNode(factory.createStringLiteral((0, string_1.firstLetterLowerCase)(ele))))])
]));
if (process.env.COMPLING_AS_LIB) {
// 如果是建立 base,这里要加上额外可能的对象信息
@@ -2018,7 +2018,7 @@ function outputEntityDict(outputDir, printer) {
for (const entity in Schema) {
// import * as User from '../User/Schema';
statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, factory.createIdentifier("EntityDef"), factory.createIdentifier(entity))])), factory.createStringLiteral(`./${entity}/Schema`)));
- const entityLc = (0, utils_1.firstLetterLowerCase)(entity);
+ const entityLc = (0, string_1.firstLetterLowerCase)(entity);
propertySignatures.push(factory.createPropertySignature(undefined, factory.createIdentifier(entityLc), undefined, factory.createTypeReferenceNode(entity)));
}
if ( /* process.env.COMPLING_AS_LIB */false) {
@@ -2046,10 +2046,10 @@ function outputSchema(outputDir, printer) {
for (const a in importedFrom) {
(0, assert_1.default)(a.endsWith('Action'));
const s = a.slice(0, a.length - 6).concat('State');
- if (importedFrom[a] === 'local' && actionDefNames.includes((0, utils_1.firstLetterLowerCase)(a.slice(0, a.length - 6)))) {
+ if (importedFrom[a] === 'local' && actionDefNames.includes((0, string_1.firstLetterLowerCase)(a.slice(0, a.length - 6)))) {
localActions.push(s);
}
- else if (actionDefNames.includes((0, utils_1.firstLetterLowerCase)(a.slice(0, a.length - 6)))) {
+ else if (actionDefNames.includes((0, string_1.firstLetterLowerCase)(a.slice(0, a.length - 6)))) {
const { moduleSpecifier } = importedFrom[a];
statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([
factory.createImportSpecifier(false, undefined, factory.createIdentifier(s))
@@ -2114,7 +2114,7 @@ function outputAction(outputDir, printer) {
if (actionDiff.length > 0) {
throw new Error(`action not conform to actionDef: ${actionDiff.join(',')}, entity: ${entity}`);
} */
- statements.push(factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier("ActionDefDict"), undefined, undefined, factory.createObjectLiteralExpression(actionDefNames.map(ele => factory.createPropertyAssignment(factory.createIdentifier(`${ele}State`), factory.createIdentifier(`${(0, utils_1.firstLetterUpperCase)(ele)}ActionDef`))), true))], ts.NodeFlags.Const)));
+ statements.push(factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier("ActionDefDict"), undefined, undefined, factory.createObjectLiteralExpression(actionDefNames.map(ele => factory.createPropertyAssignment(factory.createIdentifier(`${ele}State`), factory.createIdentifier(`${(0, string_1.firstLetterUpperCase)(ele)}ActionDef`))), true))], ts.NodeFlags.Const)));
/* const result = printer.printNode(
ts.EmitHint.Unspecified,
factory.createSourceFile(statements,
@@ -2127,7 +2127,7 @@ function outputAction(outputDir, printer) {
const filename = path_1.default.join(outputDir, entity, 'Action.ts');
(0, fs_1.writeFileSync)(filename, result, { flag: 'w' });
actionDictStatements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, factory.createIdentifier("ActionDefDict"), factory.createIdentifier(entity))])), factory.createStringLiteral(`./${entity}/Action`)));
- propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier((0, utils_1.firstLetterLowerCase)(entity)), factory.createIdentifier(entity)));
+ propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier((0, string_1.firstLetterLowerCase)(entity)), factory.createIdentifier(entity)));
}
actionDictStatements.push(factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier("ActionDefDict"), undefined, undefined, factory.createObjectLiteralExpression(propertyAssignments, true))], ts.NodeFlags.Const)));
const resultFile = ts.createSourceFile("someFileName.ts", "", ts.ScriptTarget.Latest, /*setParentNodes*/ false, ts.ScriptKind.TS);
@@ -2207,7 +2207,7 @@ function constructAttributes(entity) {
if (manyToOneItem) {
// 外键
name2 = factory.createIdentifier(`${name.text}Id`);
- attrAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("type"), factory.createStringLiteral("ref")), factory.createPropertyAssignment(factory.createIdentifier("ref"), factory.createStringLiteral((0, utils_1.firstLetterLowerCase)(text2))));
+ attrAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("type"), factory.createStringLiteral("ref")), factory.createPropertyAssignment(factory.createIdentifier("ref"), factory.createStringLiteral((0, string_1.firstLetterLowerCase)(text2))));
}
else {
if (text.endsWith('State')) {
@@ -2296,8 +2296,8 @@ function outputLocale(outputDir, printer) {
const lack = (0, lodash_1.difference)(entities, locales[lng]);
throw new Error(`${lng}语言定义中缺少了对象${lack.join(',')}的定义,请检查相应的定义文件`);
}
- const statements = locales[lng].map((entity) => factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, factory.createIdentifier((0, utils_1.firstLetterLowerCase)(entity)), undefined), factory.createStringLiteral(`../${entity}/locales/${lng}`), undefined));
- statements.push(factory.createExportAssignment(undefined, undefined, undefined, factory.createObjectLiteralExpression(locales[lng].map(ele => factory.createShorthandPropertyAssignment(factory.createIdentifier((0, utils_1.firstLetterLowerCase)(ele)), undefined)), true)));
+ const statements = locales[lng].map((entity) => factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, factory.createIdentifier((0, string_1.firstLetterLowerCase)(entity)), undefined), factory.createStringLiteral(`../${entity}/locales/${lng}`), undefined));
+ statements.push(factory.createExportAssignment(undefined, undefined, undefined, factory.createObjectLiteralExpression(locales[lng].map(ele => factory.createShorthandPropertyAssignment(factory.createIdentifier((0, string_1.firstLetterLowerCase)(ele)), undefined)), true)));
const result = printer.printList(ts.ListFormat.SourceFileStatements, factory.createNodeArray(statements), ts.createSourceFile("someFileName.ts", "", ts.ScriptTarget.Latest, /*setParentNodes*/ false, ts.ScriptKind.TS));
const filename = path_1.default.join(outputDir, '_locales', `${lng}.ts`);
(0, fs_1.writeFileSync)(filename, result, { flag: 'w' });
@@ -2332,9 +2332,9 @@ function outputStorage(outputDir, printer) {
const filename = path_1.default.join(outputDir, entity, 'Storage.ts');
(0, fs_1.writeFileSync)(filename, result, { flag: 'w' });
importStatements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([
- factory.createImportSpecifier(false, factory.createIdentifier("desc"), factory.createIdentifier(`${(0, utils_1.firstLetterLowerCase)(entity)}Desc`))
+ factory.createImportSpecifier(false, factory.createIdentifier("desc"), factory.createIdentifier(`${(0, string_1.firstLetterLowerCase)(entity)}Desc`))
])), factory.createStringLiteral(`./${entity}/Storage`), undefined));
- entityAssignments.push(factory.createPropertyAssignment((0, utils_1.firstLetterLowerCase)(entity), factory.createIdentifier(`${(0, utils_1.firstLetterLowerCase)(entity)}Desc`)));
+ entityAssignments.push(factory.createPropertyAssignment((0, string_1.firstLetterLowerCase)(entity), factory.createIdentifier(`${(0, string_1.firstLetterLowerCase)(entity)}Desc`)));
}
importStatements.push(factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier("storageSchema"), undefined, factory.createTypeReferenceNode(factory.createIdentifier("StorageSchema"), [
factory.createTypeReferenceNode('EntityDict')
diff --git a/lib/types/Expression.d.ts b/lib/types/Expression.d.ts
index 784aae1..9c6b55b 100644
--- a/lib/types/Expression.d.ts
+++ b/lib/types/Expression.d.ts
@@ -2,14 +2,15 @@ import { RefAttr } from "./Demand";
import { Geo } from "./Geo";
export declare type RefOrExpression = RefAttr | Expression;
declare type MathType = RefOrExpression | number;
+declare type StringType = RefOrExpression | string;
interface Add {
- $add: [MathType, MathType];
+ $add: (MathType | StringType)[];
}
interface Subtract {
$subtract: [MathType, MathType];
}
interface Multiply {
- $multiply: [MathType, MathType];
+ $multiply: (MathType)[];
}
interface Divide {
$divide: [MathType, MathType];
diff --git a/lib/types/Expression.js b/lib/types/Expression.js
index d5ec6cb..15d1b25 100644
--- a/lib/types/Expression.js
+++ b/lib/types/Expression.js
@@ -145,13 +145,24 @@ function execOp(op, params, obscure) {
return params[0].includes(params[1]);
}
case '$add': {
- return params[0] + params[1];
+ if (typeof params[0] === 'number') {
+ let result = 0;
+ params.forEach((ele) => result += ele);
+ return result;
+ }
+ else {
+ let result = '';
+ params.forEach((ele) => result += ele);
+ return result;
+ }
}
case '$subtract': {
return params[0] - params[1];
}
case '$multiply': {
- return params[0] * params[1];
+ let result = 1;
+ params.forEach((ele) => result = result * ele);
+ return result;
}
case '$divide': {
return params[0] / params[1];
diff --git a/lib/utils/string.d.ts b/lib/utils/string.d.ts
new file mode 100644
index 0000000..c75f310
--- /dev/null
+++ b/lib/utils/string.d.ts
@@ -0,0 +1,2 @@
+export declare function firstLetterLowerCase(s: string): string;
+export declare function firstLetterUpperCase(s: string): string;
diff --git a/lib/utils/string.js b/lib/utils/string.js
new file mode 100644
index 0000000..8e3b992
--- /dev/null
+++ b/lib/utils/string.js
@@ -0,0 +1,11 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.firstLetterUpperCase = exports.firstLetterLowerCase = void 0;
+function firstLetterLowerCase(s) {
+ return s.slice(0, 1).toLowerCase().concat(s.slice(1));
+}
+exports.firstLetterLowerCase = firstLetterLowerCase;
+function firstLetterUpperCase(s) {
+ return s.slice(0, 1).toUpperCase().concat(s.slice(1));
+}
+exports.firstLetterUpperCase = firstLetterUpperCase;
diff --git a/src/compiler/schemalBuilder.ts b/src/compiler/schemalBuilder.ts
index 860076f..aa839d3 100644
--- a/src/compiler/schemalBuilder.ts
+++ b/src/compiler/schemalBuilder.ts
@@ -16,7 +16,7 @@ import {
NUMERICAL_LITERL_DEFAULT_SCALE,
INT_LITERL_DEFAULT_WIDTH,
} from './env';
-import { firstLetterLowerCase, firstLetterUpperCase } from './utils';
+import { firstLetterLowerCase, firstLetterUpperCase } from '../utils/string';
const Schema: Record;
diff --git a/src/types/Expression.ts b/src/types/Expression.ts
index e7929e4..3f35b3f 100644
--- a/src/types/Expression.ts
+++ b/src/types/Expression.ts
@@ -9,14 +9,15 @@ export type RefOrExpression = RefAttr | Expression;
// Math
type MathType = RefOrExpression | number;
+type StringType = RefOrExpression | string
interface Add {
- $add: [MathType, MathType];
+ $add: (MathType | StringType)[];
};
interface Subtract {
$subtract: [MathType, MathType];
};
interface Multiply {
- $multiply: [MathType, MathType];
+ $multiply: (MathType)[];
};
interface Divide {
$divide: [MathType, MathType];
@@ -248,13 +249,30 @@ export function execOp(op: string, params: any, obscure?: boolean): ExpressionCo
return params[0].includes(params[1]);
}
case '$add': {
- return params[0] + params[1];
+ if (typeof params[0] === 'number') {
+ let result = 0;
+ params.forEach(
+ (ele: number) => result += ele
+ );
+ return result;
+ }
+ else {
+ let result = '';
+ params.forEach(
+ (ele: string) => result += ele
+ );
+ return result;
+ }
}
case '$subtract': {
return params[0] - params[1];
}
case '$multiply': {
- return params[0] * params[1];
+ let result = 1;
+ params.forEach(
+ (ele: number) => result = result * ele
+ );
+ return result;
}
case '$divide': {
return params[0] / params[1];
diff --git a/src/compiler/utils.ts b/src/utils/string.ts
similarity index 100%
rename from src/compiler/utils.ts
rename to src/utils/string.ts