@fastcar/core 0.2.59 → 0.2.61
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/package.json +2 -4
- package/src/db.ts +1 -0
- package/src/model/WinstonLogger.ts +4 -3
- package/src/utils/ClassLoader.ts +1 -1
- package/src/utils/ValidationUtil.ts +10 -1
- package/target/FastCarApplication.js +692 -692
- package/target/annotation/Application.js +45 -45
- package/target/annotation/ExceptionMonitor.js +16 -16
- package/target/annotation/bind/AddRequireModule.js +21 -21
- package/target/annotation/bind/AliasInjection.js +23 -23
- package/target/annotation/bind/Autowired.js +13 -13
- package/target/annotation/bind/CallDependency.js +23 -23
- package/target/annotation/data/DBType.js +11 -11
- package/target/annotation/data/DS.js +54 -54
- package/target/annotation/data/DSIndex.js +9 -9
- package/target/annotation/data/Entity.js +10 -10
- package/target/annotation/data/Field.js +18 -18
- package/target/annotation/data/PrimaryKey.js +9 -9
- package/target/annotation/data/SqlSession.js +9 -9
- package/target/annotation/data/Table.js +35 -35
- package/target/annotation/data/Transactional.js +52 -52
- package/target/annotation/env/ApplicationSetting.js +25 -25
- package/target/annotation/env/BaseFilePath.js +14 -14
- package/target/annotation/env/BaseName.js +9 -9
- package/target/annotation/env/BasePath.js +14 -14
- package/target/annotation/env/ENV.js +10 -10
- package/target/annotation/env/ResourcePath.js +9 -9
- package/target/annotation/lifeCycle/AddLifeCycleItem.js +18 -18
- package/target/annotation/lifeCycle/ApplicationDestory.js +15 -15
- package/target/annotation/lifeCycle/ApplicationInit.js +15 -15
- package/target/annotation/lifeCycle/ApplicationRunner.js +7 -7
- package/target/annotation/lifeCycle/ApplicationStart.js +24 -24
- package/target/annotation/lifeCycle/ApplicationStop.js +20 -20
- package/target/annotation/property/Deprecate.js +19 -19
- package/target/annotation/property/NotImplemented.js +8 -8
- package/target/annotation/property/Override.js +7 -7
- package/target/annotation/property/Readonly.js +16 -16
- package/target/annotation/scan/ComponentInjection.js +21 -21
- package/target/annotation/scan/ComponentScan.js +9 -9
- package/target/annotation/scan/ComponentScanExclusion.js +25 -25
- package/target/annotation/scan/ComponentScanMust.js +25 -25
- package/target/annotation/scan/Hotter.js +8 -8
- package/target/annotation/stereotype/BeanName.js +11 -11
- package/target/annotation/stereotype/Component.js +8 -8
- package/target/annotation/stereotype/Configure.js +14 -14
- package/target/annotation/stereotype/Controller.js +9 -9
- package/target/annotation/stereotype/Injection.js +12 -12
- package/target/annotation/stereotype/Log.js +17 -17
- package/target/annotation/stereotype/Repository.js +9 -9
- package/target/annotation/stereotype/Service.js +9 -9
- package/target/annotation/valid/AddChildValid.js +56 -56
- package/target/annotation/valid/CustomType.js +11 -11
- package/target/annotation/valid/DefaultVal.js +10 -10
- package/target/annotation/valid/NotNull.js +8 -8
- package/target/annotation/valid/Rule.js +100 -100
- package/target/annotation/valid/Size.js +10 -10
- package/target/annotation/valid/Type.js +10 -10
- package/target/annotation/valid/ValidCustom.js +17 -17
- package/target/annotation/valid/ValidForm.js +133 -133
- package/target/annotation.js +108 -108
- package/target/config/ApplicationConfig.js +2 -2
- package/target/config/SysConfig.js +19 -19
- package/target/constant/AppStatusEnum.js +9 -9
- package/target/constant/BootPriority.js +11 -11
- package/target/constant/CommonConstant.js +18 -18
- package/target/constant/ComponentKind.js +11 -11
- package/target/constant/DataTypes.js +19 -19
- package/target/constant/FastCarMetaData.js +31 -31
- package/target/constant/LifeCycleModule.js +9 -9
- package/target/db.js +49 -48
- package/target/index.js +21 -21
- package/target/interface/ApplicationHook.js +2 -2
- package/target/interface/ApplicationInterface.js +2 -2
- package/target/interface/ApplicationRunnerService.js +2 -2
- package/target/interface/DataSourceManager.js +2 -2
- package/target/interface/Logger.js +5 -5
- package/target/model/BaseMapper.js +98 -98
- package/target/model/DataMap.js +87 -87
- package/target/model/FormRuleModel.js +2 -2
- package/target/model/ValidError.js +5 -5
- package/target/model/WinstonLogger.js +96 -95
- package/target/src/FastCarApplication.js +704 -0
- package/target/src/annotation/Application.js +45 -0
- package/target/src/annotation/ExceptionMonitor.js +16 -0
- package/target/src/annotation/bind/AddRequireModule.js +21 -0
- package/target/src/annotation/bind/AliasInjection.js +23 -0
- package/target/src/annotation/bind/Autowired.js +13 -0
- package/target/src/annotation/bind/CallDependency.js +23 -0
- package/target/src/annotation/data/DBType.js +11 -0
- package/target/src/annotation/data/DS.js +54 -0
- package/target/src/annotation/data/DSIndex.js +9 -0
- package/target/src/annotation/data/Entity.js +10 -0
- package/target/src/annotation/data/Field.js +18 -0
- package/target/src/annotation/data/PrimaryKey.js +9 -0
- package/target/src/annotation/data/SqlSession.js +9 -0
- package/target/src/annotation/data/Table.js +35 -0
- package/target/src/annotation/data/Transactional.js +52 -0
- package/target/src/annotation/env/ApplicationSetting.js +25 -0
- package/target/src/annotation/env/BaseFilePath.js +14 -0
- package/target/src/annotation/env/BaseName.js +9 -0
- package/target/src/annotation/env/BasePath.js +14 -0
- package/target/src/annotation/env/ENV.js +10 -0
- package/target/src/annotation/env/ResourcePath.js +9 -0
- package/target/src/annotation/lifeCycle/AddLifeCycleItem.js +18 -0
- package/target/src/annotation/lifeCycle/ApplicationDestory.js +15 -0
- package/target/src/annotation/lifeCycle/ApplicationInit.js +15 -0
- package/target/src/annotation/lifeCycle/ApplicationRunner.js +7 -0
- package/target/src/annotation/lifeCycle/ApplicationStart.js +24 -0
- package/target/src/annotation/lifeCycle/ApplicationStop.js +20 -0
- package/target/src/annotation/property/Deprecate.js +19 -0
- package/target/src/annotation/property/NotImplemented.js +8 -0
- package/target/src/annotation/property/Override.js +7 -0
- package/target/src/annotation/property/Readonly.js +16 -0
- package/target/src/annotation/scan/ComponentInjection.js +21 -0
- package/target/src/annotation/scan/ComponentScan.js +9 -0
- package/target/src/annotation/scan/ComponentScanExclusion.js +25 -0
- package/target/src/annotation/scan/ComponentScanMust.js +25 -0
- package/target/src/annotation/scan/Hotter.js +8 -0
- package/target/src/annotation/stereotype/BeanName.js +11 -0
- package/target/src/annotation/stereotype/Component.js +8 -0
- package/target/src/annotation/stereotype/Configure.js +14 -0
- package/target/src/annotation/stereotype/Controller.js +9 -0
- package/target/src/annotation/stereotype/Injection.js +12 -0
- package/target/src/annotation/stereotype/Log.js +22 -0
- package/target/src/annotation/stereotype/Repository.js +9 -0
- package/target/src/annotation/stereotype/Service.js +9 -0
- package/target/src/annotation/valid/AddChildValid.js +56 -0
- package/target/src/annotation/valid/CustomType.js +11 -0
- package/target/src/annotation/valid/DefaultVal.js +10 -0
- package/target/src/annotation/valid/NotNull.js +8 -0
- package/target/src/annotation/valid/Rule.js +100 -0
- package/target/src/annotation/valid/Size.js +10 -0
- package/target/src/annotation/valid/Type.js +10 -0
- package/target/src/annotation/valid/ValidCustom.js +17 -0
- package/target/src/annotation/valid/ValidForm.js +133 -0
- package/target/src/annotation.js +108 -0
- package/target/src/config/ApplicationConfig.js +2 -0
- package/target/src/config/SysConfig.js +19 -0
- package/target/src/constant/AppStatusEnum.js +9 -0
- package/target/src/constant/BootPriority.js +11 -0
- package/target/src/constant/CommonConstant.js +18 -0
- package/target/src/constant/ComponentKind.js +11 -0
- package/target/src/constant/DataTypes.js +19 -0
- package/target/src/constant/FastCarMetaData.js +31 -0
- package/target/src/constant/LifeCycleModule.js +9 -0
- package/target/src/db.js +49 -0
- package/target/src/index.js +21 -0
- package/target/src/interface/ApplicationHook.js +2 -0
- package/target/src/interface/ApplicationInterface.js +2 -0
- package/target/src/interface/ApplicationRunnerService.js +2 -0
- package/target/src/interface/DataSourceManager.js +2 -0
- package/target/src/interface/Logger.js +5 -0
- package/target/src/model/BaseMapper.js +103 -0
- package/target/src/model/DataMap.js +87 -0
- package/target/src/model/FormRuleModel.js +2 -0
- package/target/src/model/ValidError.js +5 -0
- package/target/src/model/WinstonLogger.js +97 -0
- package/target/src/type/ComponentDesc.js +2 -0
- package/target/src/type/DesignMeta.js +15 -0
- package/target/src/type/FileHotterDesc.js +2 -0
- package/target/src/type/MapperType.js +2 -0
- package/target/src/type/ProcessType.js +2 -0
- package/target/src/type/SqlError.js +5 -0
- package/target/src/type/WinstonLoggerType.js +9 -0
- package/target/src/utils/ClassLoader.js +65 -0
- package/target/src/utils/ClassUtils.js +35 -0
- package/target/src/utils/CryptoUtil.js +86 -0
- package/target/src/utils/DataFormat.js +88 -0
- package/target/src/utils/DateUtil.js +71 -0
- package/target/src/utils/FileUtil.js +153 -0
- package/target/src/utils/FormatStr.js +14 -0
- package/target/src/utils/IPUtils.js +34 -0
- package/target/src/utils/Id.js +9 -0
- package/target/src/utils/Mix.js +62 -0
- package/target/src/utils/ReflectUtil.js +22 -0
- package/target/src/utils/TypeUtil.js +53 -0
- package/target/src/utils/ValidationUtil.js +118 -0
- package/target/src/utils.js +25 -0
- package/target/test/example/simple/app-test.js +57 -0
- package/target/test/example/simple/app.js +116 -0
- package/target/test/example/simple/component/StartRunner.js +19 -0
- package/target/test/example/simple/component/StopRunner.js +23 -0
- package/target/test/example/simple/config/EnvConfig.js +16 -0
- package/target/test/example/simple/config/HelloConfig.js +16 -0
- package/target/test/example/simple/config/HotConfig.js +18 -0
- package/target/test/example/simple/controller/AliasController.js +17 -0
- package/target/test/example/simple/controller/HelloController.js +55 -0
- package/target/test/example/simple/controller/NotFoundController.js +36 -0
- package/target/test/example/simple/noclude/excludeApp.js +17 -0
- package/target/test/example/simple/service/CallService.js +24 -0
- package/target/test/example/simple/service/HelloService.js +18 -0
- package/target/test/example/simple/service/LogService.js +32 -0
- package/target/test/multi/app.js +29 -0
- package/target/test/multi/service/aService.js +33 -0
- package/target/test/multi/service/bService.js +35 -0
- package/target/test/multi/service/cService.js +40 -0
- package/target/test/unit/dataMap-test.js +35 -0
- package/target/test/unit/decorators-test.js +59 -0
- package/target/test/unit/ds-test.js +58 -0
- package/target/test/unit/reflectMetadata-test.js +27 -0
- package/target/test/unit/valid-test.js +99 -0
- package/target/test/unit/winston-test.js +15 -0
- package/target/type/ComponentDesc.js +2 -2
- package/target/type/DesignMeta.js +15 -15
- package/target/type/FileHotterDesc.js +2 -2
- package/target/type/MapperType.js +2 -2
- package/target/type/ProcessType.js +2 -2
- package/target/type/SqlError.js +5 -5
- package/target/type/WinstonLoggerType.js +9 -9
- package/target/utils/ClassLoader.js +65 -65
- package/target/utils/ClassUtils.js +35 -35
- package/target/utils/CryptoUtil.js +86 -86
- package/target/utils/DataFormat.js +88 -88
- package/target/utils/DateUtil.js +71 -71
- package/target/utils/FileUtil.js +153 -153
- package/target/utils/FormatStr.js +14 -14
- package/target/utils/IPUtils.js +34 -34
- package/target/utils/Id.js +9 -9
- package/target/utils/Mix.js +62 -62
- package/target/utils/ReflectUtil.js +22 -22
- package/target/utils/TypeUtil.js +53 -53
- package/target/utils/ValidationUtil.js +124 -118
- package/target/utils.js +25 -25
- package/test/unit/decorators-test.ts +3 -3
- package/test/unit/logs/sys.log +0 -24
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const annotation_1 = require("../../../src/annotation");
|
|
13
|
+
const Logger_1 = require("../../../src/interface/Logger");
|
|
14
|
+
const bService_1 = require("./bService");
|
|
15
|
+
let AService = class AService {
|
|
16
|
+
logger;
|
|
17
|
+
b;
|
|
18
|
+
sayHello() {
|
|
19
|
+
this.logger.debug("a---");
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, annotation_1.Log)(),
|
|
24
|
+
__metadata("design:type", Logger_1.default)
|
|
25
|
+
], AService.prototype, "logger", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
annotation_1.Autowired,
|
|
28
|
+
__metadata("design:type", bService_1.default)
|
|
29
|
+
], AService.prototype, "b", void 0);
|
|
30
|
+
AService = __decorate([
|
|
31
|
+
annotation_1.Service
|
|
32
|
+
], AService);
|
|
33
|
+
exports.default = AService;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const annotation_1 = require("../../../src/annotation");
|
|
13
|
+
const Logger_1 = require("../../../src/interface/Logger");
|
|
14
|
+
const aService_1 = require("./aService");
|
|
15
|
+
let BService = class BService {
|
|
16
|
+
a;
|
|
17
|
+
logger;
|
|
18
|
+
sayHello() {
|
|
19
|
+
// let aa = this.app.getComponentByTarget(AService);
|
|
20
|
+
// aa.sayHello();
|
|
21
|
+
this.a.sayHello();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
__decorate([
|
|
25
|
+
annotation_1.Autowired,
|
|
26
|
+
__metadata("design:type", aService_1.default)
|
|
27
|
+
], BService.prototype, "a", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, annotation_1.Log)(),
|
|
30
|
+
__metadata("design:type", Logger_1.default)
|
|
31
|
+
], BService.prototype, "logger", void 0);
|
|
32
|
+
BService = __decorate([
|
|
33
|
+
annotation_1.Service
|
|
34
|
+
], BService);
|
|
35
|
+
exports.default = BService;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const annotation_1 = require("../../../src/annotation");
|
|
13
|
+
const Logger_1 = require("../../../src/interface/Logger");
|
|
14
|
+
const bService_1 = require("./bService"); //如果a b颠倒则会出现 b调用a时无法找到依赖情况
|
|
15
|
+
const aService_1 = require("./aService");
|
|
16
|
+
let CService = class CService {
|
|
17
|
+
logger;
|
|
18
|
+
a;
|
|
19
|
+
b;
|
|
20
|
+
test() {
|
|
21
|
+
this.a.sayHello();
|
|
22
|
+
this.b.sayHello();
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, annotation_1.Log)(),
|
|
27
|
+
__metadata("design:type", Logger_1.default)
|
|
28
|
+
], CService.prototype, "logger", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
annotation_1.Autowired,
|
|
31
|
+
__metadata("design:type", aService_1.default)
|
|
32
|
+
], CService.prototype, "a", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
annotation_1.Autowired,
|
|
35
|
+
__metadata("design:type", bService_1.default)
|
|
36
|
+
], CService.prototype, "b", void 0);
|
|
37
|
+
CService = __decorate([
|
|
38
|
+
annotation_1.Service
|
|
39
|
+
], CService);
|
|
40
|
+
exports.default = CService;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const DataMap_1 = require("../../src/model/DataMap");
|
|
4
|
+
describe("数据集合测试", () => {
|
|
5
|
+
it("数据集合", () => {
|
|
6
|
+
let n = new DataMap_1.default();
|
|
7
|
+
n.set(1, {
|
|
8
|
+
uid: 1,
|
|
9
|
+
name: "小明",
|
|
10
|
+
});
|
|
11
|
+
n.set(2, {
|
|
12
|
+
uid: 2,
|
|
13
|
+
name: "小王",
|
|
14
|
+
desc: {
|
|
15
|
+
detail: "住在隔壁",
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
let xiaoming = n.get(1);
|
|
19
|
+
console.log(xiaoming?.name == "小明");
|
|
20
|
+
let oo = n.toObject();
|
|
21
|
+
console.log(oo[1]);
|
|
22
|
+
let searchList = n.findByAtts({ uid: 1 });
|
|
23
|
+
console.log(searchList);
|
|
24
|
+
//复合型查询
|
|
25
|
+
let searchList2 = n.findByAtts({ "desc.detail": "住在隔壁" });
|
|
26
|
+
console.log(searchList2);
|
|
27
|
+
let sortList = n.sort([
|
|
28
|
+
{
|
|
29
|
+
field: "uid",
|
|
30
|
+
order: true, //true为倒序
|
|
31
|
+
},
|
|
32
|
+
]);
|
|
33
|
+
console.log(sortList);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const Deprecate_1 = require("../../src/annotation/property/Deprecate");
|
|
13
|
+
const Readonly_1 = require("../../src/annotation/property/Readonly");
|
|
14
|
+
describe("装饰器测试", () => {
|
|
15
|
+
it("只读装饰器测试", () => {
|
|
16
|
+
class TestModel {
|
|
17
|
+
info;
|
|
18
|
+
setInfo(s) {
|
|
19
|
+
Reflect.defineProperty(this, "entree", {
|
|
20
|
+
value: s,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
__decorate([
|
|
25
|
+
Readonly_1.default,
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], TestModel.prototype, "info", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
Readonly_1.default,
|
|
30
|
+
__metadata("design:type", Function),
|
|
31
|
+
__metadata("design:paramtypes", [String]),
|
|
32
|
+
__metadata("design:returntype", void 0)
|
|
33
|
+
], TestModel.prototype, "setInfo", null);
|
|
34
|
+
var m = new TestModel();
|
|
35
|
+
m.setInfo("111");
|
|
36
|
+
m.setInfo = () => { };
|
|
37
|
+
});
|
|
38
|
+
it("弃用装饰器测试", () => {
|
|
39
|
+
let TestModel = class TestModel {
|
|
40
|
+
async hello() {
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
resolve("hello is Deprecate");
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, Deprecate_1.default)("hello is Deprecate"),
|
|
48
|
+
__metadata("design:type", Function),
|
|
49
|
+
__metadata("design:paramtypes", []),
|
|
50
|
+
__metadata("design:returntype", Promise)
|
|
51
|
+
], TestModel.prototype, "hello", null);
|
|
52
|
+
TestModel = __decorate([
|
|
53
|
+
(0, Deprecate_1.default)()
|
|
54
|
+
], TestModel);
|
|
55
|
+
new TestModel().hello().then((res) => {
|
|
56
|
+
console.log(res);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const DS_1 = require("../../src/annotation/data/DS");
|
|
16
|
+
const DSIndex_1 = require("../../src/annotation/data/DSIndex");
|
|
17
|
+
describe("数据源测试", () => {
|
|
18
|
+
it("数据源类加载", () => {
|
|
19
|
+
let A = class A {
|
|
20
|
+
test(zs) {
|
|
21
|
+
console.log(zs);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, DS_1.default)("bb"),
|
|
26
|
+
__param(0, DSIndex_1.default),
|
|
27
|
+
__metadata("design:type", Function),
|
|
28
|
+
__metadata("design:paramtypes", [String]),
|
|
29
|
+
__metadata("design:returntype", void 0)
|
|
30
|
+
], A.prototype, "test", null);
|
|
31
|
+
A = __decorate([
|
|
32
|
+
(0, DS_1.default)("aa")
|
|
33
|
+
], A);
|
|
34
|
+
let testA = new A();
|
|
35
|
+
testA.test();
|
|
36
|
+
});
|
|
37
|
+
it("数据源继承加载影响", () => {
|
|
38
|
+
class A {
|
|
39
|
+
test(zs) {
|
|
40
|
+
console.log(zs);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
__decorate([
|
|
44
|
+
__param(0, DSIndex_1.default),
|
|
45
|
+
__metadata("design:type", Function),
|
|
46
|
+
__metadata("design:paramtypes", [String]),
|
|
47
|
+
__metadata("design:returntype", void 0)
|
|
48
|
+
], A.prototype, "test", null);
|
|
49
|
+
let B = class B extends A {
|
|
50
|
+
test2() { }
|
|
51
|
+
};
|
|
52
|
+
B = __decorate([
|
|
53
|
+
(0, DS_1.default)("cc")
|
|
54
|
+
], B);
|
|
55
|
+
let testB = new B();
|
|
56
|
+
testB.test();
|
|
57
|
+
});
|
|
58
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
require("reflect-metadata");
|
|
13
|
+
class Test {
|
|
14
|
+
}
|
|
15
|
+
describe("装饰器元数据测试", () => {
|
|
16
|
+
it("元数据测试案例", () => {
|
|
17
|
+
class A {
|
|
18
|
+
hello;
|
|
19
|
+
}
|
|
20
|
+
__decorate([
|
|
21
|
+
Reflect.metadata(undefined, undefined),
|
|
22
|
+
__metadata("design:type", Test)
|
|
23
|
+
], A.prototype, "hello", void 0);
|
|
24
|
+
let s = Reflect.getMetadata("design:type", A.prototype, "hello");
|
|
25
|
+
console.log();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
require("reflect-metadata");
|
|
16
|
+
const ValidForm_1 = require("../../src/annotation/valid/ValidForm");
|
|
17
|
+
const NotNull_1 = require("../../src/annotation/valid/NotNull");
|
|
18
|
+
const Size_1 = require("../../src/annotation/valid/Size");
|
|
19
|
+
const Rule_1 = require("../../src/annotation/valid/Rule");
|
|
20
|
+
const utils_1 = require("../../src/utils");
|
|
21
|
+
describe("表单校验测试", () => {
|
|
22
|
+
it("表单单个测试", () => {
|
|
23
|
+
class A {
|
|
24
|
+
//简单类型
|
|
25
|
+
test(a) {
|
|
26
|
+
console.log(a);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
__decorate([
|
|
30
|
+
ValidForm_1.default,
|
|
31
|
+
__param(0, (0, Rule_1.Rule)()),
|
|
32
|
+
__param(0, NotNull_1.default),
|
|
33
|
+
__metadata("design:type", Function),
|
|
34
|
+
__metadata("design:paramtypes", [String]),
|
|
35
|
+
__metadata("design:returntype", void 0)
|
|
36
|
+
], A.prototype, "test", null);
|
|
37
|
+
let instance = new A();
|
|
38
|
+
instance.test("");
|
|
39
|
+
});
|
|
40
|
+
it("表单复合型测试", () => {
|
|
41
|
+
class A {
|
|
42
|
+
//简单类型
|
|
43
|
+
test(a, b) {
|
|
44
|
+
console.log(a, b);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
__decorate([
|
|
48
|
+
ValidForm_1.default,
|
|
49
|
+
__param(0, (0, Rule_1.Rule)({
|
|
50
|
+
a: { required: true },
|
|
51
|
+
})),
|
|
52
|
+
__param(1, (0, Rule_1.Rule)({
|
|
53
|
+
c: { required: true },
|
|
54
|
+
d: { type: "number", minSize: 1, maxSize: 10 },
|
|
55
|
+
})),
|
|
56
|
+
__metadata("design:type", Function),
|
|
57
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
58
|
+
__metadata("design:returntype", void 0)
|
|
59
|
+
], A.prototype, "test", null);
|
|
60
|
+
let instance = new A();
|
|
61
|
+
instance.test("a", { c: "c", d: 6 }); // 校验通过
|
|
62
|
+
instance.test("a", { c: "c", d: 13 }); //校验失败
|
|
63
|
+
});
|
|
64
|
+
it("表单类测试", () => {
|
|
65
|
+
class B {
|
|
66
|
+
c;
|
|
67
|
+
d;
|
|
68
|
+
}
|
|
69
|
+
__decorate([
|
|
70
|
+
NotNull_1.default,
|
|
71
|
+
__metadata("design:type", String)
|
|
72
|
+
], B.prototype, "c", void 0);
|
|
73
|
+
__decorate([
|
|
74
|
+
(0, Size_1.default)({ minSize: 1, maxSize: 10 }),
|
|
75
|
+
__metadata("design:type", Number)
|
|
76
|
+
], B.prototype, "d", void 0);
|
|
77
|
+
class A {
|
|
78
|
+
//简单类型
|
|
79
|
+
test(a, b) {
|
|
80
|
+
console.log(a, b);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
__decorate([
|
|
84
|
+
ValidForm_1.default,
|
|
85
|
+
__param(1, (0, Rule_1.Rule)()),
|
|
86
|
+
__param(1, NotNull_1.default),
|
|
87
|
+
__metadata("design:type", Function),
|
|
88
|
+
__metadata("design:paramtypes", [String, B]),
|
|
89
|
+
__metadata("design:returntype", void 0)
|
|
90
|
+
], A.prototype, "test", null);
|
|
91
|
+
let instance = new A();
|
|
92
|
+
instance.test("a", { c: "c", d: 13 }); //校验失败
|
|
93
|
+
});
|
|
94
|
+
it("测试map是否为空", () => {
|
|
95
|
+
let d = new Map();
|
|
96
|
+
d.set("hello", "world");
|
|
97
|
+
console.log(utils_1.ValidationUtil.isNotNull(d) == true);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const WinstonLogger_1 = require("../../src/model/WinstonLogger");
|
|
4
|
+
let factoryLogger = new WinstonLogger_1.default({
|
|
5
|
+
consoleLevel: "info",
|
|
6
|
+
fileLevel: "info",
|
|
7
|
+
rootPath: __dirname,
|
|
8
|
+
maxsize: 1024,
|
|
9
|
+
maxFiles: 5,
|
|
10
|
+
printConsole: true,
|
|
11
|
+
});
|
|
12
|
+
let sys = factoryLogger.addLogger("sys");
|
|
13
|
+
sys.info({ hello: "world" });
|
|
14
|
+
sys.info("1", "2", "3");
|
|
15
|
+
sys.error(new Error("error ~"));
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DesignMeta = void 0;
|
|
4
|
-
var DesignMeta;
|
|
5
|
-
(function (DesignMeta) {
|
|
6
|
-
DesignMeta["table"] = "db:table";
|
|
7
|
-
DesignMeta["field"] = "db:field";
|
|
8
|
-
DesignMeta["fieldMap"] = "db:fieldMap";
|
|
9
|
-
DesignMeta["dbType"] = "db:dbType";
|
|
10
|
-
DesignMeta["primaryKey"] = "db:primaryKey";
|
|
11
|
-
DesignMeta["entity"] = "db:entity";
|
|
12
|
-
DesignMeta["mapping"] = "db:mapping";
|
|
13
|
-
DesignMeta["dbFields"] = "db:fields";
|
|
14
|
-
DesignMeta["sqlSession"] = "SqlSession";
|
|
15
|
-
})(DesignMeta
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DesignMeta = void 0;
|
|
4
|
+
var DesignMeta;
|
|
5
|
+
(function (DesignMeta) {
|
|
6
|
+
DesignMeta["table"] = "db:table";
|
|
7
|
+
DesignMeta["field"] = "db:field";
|
|
8
|
+
DesignMeta["fieldMap"] = "db:fieldMap";
|
|
9
|
+
DesignMeta["dbType"] = "db:dbType";
|
|
10
|
+
DesignMeta["primaryKey"] = "db:primaryKey";
|
|
11
|
+
DesignMeta["entity"] = "db:entity";
|
|
12
|
+
DesignMeta["mapping"] = "db:mapping";
|
|
13
|
+
DesignMeta["dbFields"] = "db:fields";
|
|
14
|
+
DesignMeta["sqlSession"] = "SqlSession";
|
|
15
|
+
})(DesignMeta || (exports.DesignMeta = DesignMeta = {}));
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/target/type/SqlError.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class SqlError extends Error {
|
|
4
|
-
}
|
|
5
|
-
exports.default = SqlError;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class SqlError extends Error {
|
|
4
|
+
}
|
|
5
|
+
exports.default = SqlError;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ColorLevelType = void 0;
|
|
4
|
-
exports.ColorLevelType = {
|
|
5
|
-
info: [32, 39],
|
|
6
|
-
debug: [36, 39],
|
|
7
|
-
warn: [33, 39],
|
|
8
|
-
error: [91, 39], //red
|
|
9
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ColorLevelType = void 0;
|
|
4
|
+
exports.ColorLevelType = {
|
|
5
|
+
info: [32, 39], //green
|
|
6
|
+
debug: [36, 39], // cyan
|
|
7
|
+
warn: [33, 39], //yellow
|
|
8
|
+
error: [91, 39], //red
|
|
9
|
+
};
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const TypeUtil_1 = require("./TypeUtil");
|
|
4
|
-
const FileUtil_1 = require("./FileUtil");
|
|
5
|
-
const fs = require("fs");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
class ClassLoader {
|
|
8
|
-
/***
|
|
9
|
-
* @version 1.0 加载模块
|
|
10
|
-
* @version 1.1 新增是否强制重载模块
|
|
11
|
-
*
|
|
12
|
-
*/
|
|
13
|
-
static loadModule(filePath, force = false) {
|
|
14
|
-
//校验后缀名是否为js或者ts
|
|
15
|
-
if (!TypeUtil_1.default.isTSORJS(filePath)) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
//避免重复加载或者想要重新进行挂载
|
|
19
|
-
if (Reflect.has(require.cache, filePath)) {
|
|
20
|
-
if (force) {
|
|
21
|
-
Reflect.deleteProperty(require.cache, filePath);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
//可能不止一个方法
|
|
25
|
-
const modulesMap = new Map();
|
|
26
|
-
//进行方法加载
|
|
27
|
-
let moduleClass = require(filePath);
|
|
28
|
-
let keys = Object.keys(moduleClass);
|
|
29
|
-
let fileName = FileUtil_1.default.getFileName(filePath);
|
|
30
|
-
keys.forEach((key) => {
|
|
31
|
-
let instance = moduleClass[key];
|
|
32
|
-
if (TypeUtil_1.default.isFunction(instance)) {
|
|
33
|
-
modulesMap.set(instance.name, instance);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
if (TypeUtil_1.default.isObject(instance)) {
|
|
37
|
-
modulesMap.set(fileName, instance);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
return modulesMap;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* @version 1.0 监听某个文件或者文件夹
|
|
44
|
-
*/
|
|
45
|
-
static watchServices(fp, context, eventName = "reload") {
|
|
46
|
-
if (typeof context.emit != "function") {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
const currStats = fs.statSync(fp);
|
|
50
|
-
let fileFlag = currStats.isFile();
|
|
51
|
-
//添加热更方法
|
|
52
|
-
fs.watch(fp, function (event, filename) {
|
|
53
|
-
if (event === "change") {
|
|
54
|
-
if (!fileFlag) {
|
|
55
|
-
context.emit(eventName, path.join(fp, filename));
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
context.emit(eventName, fp);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
exports.default = ClassLoader;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const TypeUtil_1 = require("./TypeUtil");
|
|
4
|
+
const FileUtil_1 = require("./FileUtil");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
class ClassLoader {
|
|
8
|
+
/***
|
|
9
|
+
* @version 1.0 加载模块
|
|
10
|
+
* @version 1.1 新增是否强制重载模块
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
13
|
+
static loadModule(filePath, force = false) {
|
|
14
|
+
//校验后缀名是否为js或者ts
|
|
15
|
+
if (!TypeUtil_1.default.isTSORJS(filePath)) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
//避免重复加载或者想要重新进行挂载
|
|
19
|
+
if (Reflect.has(require.cache, filePath)) {
|
|
20
|
+
if (force) {
|
|
21
|
+
Reflect.deleteProperty(require.cache, filePath);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//可能不止一个方法
|
|
25
|
+
const modulesMap = new Map();
|
|
26
|
+
//进行方法加载
|
|
27
|
+
let moduleClass = require(filePath);
|
|
28
|
+
let keys = Object.keys(moduleClass);
|
|
29
|
+
let fileName = FileUtil_1.default.getFileName(filePath);
|
|
30
|
+
keys.forEach((key) => {
|
|
31
|
+
let instance = moduleClass[key];
|
|
32
|
+
if (TypeUtil_1.default.isFunction(instance)) {
|
|
33
|
+
modulesMap.set(instance.name, instance);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (TypeUtil_1.default.isObject(instance)) {
|
|
37
|
+
modulesMap.set(fileName, instance);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return modulesMap;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @version 1.0 监听某个文件或者文件夹
|
|
44
|
+
*/
|
|
45
|
+
static watchServices(fp, context, eventName = "reload") {
|
|
46
|
+
if (typeof context.emit != "function") {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
const currStats = fs.statSync(fp);
|
|
50
|
+
let fileFlag = currStats.isFile();
|
|
51
|
+
//添加热更方法
|
|
52
|
+
fs.watch(fp, function (event, filename) {
|
|
53
|
+
if (event === "change") {
|
|
54
|
+
if (!fileFlag && filename) {
|
|
55
|
+
context.emit(eventName, path.join(fp, filename));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
context.emit(eventName, fp);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.default = ClassLoader;
|