typespeed 2.4.11 → 2.5.1

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 (90) hide show
  1. package/CHANGELOG.md +8 -2
  2. package/dist/bind.decorator.js +50 -0
  3. package/dist/core.decorator.js +113 -26
  4. package/dist/database.decorator.js +122 -16
  5. package/dist/decorator-utils.js +42 -0
  6. package/dist/default/rabbitmq.class.js +18 -1
  7. package/dist/default/redis.class.js +14 -1
  8. package/dist/default/socket-io.class.js +53 -4
  9. package/dist/route.decorator.js +175 -10
  10. package/dist/typespeed.d.ts +35 -31
  11. package/dist/typespeed.js +31 -3
  12. package/package.json +6 -2
  13. package/.github/workflows/test.yml +0 -50
  14. package/app/nodemon.json +0 -5
  15. package/app/package.json +0 -17
  16. package/app/src/aop-test.class.ts +0 -29
  17. package/app/src/config-development.json +0 -26
  18. package/app/src/config-production.json +0 -15
  19. package/app/src/config.json +0 -50
  20. package/app/src/custom-log.class.ts +0 -33
  21. package/app/src/entities/mutil-users.class.ts +0 -5
  22. package/app/src/entities/user-dto.class.ts +0 -3
  23. package/app/src/first-page.class.ts +0 -46
  24. package/app/src/jwt-authentication.class.ts +0 -30
  25. package/app/src/main.ts +0 -24
  26. package/app/src/second-page.class.ts +0 -43
  27. package/app/src/test-database.class.ts +0 -81
  28. package/app/src/test-log.class.ts +0 -11
  29. package/app/src/test-mq.class.ts +0 -21
  30. package/app/src/test-orm.class.ts +0 -63
  31. package/app/src/test-redis.class.ts +0 -45
  32. package/app/src/test-request.class.ts +0 -37
  33. package/app/src/test-socket.class.ts +0 -56
  34. package/app/src/user-model.class.ts +0 -50
  35. package/app/src/views/index.html +0 -1
  36. package/app/src/views/socket.html +0 -23
  37. package/app/src/views/upload.html +0 -14
  38. package/app/static/favicon.ico +0 -0
  39. package/app/static/k.jpg +0 -0
  40. package/app/tsconfig.json +0 -20
  41. package/introduction/decorator/example-import.class.ts +0 -6
  42. package/introduction/decorator/main-app.ts +0 -6
  43. package/introduction/decorator/main-decorator.ts +0 -108
  44. package/introduction/decorator/main-import.ts +0 -1
  45. package/introduction/decorator/main-reflect.ts +0 -25
  46. package/introduction/tsconfig.json +0 -20
  47. package/introduction/web-services/db-init.ts +0 -39
  48. package/introduction/web-services/db-singleton.ts +0 -59
  49. package/introduction/web-services/http-if.ts +0 -10
  50. package/introduction/web-services/http-init.ts +0 -6
  51. package/introduction/web-services/http-router.ts +0 -28
  52. package/src/core.decorator.ts +0 -98
  53. package/src/database.decorator.ts +0 -342
  54. package/src/default/default-authentication.class.ts +0 -10
  55. package/src/default/express-server.class.ts +0 -150
  56. package/src/default/log-default.class.ts +0 -9
  57. package/src/default/node-cache.class.ts +0 -40
  58. package/src/default/pages/404.html +0 -226
  59. package/src/default/pages/500.html +0 -713
  60. package/src/default/rabbitmq.class.ts +0 -61
  61. package/src/default/read-write-db.class.ts +0 -53
  62. package/src/default/redis.class.ts +0 -79
  63. package/src/default/socket-io.class.ts +0 -81
  64. package/src/factory/authentication-factory.class.ts +0 -9
  65. package/src/factory/cache-factory.class.ts +0 -7
  66. package/src/factory/data-source-factory.class.ts +0 -4
  67. package/src/factory/log-factory.class.ts +0 -8
  68. package/src/factory/server-factory.class.ts +0 -6
  69. package/src/route.decorator.ts +0 -175
  70. package/src/scaffold/command.ts +0 -40
  71. package/src/scaffold/templates/front-page.class.ts.tpl +0 -12
  72. package/src/scaffold/templates/main.ts.tpl +0 -13
  73. package/src/scaffold/templates/nodemon.json.tpl +0 -7
  74. package/src/scaffold/templates/package.json.tpl +0 -16
  75. package/src/scaffold/templates/tsconfig.json.tpl +0 -17
  76. package/src/typespeed.d.ts +0 -399
  77. package/src/typespeed.ts +0 -110
  78. package/test/database.test.ts +0 -76
  79. package/test/first-page.test.ts +0 -42
  80. package/test/hooks.ts +0 -13
  81. package/test/mq.test.ts +0 -17
  82. package/test/orm.test.ts +0 -66
  83. package/test/redis.test.ts +0 -48
  84. package/test/request.test.ts +0 -51
  85. package/test/second-page.test.ts +0 -50
  86. package/test/socket.test.ts +0 -60
  87. package/test-env/docker-compose.test.yml +0 -31
  88. package/test-env/mysql-init/init.sql +0 -8
  89. package/test-env//346/234/254/345/234/260Docker/346/265/213/350/257/225/346/226/271/346/241/210.md +0 -69
  90. package/tsconfig.json +0 -25
