oak-domain 3.0.3 → 4.0.0

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.
Files changed (203) hide show
  1. package/lib/actions/action.d.ts +16 -16
  2. package/lib/actions/action.js +17 -17
  3. package/lib/actions/relation.d.ts +5 -5
  4. package/lib/actions/relation.js +25 -38
  5. package/lib/base-app-domain/ActionAuth/Schema.d.ts +186 -160
  6. package/lib/base-app-domain/ActionAuth/Storage.js +39 -42
  7. package/lib/base-app-domain/ActionDefDict.d.ts +8 -9
  8. package/lib/base-app-domain/ActionDefDict.js +9 -11
  9. package/lib/base-app-domain/EntityDict.d.ts +28 -24
  10. package/lib/base-app-domain/I18n/Schema.d.ts +129 -129
  11. package/lib/base-app-domain/I18n/Schema.js +2 -2
  12. package/lib/base-app-domain/I18n/Storage.d.ts +3 -3
  13. package/lib/base-app-domain/I18n/Storage.js +59 -59
  14. package/lib/base-app-domain/Modi/Action.d.ts +10 -10
  15. package/lib/base-app-domain/Modi/Action.js +14 -14
  16. package/lib/base-app-domain/Modi/Schema.d.ts +136 -136
  17. package/lib/base-app-domain/Modi/Storage.js +63 -63
  18. package/lib/base-app-domain/ModiEntity/Schema.d.ts +384 -311
  19. package/lib/base-app-domain/ModiEntity/Storage.js +30 -30
  20. package/lib/base-app-domain/Oper/Schema.d.ts +153 -152
  21. package/lib/base-app-domain/Oper/Storage.js +38 -38
  22. package/lib/base-app-domain/OperEntity/Schema.d.ts +373 -300
  23. package/lib/base-app-domain/OperEntity/Storage.js +30 -30
  24. package/lib/base-app-domain/Path/Schema.d.ts +149 -0
  25. package/lib/base-app-domain/Path/Schema.js +2 -0
  26. package/lib/base-app-domain/Path/Storage.d.ts +3 -0
  27. package/lib/base-app-domain/Path/Storage.js +54 -0
  28. package/lib/base-app-domain/Relation/Schema.d.ts +188 -188
  29. package/lib/base-app-domain/Relation/Storage.js +54 -54
  30. package/lib/base-app-domain/Relation.d.ts +2 -10
  31. package/lib/base-app-domain/Relation.js +4 -10
  32. package/lib/base-app-domain/RelationAuth/Schema.d.ts +214 -180
  33. package/lib/base-app-domain/RelationAuth/Storage.js +44 -46
  34. package/lib/base-app-domain/Storage.js +31 -27
  35. package/lib/base-app-domain/User/Action.d.ts +10 -10
  36. package/lib/base-app-domain/User/Action.js +12 -12
  37. package/lib/base-app-domain/User/Schema.d.ts +210 -197
  38. package/lib/base-app-domain/User/Storage.js +33 -33
  39. package/lib/base-app-domain/UserEntityClaim/Schema.d.ts +264 -0
  40. package/lib/base-app-domain/UserEntityClaim/Schema.js +2 -0
  41. package/lib/base-app-domain/UserEntityClaim/Storage.d.ts +3 -0
  42. package/lib/base-app-domain/UserEntityClaim/Storage.js +37 -0
  43. package/lib/base-app-domain/UserEntityGrant/Action.d.ts +5 -5
  44. package/lib/base-app-domain/UserEntityGrant/Action.js +5 -5
  45. package/lib/base-app-domain/UserEntityGrant/Schema.d.ts +131 -157
  46. package/lib/base-app-domain/UserEntityGrant/Storage.js +25 -29
  47. package/lib/base-app-domain/UserRelation/Schema.d.ts +208 -194
  48. package/lib/base-app-domain/UserRelation/Storage.js +56 -56
  49. package/lib/base-app-domain/_SubQuery.d.ts +142 -112
  50. package/lib/base-app-domain/index.d.ts +4 -4
  51. package/lib/base-app-domain/index.js +7 -7
  52. package/lib/checkers/index.d.ts +5 -5
  53. package/lib/checkers/index.js +13 -14
  54. package/lib/compiler/entities.d.ts +2 -0
  55. package/lib/compiler/entities.js +7 -0
  56. package/lib/compiler/env.d.ts +13 -14
  57. package/lib/compiler/env.js +45 -50
  58. package/lib/compiler/localeBuilder.d.ts +27 -22
  59. package/lib/compiler/localeBuilder.js +184 -169
  60. package/lib/compiler/schemalBuilder.d.ts +27 -11
  61. package/lib/compiler/schemalBuilder.js +3569 -3787
  62. package/lib/entities/ActionAuth.d.ts +10 -12
  63. package/lib/entities/ActionAuth.js +31 -29
  64. package/lib/entities/I18n.d.ts +9 -9
  65. package/lib/entities/I18n.js +36 -37
  66. package/lib/entities/Modi.js +49 -49
  67. package/lib/entities/ModiEntity.js +18 -18
  68. package/lib/entities/Oper.js +21 -21
  69. package/lib/entities/OperEntity.js +18 -18
  70. package/lib/entities/Path.d.ts +8 -0
  71. package/lib/entities/Path.js +35 -0
  72. package/lib/entities/Relation.d.ts +8 -8
  73. package/lib/entities/Relation.js +35 -35
  74. package/lib/entities/RelationAuth.d.ts +8 -8
  75. package/lib/entities/RelationAuth.js +34 -34
  76. package/lib/entities/User.js +31 -31
  77. package/lib/entities/UserEntityClaim.d.ts +13 -0
  78. package/lib/entities/UserEntityClaim.js +17 -0
  79. package/lib/entities/UserEntityGrant.d.ts +9 -8
  80. package/lib/entities/UserEntityGrant.js +15 -18
  81. package/lib/entities/UserRelation.d.ts +10 -10
  82. package/lib/entities/UserRelation.js +38 -38
  83. package/lib/index.d.ts +23 -0
  84. package/lib/index.js +37 -0
  85. package/lib/store/AsyncRowStore.d.ts +60 -58
  86. package/lib/store/AsyncRowStore.js +118 -190
  87. package/lib/store/CascadeStore.d.ts +104 -103
  88. package/lib/store/CascadeStore.js +1688 -2036
  89. package/lib/store/RelationAuth.d.ts +96 -103
  90. package/lib/store/RelationAuth.js +1336 -1492
  91. package/lib/store/SyncRowStore.d.ts +29 -29
  92. package/lib/store/SyncRowStore.js +50 -49
  93. package/lib/store/TriggerExecutor.d.ts +38 -31
  94. package/lib/store/TriggerExecutor.js +459 -532
  95. package/lib/store/actionAuth.d.ts +4 -4
  96. package/lib/store/actionAuth.js +25 -40
  97. package/lib/store/actionDef.d.ts +10 -10
  98. package/lib/store/actionDef.js +278 -353
  99. package/lib/store/checker.d.ts +26 -26
  100. package/lib/store/checker.js +487 -623
  101. package/lib/store/filter.d.ts +85 -123
  102. package/lib/store/filter.js +1651 -1761
  103. package/lib/store/modi.d.ts +13 -13
  104. package/lib/store/modi.js +254 -315
  105. package/lib/store/relation.d.ts +12 -12
  106. package/lib/store/relation.js +67 -67
  107. package/lib/timers/oper.d.ts +18 -18
  108. package/lib/timers/oper.js +57 -60
  109. package/lib/timers/vaccum.d.ts +20 -20
  110. package/lib/timers/vaccum.js +111 -176
  111. package/lib/triggers/index.d.ts +5 -5
  112. package/lib/triggers/index.js +8 -8
  113. package/lib/types/Action.d.ts +20 -20
  114. package/lib/types/AppLoader.d.ts +17 -11
  115. package/lib/types/AppLoader.js +10 -10
  116. package/lib/types/Aspect.d.ts +1 -3
  117. package/lib/types/Auth.d.ts +70 -74
  118. package/lib/types/Cluster.d.ts +5 -0
  119. package/lib/types/Cluster.js +2 -0
  120. package/lib/types/Connector.d.ts +38 -34
  121. package/lib/types/Connector.js +2 -9
  122. package/lib/types/DataType.d.ts +25 -24
  123. package/lib/types/DataType.js +6 -6
  124. package/lib/types/Demand.d.ts +88 -88
  125. package/lib/types/Demand.js +10 -10
  126. package/lib/types/Endpoint.d.ts +11 -11
  127. package/lib/types/Entity.d.ts +203 -198
  128. package/lib/types/Entity.js +15 -15
  129. package/lib/types/EntityDesc.d.ts +9 -8
  130. package/lib/types/EntityDesc.js +2 -2
  131. package/lib/types/Environment.d.ts +88 -57
  132. package/lib/types/Environment.js +2 -2
  133. package/lib/types/Exception.d.ts +147 -120
  134. package/lib/types/Exception.js +406 -406
  135. package/lib/types/Expression.d.ts +163 -163
  136. package/lib/types/Expression.js +397 -427
  137. package/lib/types/Geo.d.ts +18 -18
  138. package/lib/types/Locale.d.ts +25 -25
  139. package/lib/types/Logger.d.ts +6 -6
  140. package/lib/types/Polyfill.d.ts +24 -24
  141. package/lib/types/Port.d.ts +18 -18
  142. package/lib/types/RowStore.d.ts +18 -18
  143. package/lib/types/RowStore.js +33 -34
  144. package/lib/types/Storage.d.ts +58 -57
  145. package/lib/types/Style.d.ts +11 -11
  146. package/lib/types/Timer.d.ts +14 -14
  147. package/lib/types/Trigger.d.ts +124 -108
  148. package/lib/types/Trigger.js +58 -54
  149. package/lib/types/Watcher.d.ts +19 -19
  150. package/lib/types/index.d.ts +26 -24
  151. package/lib/types/index.js +29 -27
  152. package/lib/types/schema/DataTypes.d.ts +34 -34
  153. package/lib/utils/SimpleConnector.d.ts +64 -50
  154. package/lib/utils/SimpleConnector.js +206 -184
  155. package/lib/utils/assert.d.ts +5 -5
  156. package/lib/utils/assert.js +9 -9
  157. package/lib/utils/concurrent.d.ts +15 -15
  158. package/lib/utils/concurrent.js +63 -89
  159. package/lib/utils/date.js +18 -18
  160. package/lib/utils/{url.d.ts → domain.d.ts} +1 -1
  161. package/lib/utils/{url.js → domain.js} +11 -12
  162. package/lib/utils/geo.js +24 -24
  163. package/lib/utils/lodash.d.ts +24 -20
  164. package/lib/utils/lodash.js +46 -55
  165. package/lib/utils/mask.js +34 -35
  166. package/lib/utils/money.d.ts +6 -6
  167. package/lib/utils/money.js +51 -40
  168. package/lib/utils/projection.d.ts +4 -0
  169. package/lib/utils/projection.js +15 -0
  170. package/lib/utils/random/random.js +19 -24
  171. package/lib/utils/random/random.mp.js +14 -25
  172. package/lib/utils/random/random.native.d.ts +1 -0
  173. package/lib/utils/random/random.native.js +14 -0
  174. package/lib/utils/random/random.web.js +11 -17
  175. package/lib/utils/string.d.ts +28 -28
  176. package/lib/utils/string.js +69 -82
  177. package/lib/utils/url/index.d.ts +7 -0
  178. package/lib/utils/url/index.js +8 -0
  179. package/lib/utils/url/index.mp.d.ts +4 -0
  180. package/lib/utils/url/index.mp.js +8 -0
  181. package/lib/utils/url/index.native.d.ts +12 -0
  182. package/lib/utils/url/index.native.js +7 -0
  183. package/lib/utils/url/index.web.d.ts +12 -0
  184. package/lib/utils/url/index.web.js +7 -0
  185. package/lib/utils/uuid.d.ts +17 -17
  186. package/lib/utils/uuid.js +218 -257
  187. package/lib/utils/validator.d.ts +26 -25
  188. package/lib/utils/validator.js +131 -128
  189. package/lib/utils/version.js +21 -21
  190. package/package.json +51 -49
  191. package/src/entities/ActionAuth.ts +41 -41
  192. package/src/entities/I18n.ts +45 -46
  193. package/src/entities/Modi.ts +69 -69
  194. package/src/entities/ModiEntity.ts +26 -26
  195. package/src/entities/Oper.ts +32 -32
  196. package/src/entities/OperEntity.ts +27 -27
  197. package/src/entities/Path.ts +43 -0
  198. package/src/entities/Relation.ts +43 -43
  199. package/src/entities/RelationAuth.ts +44 -43
  200. package/src/entities/User.ts +48 -48
  201. package/src/entities/UserEntityClaim.ts +30 -0
  202. package/src/entities/UserEntityGrant.ts +24 -27
  203. package/src/entities/UserRelation.ts +50 -50
@@ -1,169 +1,184 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var assert_1 = tslib_1.__importDefault(require("assert"));
5
- var ts = tslib_1.__importStar(require("typescript"));
6
- var factory = ts.factory;
7
- var path_1 = require("path");
8
- var crypto_1 = require("crypto");
9
- var fs_1 = tslib_1.__importDefault(require("fs"));
10
- var env_1 = require("./env");
11
- var string_1 = require("../utils/string");
12
- /**
13
- * 将一个object展开编译为一棵语法树,只有string和object两种键值对象
14
- * @param data
15
- */
16
- function transferObjectToObjectLiteral(data) {
17
- return factory.createObjectLiteralExpression(Object.keys(data).map(function (k) {
18
- var type = typeof data[k];
19
- if (type === 'string') {
20
- return factory.createPropertyAssignment(factory.createStringLiteral(k), factory.createStringLiteral(data[k]));
21
- }
22
- (0, assert_1.default)(type === 'object');
23
- return factory.createPropertyAssignment(factory.createStringLiteral(k), transferObjectToObjectLiteral(data[k]));
24
- }), true);
25
- }
26
- /**
27
- * 这个类的作用是把项目和所有相关的模块下的locales编译成为src/data/i18n中的数据
28
- */
29
- var LocaleBuilder = /** @class */ (function () {
30
- function LocaleBuilder(asLib) {
31
- var pwd = process.cwd();
32
- this.pwd = pwd;
33
- this.asLib = !!asLib;
34
- var dependencyFile = (0, env_1.OAK_EXTERNAL_LIBS_FILEPATH)((0, path_1.join)(pwd, 'src'));
35
- if (fs_1.default.existsSync(dependencyFile)) {
36
- this.dependencies = require(dependencyFile);
37
- }
38
- else {
39
- this.dependencies = [];
40
- }
41
- this.locales = {};
42
- this.hash = (0, crypto_1.createHash)('md5');
43
- }
44
- /**
45
- * 将locales输出成为data/i18n.ts中的数据
46
- * 如果有Dependency需要引出来
47
- */
48
- LocaleBuilder.prototype.outputDataFile = function () {
49
- var _this = this;
50
- var statements = [
51
- factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, factory.createIdentifier("CreateOperationData"), factory.createIdentifier("I18n"))])), factory.createStringLiteral("../oak-app-domain/I18n/Schema"), undefined)
52
- ];
53
- if (this.dependencies) {
54
- this.dependencies.forEach(function (ele, idx) { return statements.push(factory.createImportDeclaration(undefined, undefined, factory.createImportClause(false, factory.createIdentifier("i18ns".concat(idx)), undefined), factory.createStringLiteral("".concat(ele, "/lib/data/i18n")), undefined)); });
55
- }
56
- statements.push(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier("i18ns"), undefined, factory.createArrayTypeNode(factory.createTypeReferenceNode(factory.createIdentifier("I18n"), undefined)), factory.createArrayLiteralExpression(Object.keys(this.locales).map(function (k) {
57
- var _a = tslib_1.__read(_this.locales[k], 4), module = _a[0], position = _a[1], language = _a[2], data = _a[3];
58
- // 用哈希计算来保证id唯一性
59
- var h = _this.hash.copy();
60
- h.update("".concat(k, "-").concat(language));
61
- var id = h.digest('hex');
62
- (0, assert_1.default)(id.length <= 36);
63
- return factory.createObjectLiteralExpression([
64
- factory.createPropertyAssignment(factory.createIdentifier("id"), factory.createStringLiteral(id)),
65
- factory.createPropertyAssignment(factory.createIdentifier("namespace"), factory.createStringLiteral(k)),
66
- factory.createPropertyAssignment(factory.createIdentifier("language"), factory.createStringLiteral(language)),
67
- factory.createPropertyAssignment(factory.createIdentifier("module"), factory.createStringLiteral(module)),
68
- factory.createPropertyAssignment(factory.createIdentifier("position"), factory.createStringLiteral(position)),
69
- factory.createPropertyAssignment(factory.createIdentifier("data"), transferObjectToObjectLiteral(data))
70
- ], true);
71
- }), true))], ts.NodeFlags.Const)));
72
- if (this.dependencies.length > 0) {
73
- statements.push(factory.createExportAssignment(undefined, undefined, undefined, factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("i18ns"), factory.createIdentifier("concat")), undefined, this.dependencies.map(function (ele, idx) { return factory.createIdentifier("i18ns".concat(idx)); }))));
74
- }
75
- else {
76
- statements.push(factory.createExportAssignment(undefined, undefined, undefined, factory.createIdentifier("i18ns")));
77
- }
78
- var printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });
79
- var result = printer.printList(ts.ListFormat.SourceFileStatements, factory.createNodeArray(statements), ts.createSourceFile("someFileName.ts", "", ts.ScriptTarget.Latest, false, ts.ScriptKind.TS));
80
- var filename = (0, path_1.join)(this.pwd, 'src', 'data', 'i18n.ts');
81
- var result2 = (0, string_1.unescapeUnicode)("// \u672C\u6587\u4EF6\u4E3A\u81EA\u52A8\u7F16\u8BD1\u4EA7\u751F\uFF0C\u8BF7\u52FF\u76F4\u63A5\u4FEE\u6539\n\n".concat(result));
82
- fs_1.default.writeFileSync(filename, result2, { flag: 'w' });
83
- };
84
- LocaleBuilder.prototype.parseFile = function (module, namespace, position, filename, filepath, watch) {
85
- var _this = this;
86
- var language = (filename.split('.')[0]).replace('_', '-'); // 历史原因,会命名成zh_CN.json
87
- var data = require(filepath);
88
- var ns = module ? "".concat(module, "-").concat(namespace) : (0, string_1.firstLetterLowerCase)(namespace);
89
- this.locales[ns] = [module, position.replace(/\\/g, '/'), language, data];
90
- if (watch) {
91
- fs_1.default.watch(filepath, function () {
92
- var data = require(filepath);
93
- _this.locales[ns] = [module, position.replace(/\\/g, '/'), language, data];
94
- _this.outputDataFile();
95
- });
96
- }
97
- };
98
- LocaleBuilder.prototype.traverse = function (module, nsPrefix, position, dirPath, inLocale, localeFolderName, watch) {
99
- var _this = this;
100
- var files = fs_1.default.readdirSync(dirPath);
101
- files.forEach(function (file) {
102
- var filepath = (0, path_1.join)(dirPath, file);
103
- var stat = fs_1.default.statSync(filepath);
104
- if (stat.isFile() && inLocale && file.endsWith('.json')) {
105
- _this.parseFile(module, nsPrefix, position, file, filepath, watch);
106
- }
107
- else if (stat.isDirectory() && !inLocale) {
108
- var nsPrefix2 = nsPrefix ? "".concat(nsPrefix, "-").concat(file) : file;
109
- var isLocaleFolder = file === localeFolderName;
110
- _this.traverse(module, isLocaleFolder ? nsPrefix : nsPrefix2, isLocaleFolder ? position : (0, path_1.join)(position, file), (0, path_1.join)(dirPath, file), isLocaleFolder, localeFolderName, watch);
111
- }
112
- });
113
- };
114
- LocaleBuilder.prototype.buildproject = function (root, src, watch) {
115
- var _this = this;
116
- var packageJson = (0, path_1.join)(root, 'package.json');
117
- var name = require(packageJson).name;
118
- var pagePath = (0, path_1.join)(src ? 'src' : 'lib', 'pages');
119
- this.traverse(name, 'p', pagePath, (0, path_1.join)(root, pagePath), false, 'locales', watch);
120
- var componentPath = (0, path_1.join)(src ? 'src' : 'lib', 'components');
121
- this.traverse(name, 'c', componentPath, (0, path_1.join)(root, componentPath), false, 'locales', watch);
122
- var localePath = (0, path_1.join)(root, src ? 'src' : 'lib', 'locales');
123
- if (fs_1.default.existsSync(localePath)) {
124
- var files = fs_1.default.readdirSync(localePath);
125
- files.forEach(function (file) {
126
- var filepath = (0, path_1.join)(localePath, file);
127
- var stat = fs_1.default.statSync(filepath);
128
- if (stat.isDirectory()) {
129
- _this.traverse(name, "l-".concat(file), (0, path_1.join)('locales', file), (0, path_1.join)(localePath, file), true, file, watch);
130
- }
131
- });
132
- }
133
- if (!this.asLib && src) {
134
- // 不是lib的话将oak-app-domain中的对象的locale也收集起来
135
- var domainPath = (0, path_1.join)(root, 'src', 'oak-app-domain');
136
- if (fs_1.default.existsSync(domainPath)) {
137
- this.traverse('', '', 'oak-app-domain', domainPath, false, 'locales', watch);
138
- }
139
- // 还有web和wechatMp的目录
140
- var webSrcPath = (0, path_1.join)('web', 'src');
141
- this.traverse(name, 'w', webSrcPath, (0, path_1.join)(root, webSrcPath), false, 'locales', watch);
142
- // 小程序可能有多于一个,按规范用wechatMp, wechatMp2这样命名
143
- var wechatMpSrcPath = (0, path_1.join)('wechatMp', 'src');
144
- this.traverse(name, 'wmp', wechatMpSrcPath, (0, path_1.join)(root, webSrcPath), false, 'locales', watch);
145
- var iter = 1;
146
- while (true) {
147
- var mpSrcPath = "".concat(wechatMpSrcPath).concat(iter);
148
- if (fs_1.default.existsSync((0, path_1.join)(root, mpSrcPath))) {
149
- this.traverse(name, "wmp".concat(iter), mpSrcPath, (0, path_1.join)(root, mpSrcPath), false, 'locales', watch);
150
- iter++;
151
- }
152
- else {
153
- break;
154
- }
155
- }
156
- }
157
- };
158
- LocaleBuilder.prototype.build = function (watch) {
159
- this.buildproject(this.pwd, true, watch);
160
- if (!this.asLib) {
161
- // 如果不是lib,把front里的数据也处理掉
162
- var fbPath = (0, path_1.join)(this.pwd, 'node_modules', 'oak-frontend-base');
163
- this.buildproject(fbPath, false, watch);
164
- }
165
- this.outputDataFile();
166
- };
167
- return LocaleBuilder;
168
- }());
169
- exports.default = LocaleBuilder;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const assert_1 = tslib_1.__importDefault(require("assert"));
5
+ const ts = tslib_1.__importStar(require("typescript"));
6
+ const { factory } = ts;
7
+ const path_1 = require("path");
8
+ const crypto_1 = require("crypto");
9
+ const fs_1 = tslib_1.__importDefault(require("fs"));
10
+ const env_1 = require("./env");
11
+ const string_1 = require("../utils/string");
12
+ /**
13
+ * 将一个object展开编译为一棵语法树,只有string和object两种键值对象
14
+ * @param data
15
+ */
16
+ function transferObjectToObjectLiteral(data) {
17
+ return factory.createObjectLiteralExpression(Object.keys(data).map((k) => {
18
+ const type = typeof data[k];
19
+ if (type === 'string') {
20
+ return factory.createPropertyAssignment(factory.createStringLiteral(k), factory.createStringLiteral(data[k]));
21
+ }
22
+ (0, assert_1.default)(type === 'object');
23
+ return factory.createPropertyAssignment(factory.createStringLiteral(k), transferObjectToObjectLiteral(data[k]));
24
+ }), true);
25
+ }
26
+ /**
27
+ * 这个类的作用是把项目和所有相关的模块下的locales编译成为src/data/i18n中的数据
28
+ */
29
+ class LocaleBuilder {
30
+ asLib;
31
+ dependencies;
32
+ pwd;
33
+ locales; // key: namespace, value: [module, position, language, data]
34
+ hash;
35
+ constructor(asLib) {
36
+ const pwd = process.cwd();
37
+ this.pwd = pwd;
38
+ this.asLib = !!asLib;
39
+ const dependencyFile = (0, env_1.OAK_EXTERNAL_LIBS_FILEPATH)((0, path_1.join)(pwd, 'src'));
40
+ if (fs_1.default.existsSync(dependencyFile)) {
41
+ this.dependencies = require(dependencyFile);
42
+ }
43
+ else {
44
+ this.dependencies = [];
45
+ }
46
+ this.locales = {};
47
+ this.hash = (0, crypto_1.createHash)('md5');
48
+ }
49
+ /**
50
+ * 将locales输出成为data/i18n.ts中的数据
51
+ * 如果有Dependency需要引出来
52
+ */
53
+ outputDataFile() {
54
+ const statements = [
55
+ factory.createImportDeclaration(undefined, factory.createImportClause(false, undefined, factory.createNamedImports([factory.createImportSpecifier(false, factory.createIdentifier("CreateOperationData"), factory.createIdentifier("I18n"))])), factory.createStringLiteral("../oak-app-domain/I18n/Schema"), undefined)
56
+ ];
57
+ if (this.dependencies) {
58
+ this.dependencies.forEach((ele, idx) => statements.push(factory.createImportDeclaration(undefined, factory.createImportClause(false, factory.createIdentifier(`i18ns${idx}`), undefined), factory.createStringLiteral(`${ele}/lib/data/i18n`), undefined)));
59
+ }
60
+ statements.push(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier("i18ns"), undefined, factory.createArrayTypeNode(factory.createTypeReferenceNode(factory.createIdentifier("I18n"), undefined)), factory.createArrayLiteralExpression(Object.keys(this.locales).map((k) => {
61
+ const [module, position, language, data] = this.locales[k];
62
+ // 用哈希计算来保证id唯一性
63
+ const h = this.hash.copy();
64
+ h.update(`${k}-${language}`);
65
+ const id = h.digest('hex');
66
+ (0, assert_1.default)(id.length <= 36);
67
+ return factory.createObjectLiteralExpression([
68
+ factory.createPropertyAssignment(factory.createIdentifier("id"), factory.createStringLiteral(id)),
69
+ factory.createPropertyAssignment(factory.createIdentifier("namespace"), factory.createStringLiteral(k)),
70
+ factory.createPropertyAssignment(factory.createIdentifier("language"), factory.createStringLiteral(language)),
71
+ factory.createPropertyAssignment(factory.createIdentifier("module"), factory.createStringLiteral(module)),
72
+ factory.createPropertyAssignment(factory.createIdentifier("position"), factory.createStringLiteral(position)),
73
+ factory.createPropertyAssignment(factory.createIdentifier("data"), transferObjectToObjectLiteral(data))
74
+ ], true);
75
+ }), true))], ts.NodeFlags.Const)));
76
+ if (this.dependencies.length > 0) {
77
+ statements.push(factory.createExportAssignment(undefined, undefined, factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("i18ns"), factory.createIdentifier("concat")), undefined, this.dependencies.map((ele, idx) => factory.createIdentifier(`i18ns${idx}`)))));
78
+ }
79
+ else {
80
+ statements.push(factory.createExportAssignment(undefined, undefined, factory.createIdentifier("i18ns")));
81
+ }
82
+ const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });
83
+ const result = printer.printList(ts.ListFormat.SourceFileStatements, factory.createNodeArray(statements), ts.createSourceFile("someFileName.ts", "", ts.ScriptTarget.Latest, false, ts.ScriptKind.TS));
84
+ const filename = (0, path_1.join)(this.pwd, 'src', 'data', 'i18n.ts');
85
+ const result2 = (0, string_1.unescapeUnicode)(`// 本文件为自动编译产生,请勿直接修改\n\n${result}`);
86
+ fs_1.default.writeFileSync(filename, result2, { flag: 'w' });
87
+ }
88
+ /**
89
+ * 这里不能直接用require, webpack貌似有缓存
90
+ * @param filepath
91
+ */
92
+ readLocaleFileContent(filepath) {
93
+ (0, assert_1.default)(filepath.endsWith('.json'));
94
+ const content = fs_1.default.readFileSync(filepath, {
95
+ encoding: 'utf-8',
96
+ });
97
+ return JSON.parse(content);
98
+ }
99
+ parseFile(module, namespace, position, filename, filepath, watch) {
100
+ const language = (filename.split('.')[0]).replace('_', '-'); // 历史原因,会命名成zh_CN.json
101
+ const data = this.readLocaleFileContent(filepath);
102
+ const ns = module ? `${module}-${namespace}` : (0, string_1.firstLetterLowerCase)(namespace);
103
+ this.locales[ns] = [module, position.replace(/\\/g, '/'), language, data];
104
+ if (watch) {
105
+ fs_1.default.watch(filepath, () => {
106
+ const data = this.readLocaleFileContent(filepath);
107
+ this.locales[ns] = [module, position.replace(/\\/g, '/'), language, data];
108
+ this.outputDataFile();
109
+ });
110
+ }
111
+ }
112
+ traverse(module, nsPrefix, position, dirPath, inLocale, localeFolderName, watch) {
113
+ const files = fs_1.default.readdirSync(dirPath);
114
+ files.forEach((file) => {
115
+ const filepath = (0, path_1.join)(dirPath, file);
116
+ const stat = fs_1.default.statSync(filepath);
117
+ if (stat.isFile() && inLocale && file.endsWith('.json')) {
118
+ this.parseFile(module, nsPrefix, position, file, filepath, watch);
119
+ }
120
+ else if (stat.isDirectory() && !inLocale) {
121
+ const nsPrefix2 = nsPrefix ? `${nsPrefix}-${file}` : file;
122
+ const isLocaleFolder = file === localeFolderName;
123
+ this.traverse(module, isLocaleFolder ? nsPrefix : nsPrefix2, isLocaleFolder ? position : (0, path_1.join)(position, file), (0, path_1.join)(dirPath, file), isLocaleFolder, localeFolderName, watch);
124
+ }
125
+ });
126
+ }
127
+ buildproject(root, src, watch) {
128
+ const packageJson = (0, path_1.join)(root, 'package.json');
129
+ const { name } = require(packageJson);
130
+ const pagePath = (0, path_1.join)(src ? 'src' : 'lib', 'pages');
131
+ if (fs_1.default.existsSync(pagePath)) {
132
+ this.traverse(name, 'p', pagePath, (0, path_1.join)(root, pagePath), false, 'locales', watch);
133
+ }
134
+ const componentPath = (0, path_1.join)(src ? 'src' : 'lib', 'components');
135
+ if (fs_1.default.existsSync(componentPath)) {
136
+ this.traverse(name, 'c', componentPath, (0, path_1.join)(root, componentPath), false, 'locales', watch);
137
+ }
138
+ const localePath = (0, path_1.join)(root, src ? 'src' : 'lib', 'locales');
139
+ if (fs_1.default.existsSync(localePath)) {
140
+ const files = fs_1.default.readdirSync(localePath);
141
+ files.forEach((file) => {
142
+ const filepath = (0, path_1.join)(localePath, file);
143
+ const stat = fs_1.default.statSync(filepath);
144
+ if (stat.isDirectory()) {
145
+ this.traverse(name, `l-${file}`, (0, path_1.join)('locales', file), (0, path_1.join)(localePath, file), true, file, watch);
146
+ }
147
+ });
148
+ }
149
+ if (!this.asLib && src) {
150
+ // 不是lib的话将oak-app-domain中的对象的locale也收集起来
151
+ const domainPath = (0, path_1.join)(root, 'src', 'oak-app-domain');
152
+ if (fs_1.default.existsSync(domainPath)) {
153
+ this.traverse('', '', 'oak-app-domain', domainPath, false, 'locales', watch);
154
+ }
155
+ // 还有web和wechatMp的目录
156
+ const webSrcPath = (0, path_1.join)('web', 'src');
157
+ this.traverse(name, 'w', webSrcPath, (0, path_1.join)(root, webSrcPath), false, 'locales', watch);
158
+ // 小程序可能有多于一个,按规范用wechatMp, wechatMp2这样命名
159
+ const wechatMpSrcPath = (0, path_1.join)('wechatMp', 'src');
160
+ this.traverse(name, 'wmp', wechatMpSrcPath, (0, path_1.join)(root, webSrcPath), false, 'locales', watch);
161
+ let iter = 1;
162
+ while (true) {
163
+ const mpSrcPath = `${wechatMpSrcPath}${iter}`;
164
+ if (fs_1.default.existsSync((0, path_1.join)(root, mpSrcPath))) {
165
+ this.traverse(name, `wmp${iter}`, mpSrcPath, (0, path_1.join)(root, mpSrcPath), false, 'locales', watch);
166
+ iter++;
167
+ }
168
+ else {
169
+ break;
170
+ }
171
+ }
172
+ }
173
+ }
174
+ build(watch) {
175
+ this.buildproject(this.pwd, true, watch);
176
+ if (!this.asLib) {
177
+ // 如果不是lib,把front里的数据也处理掉
178
+ const fbPath = (0, path_1.join)(this.pwd, 'node_modules', 'oak-frontend-base');
179
+ this.buildproject(fbPath, false, watch);
180
+ }
181
+ this.outputDataFile();
182
+ }
183
+ }
184
+ exports.default = LocaleBuilder;
@@ -1,11 +1,27 @@
1
- export declare function registerIgnoredForeignKeyMap(map: Record<string, string[]>): void;
2
- export declare function registerFreeEntities(selectFreeEntities?: string[], createFreeEntities?: string[], updateFreeEntities?: string[]): void;
3
- export declare function registerIgnoredRelationPathMap(map: Record<string, string[]>): void;
4
- /**
5
- * 很多路径虽然最后指向同一对象,但不能封掉,封了会导致查询的时候找不到对应的路径path
6
- * @param map
7
- */
8
- export declare function registerFixedDestinationPathMap(map: Record<string, string[]>): void;
9
- export declare function registerDeducedRelationMap(map: Record<string, string>): void;
10
- export declare function analyzeEntities(inputDir: string, relativePath?: string): void;
11
- export declare function buildSchema(outputDir: string): void;
1
+ /**
2
+ * 此函数不再使用
3
+ * @param map
4
+ */
5
+ export declare function registerIgnoredForeignKeyMap(map: Record<string, string[]>): void;
6
+ /**
7
+ * 此函数不再使用
8
+ * @param map
9
+ */
10
+ export declare function registerFreeEntities(selectFreeEntities?: string[], createFreeEntities?: string[], updateFreeEntities?: string[]): void;
11
+ /**
12
+ * 此函数不再使用
13
+ * @param map
14
+ */
15
+ export declare function registerIgnoredRelationPathMap(map: Record<string, string[]>): void;
16
+ /**
17
+ * 很多路径虽然最后指向同一对象,但不能封掉,封了会导致查询的时候找不到对应的路径path
18
+ * @param map
19
+ */
20
+ export declare function registerFixedDestinationPathMap(map: Record<string, string[]>): void;
21
+ /**
22
+ * 此函数不再使用
23
+ * @param map
24
+ */
25
+ export declare function registerDeducedRelationMap(map: Record<string, string>): void;
26
+ export declare function analyzeEntities(inputDir: string, relativePath?: string): void;
27
+ export declare function buildSchema(outputDir: string): void;