package/app/tsconfig.json DELETED
@@ -1,20 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "module": "CommonJS",
4
- "declaration": true,
5
- "emitDecoratorMetadata": true,
6
- "experimentalDecorators": true,
7
- "allowSyntheticDefaultImports": true,
8
- "forceConsistentCasingInFileNames": true,
9
- "target": "ES2017",
10
- "sourceMap": true,
11
- "outDir": "./dist",
12
- "baseUrl": "./",
13
- "typeRoots": [
14
- "node_modules/@types"
15
- ],
16
- },
17
- "include": [
18
- "./src/**/*.ts"
19
- ]
20
- }
@@ -1,6 +0,0 @@
1
- @app
2
- export default class ExampleImport {}
3
-
4
- function app(target: any) {
5
- console.log("import 载入 ExampleImport 类的 @app 类装饰器。");
6
- }
@@ -1,6 +0,0 @@
1
- @app
2
- class MainApp {}
3
-
4
- function app(target: any) {
5
- console.log("执行 @app 类装饰器");
6
- }
@@ -1,108 +0,0 @@
1
- import "reflect-metadata";
2
-
3
- @atClassWithArgs(1, 2, 3)
4
- class SecondClass {}
5
-
6
- @atClass
7
- export default class FirstClass {
8
-
9
- @atPropertyWithArgs("Li", "Mei")
10
- private name: string;
11
-
12
- @atProperty
13
- private age: number;
14
-
15
- @atAccessor
16
- get newname(): string {
17
- return this.name;
18
- }
19
-
20
- @atMethod
21
- changeName(name: string): SecondClass {
22
- this.name = name;
23
- return new SecondClass();
24
- }
25
-
26
- @atMethodWithArgs("New", "Type")
27
- change(name: string, @atParameter age: number): void {
28
- this.age = age;
29
- this.name = name;
30
- }
31
-
32
- getName(): string {
33
- return this.name;
34
- }
35
- }
36
-
37
- const obj = new FirstClass();
38
-
39
- console.log("FirstClass对象调用getName()取得装饰器赋值:", obj.getName());
40
-
41
- // 类装饰器
42
- function atClass(target: any) {
43
- console.log("类装饰器,类名是:", target.name);
44
- }
45
-
46
- // 类装饰器,带参数
47
- function atClassWithArgs(...args: any[]) {
48
- return function (target: any) {
49
- console.log("类装饰器有参数,参数值:", args.join(","));
50
- }
51
- }
52
-
53
- // 方法装饰器
54
- function atMethod(target: any, propertyKey: string) {
55
- const returnType: any = Reflect.getMetadata("design:returntype", target, propertyKey);
56
- console.log("方法装饰器,获得返回类型:", returnType.name);
57
- }
58
-
59
- // 方法装饰器,带参数
60
- function atMethodWithArgs(...args: any[]) {
61
- return function (target: any, propertyKey: string) {
62
- console.log("方法装饰器有参数,参数值:", args.join(","));
63
- }
64
- }
65
-
66
- // 成员变量装饰器
67
- function atProperty(target: any, propertyKey: string) {
68
- const propertyType: any = Reflect.getMetadata("design:type", target, propertyKey);
69
- console.log("变量装饰器,获得变量类型:", propertyType.name);
70
- }
71
-
72
- // 成员变量装饰器,带参数
73
- function atPropertyWithArgs(...args: any[]) {
74
- return function (target: any, propertyKey: string) {
75
- console.log("变量装饰器有参数,参数值:", args.join(","));
76
- Object.defineProperty(target, propertyKey, {
77
- get: () => {
78
- return args;
79
- }
80
- });
81
- }
82
- }
83
-
84
- // 访问器装饰器
85
- function atAccessor(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
86
- const returnType: any = Reflect.getMetadata("design:type", target, propertyKey);
87
- console.log("访问器装饰器,访问器类型是:", returnType, ",值是:", target[propertyKey]);
88
- }
89
-
90
- // 访问器装饰器,带参数
91
- function atAccessorWithArgs(...args: any[]) {
92
- return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
93
- console.log("访问器装饰器,参数值:", args.join(","));
94
- }
95
- }
96
-
97
- // 参数装饰器
98
- function atParameter(target: any, propertyKey: string, parameterIndex: number) {
99
- const parameterType: any = Reflect.getMetadata("design:paramtypes", target, propertyKey);
100
- console.log("参数装饰器,参数位置在:", parameterIndex, "参数类型是:", parameterType[parameterIndex].name);
101
- }
102
-
103
- // 参数装饰器,带参数
104
- function atParameterWithArgs(...args: any[]) {
105
- return function (target: any, propertyKey: string, parameterIndex: number) {
106
- console.log("参数装饰器有参数,参数值:", args.join(","));
107
- }
108
- }
@@ -1 +0,0 @@
1
- import("./example-import.class");
@@ -1,25 +0,0 @@
1
- import "reflect-metadata";
2
-
3
- class MainReflect {
4
- @injectAge(10)
5
- private age: number;
6
-
7
- @findReturn
8
- getAge(): Number {
9
- return this.age;
10
- }
11
- }
12
-
13
- const mainReflect = new MainReflect();
14
- console.log("获得Age值:", mainReflect.getAge());
15
-
16
- function injectAge(arg: Number) {
17
- return function (target: any, propertyKey: string) {
18
- Object.defineProperty(target, propertyKey, {get: () => {return arg;}});
19
- }
20
- }
21
-
22
- function findReturn(target: any, propertyKey: string) {
23
- const returnType: any = Reflect.getMetadata("design:returntype", target, propertyKey);
24
- console.log(target[propertyKey].name, "的返回类型是:", returnType.name);
25
- }
@@ -1,20 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "module": "CommonJS",
4
- "declaration": true,
5
- "emitDecoratorMetadata": true,
6
- "experimentalDecorators": true,
7
- "allowSyntheticDefaultImports": true,
8
- "forceConsistentCasingInFileNames": true,
9
- "target": "ES2017",
10
- "sourceMap": true,
11
- "outDir": "./dist",
12
- "baseUrl": "./",
13
- "typeRoots": [
14
- "node_modules/@types"
15
- ],
16
- },
17
- "include": [
18
- "./**/*.ts"
19
- ]
20
- }
@@ -1,39 +0,0 @@
1
- import { createServer, Server, IncomingMessage, ServerResponse } from "http";
2
- import { createConnection, Connection } from "mysql2";
3
-
4
- interface Page {
5
- page(response: ServerResponse): void;
6
- }
7
-
8
- class First implements Page {
9
- page(response: ServerResponse): void {
10
- response.end("I am first page.");
11
- }
12
- }
13
-
14
- class User implements Page {
15
- page(response: ServerResponse): void {
16
- const connection: Connection = createConnection({ host: 'localhost', user: 'root', "password": "qwer1234", database: 'test' });
17
- connection.query('SELECT * FROM `user`', (err, results) => {
18
- response.end(JSON.stringify(results));
19
- });
20
- }
21
- }
22
-
23
- class Root implements Page {
24
- page(response: ServerResponse): void {
25
- response.end("I am main page.");
26
- }
27
- }
28
-
29
- const router = new Map<string, Page>();
30
- router.set("/first", new First());
31
- router.set("/main", new Root());
32
- router.set("/user", new User());
33
- const server = createServer((request: IncomingMessage, response: ServerResponse) => {
34
- let page = router.get(request.url === undefined ? "" : request.url);
35
- if (page === undefined) {
36
- page = new Root();
37
- }
38
- page.page(response);
39
- }).listen(3000);
@@ -1,59 +0,0 @@
1
- import { createServer, Server, IncomingMessage, ServerResponse } from "http";
2
- import { createConnection, Connection } from "mysql2";
3
-
4
- interface Page {
5
- page(response: ServerResponse): void;
6
- }
7
-
8
- class First implements Page {
9
- page(response: ServerResponse): void {
10
- response.end("I am first page.");
11
- }
12
- }
13
-
14
- class User implements Page {
15
- page(response: ServerResponse): void {
16
- const database: Database = Database.getInstance();
17
- const databaseCopy: Database = Database.getInstance();
18
- console.log("两个对象是否一致:", database === databaseCopy)
19
- database.query('SELECT * FROM `user`', (err, results) => {
20
- response.end(JSON.stringify(results));
21
- });
22
- }
23
- }
24
-
25
- class Root implements Page {
26
- page(response: ServerResponse): void {
27
- response.end("I am main page.");
28
- }
29
- }
30
-
31
- class Database {
32
- private static instance: Database;
33
- private connection: Connection;
34
- private constructor(connection: Connection) {
35
- this.connection = connection;
36
- }
37
- static getInstance() {
38
- if (!Database.instance) {
39
- Database.instance = new Database(createConnection({ host: 'localhost', user: 'root', "password": "qwer1234", database: 'test' }));
40
- }
41
- return Database.instance;
42
- }
43
- query(sql: string, callback: (err: any, results: any) => void): void {
44
- this.connection.query('SELECT * FROM `user`', callback);
45
- }
46
- }
47
-
48
-
49
- const router = new Map<string, Page>();
50
- router.set("/first", new First());
51
- router.set("/main", new Root());
52
- router.set("/user", new User());
53
- const server = createServer((request: IncomingMessage, response: ServerResponse) => {
54
- let page = router.get(request.url === undefined ? "" : request.url);
55
- if (page === undefined) {
56
- page = new Root();
57
- }
58
- page.page(response);
59
- }).listen(3000);
@@ -1,10 +0,0 @@
1
- import { createServer, Server, IncomingMessage, ServerResponse } from "http";
2
-
3
- // 使用 IF 语句来判断请求的 URL
4
- const server = createServer((request: IncomingMessage, response: ServerResponse) => {
5
- if (request.url === "/first") {
6
- response.end("I am first page.");
7
- } else {
8
- response.end("I am main page.");
9
- }
10
- }).listen(3000);
@@ -1,6 +0,0 @@
1
- import {createServer, Server, IncomingMessage, ServerResponse} from "http";
2
-
3
- // 简单的 HTTP 服务
4
- const server = createServer((request: IncomingMessage, response: ServerResponse) => {
5
- response.end("Hello World");
6
- }).listen(3000);
@@ -1,28 +0,0 @@
1
- import { createServer, Server, IncomingMessage, ServerResponse } from "http";
2
-
3
- interface Page {
4
- page(response: ServerResponse): void;
5
- }
6
-
7
- class First implements Page {
8
- page(response: ServerResponse): void {
9
- response.end("I am first page.");
10
- }
11
- }
12
-
13
- class Root implements Page {
14
- page(response: ServerResponse): void {
15
- response.end("I am main page.");
16
- }
17
- }
18
-
19
- const router = new Map<string, Page>();
20
- router.set("/first", new First());
21
- router.set("/main", new Root());
22
- const server = createServer((request: IncomingMessage, response: ServerResponse) => {
23
- let page = router.get(request.url === undefined ? "" : request.url);
24
- if (page === undefined) {
25
- page = new Root();
26
- }
27
- page.page(response);
28
- }).listen(3000);
@@ -1,98 +0,0 @@
1
- import "reflect-metadata";
2
- import * as cron from "cron";
3
- import LogFactory from "./factory/log-factory.class";
4
-
5
- const resourceObjects = new Map<string, object>();
6
- const beanMapper: Map<string, any> = new Map<string, any>();
7
- const objectMapper: Map<string, any> = new Map<string, any>();
8
-
9
- function component(constructorFunction) {
10
- objectMapper.set(constructorFunction.name, new constructorFunction());
11
- }
12
-
13
- function getComponent(constructorFunction) {
14
- return objectMapper.get(constructorFunction.name);
15
- }
16
-
17
- function bean(target: any, propertyKey: string) {
18
- let returnType = Reflect.getMetadata("design:returntype", target, propertyKey);
19
- //const targetObject = new target.constructor();
20
- beanMapper.set(returnType.name, {
21
- "target": target, "propertyKey": propertyKey,
22
- "factory": target[propertyKey]()
23
- });
24
- }
25
-
26
- function getBean(mappingClass: Function): any {
27
- const bean = beanMapper.get(mappingClass.name);
28
- return bean["factory"];
29
- }
30
-
31
-
32
- function autoware(target: any, propertyKey: string): void {
33
- const type = Reflect.getMetadata("design:type", target, propertyKey);
34
- Object.defineProperty(target, propertyKey, {
35
- get: () => {
36
- const targetObject = beanMapper.get(type.name);
37
- if (targetObject === undefined) {
38
- const resourceKey = [target.constructor.name, propertyKey, type.name].toString();
39
- if (!resourceObjects[resourceKey]) {
40
- resourceObjects[resourceKey] = new type();
41
- }
42
- return resourceObjects[resourceKey];
43
- }
44
- return targetObject["factory"];
45
- }
46
- });
47
- }
48
-
49
- function resource(...args): any {
50
- return (target: any, propertyKey: string) => {
51
- const type = Reflect.getMetadata("design:type", target, propertyKey);
52
- Object.defineProperty(target, propertyKey, {
53
- get: () => {
54
- const resourceKey = [target.constructor.name, propertyKey, type.name].toString();
55
- if (!resourceObjects[resourceKey]) {
56
- resourceObjects[resourceKey] = new type(...args);
57
- }
58
- return resourceObjects[resourceKey];
59
- }
60
- });
61
- }
62
- }
63
-
64
- function log(message?: any, ...optionalParams: any[]) {
65
- const logObject = beanMapper.get(LogFactory.name);
66
- if (logObject) {
67
- logObject["factory"].log(message, ...optionalParams);
68
- } else {
69
- console.log(message, ...optionalParams);
70
- }
71
- }
72
-
73
- function logx(message) {
74
- message = JSON.stringify(message);
75
- const logObject = beanMapper.get(LogFactory.name);
76
- if (logObject) {
77
- logObject["factory"].log(message);
78
- } else {
79
- console.log(message);
80
- }
81
- }
82
-
83
- function error(message?: any, ...optionalParams: any[]) {
84
- const logObject = beanMapper.get(LogFactory.name);
85
- if (logObject) {
86
- logObject["factory"].error(message, ...optionalParams);
87
- } else {
88
- console.error(message, ...optionalParams);
89
- }
90
- }
91
-
92
- function schedule(cronTime: string | Date) {
93
- return (target: any, propertyKey: string) => {
94
- new cron.CronJob(cronTime, target[propertyKey]).start();
95
- }
96
- }
97
-
98
- export { component, bean, resource, log, logx, error, autoware, getBean, getComponent, schedule };