@jayfong/x-server 1.10.3 → 1.11.2

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 (73) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/lib/_cjs/cli/api_generator.js +295 -0
  3. package/lib/_cjs/cli/build_util.js +146 -0
  4. package/lib/_cjs/cli/cli.js +190 -0
  5. package/lib/_cjs/cli/deploy_util.js +61 -0
  6. package/lib/_cjs/cli/env_util.js +145 -0
  7. package/lib/_cjs/cli/register.js +8 -0
  8. package/lib/_cjs/cli/template_util.js +77 -0
  9. package/lib/_cjs/cli/templates/handlers.ts +3 -0
  10. package/lib/_cjs/cli/templates/hooks.ts +2 -0
  11. package/lib/_cjs/cli/templates/models.ts +22 -0
  12. package/lib/_cjs/cli/templates/package.json +3 -0
  13. package/lib/_cjs/cli/templates/routes.ts +26 -0
  14. package/lib/_cjs/cli/templates/tasks.ts +2 -0
  15. package/lib/_cjs/core/define_bus.js +28 -0
  16. package/lib/_cjs/core/define_handler.js +43 -0
  17. package/lib/_cjs/core/define_hook.js +10 -0
  18. package/lib/_cjs/core/define_server.js +12 -0
  19. package/lib/_cjs/core/define_task.js +30 -0
  20. package/lib/_cjs/core/handler.js +90 -0
  21. package/lib/_cjs/core/http_error.js +9 -0
  22. package/lib/_cjs/core/http_method.js +12 -0
  23. package/lib/_cjs/core/server.js +145 -0
  24. package/lib/_cjs/core/types.js +18 -0
  25. package/lib/_cjs/index.js +179 -0
  26. package/lib/_cjs/plugins/base.js +3 -0
  27. package/lib/_cjs/plugins/cors.js +44 -0
  28. package/lib/_cjs/plugins/file_parser.js +24 -0
  29. package/lib/_cjs/plugins/ws_parser.js +24 -0
  30. package/lib/_cjs/plugins/xml_parser.js +61 -0
  31. package/lib/_cjs/services/base.js +3 -0
  32. package/lib/_cjs/services/cache.js +231 -0
  33. package/lib/_cjs/services/captcha.js +45 -0
  34. package/lib/_cjs/services/dispose.js +33 -0
  35. package/lib/_cjs/services/jwt.js +59 -0
  36. package/lib/_cjs/services/redis.js +18 -0
  37. package/lib/_cjs/x.js +20 -0
  38. package/lib/cli/api_generator.js +269 -332
  39. package/lib/cli/build_util.d.ts +1 -0
  40. package/lib/cli/build_util.js +108 -130
  41. package/lib/cli/cli.js +161 -181
  42. package/lib/cli/deploy_util.js +37 -41
  43. package/lib/cli/env_util.js +112 -120
  44. package/lib/cli/register.js +5 -7
  45. package/lib/cli/template_util.js +47 -52
  46. package/lib/core/define_bus.js +22 -14
  47. package/lib/core/define_handler.js +31 -36
  48. package/lib/core/define_hook.js +4 -8
  49. package/lib/core/define_server.js +6 -10
  50. package/lib/core/define_task.js +20 -25
  51. package/lib/core/handler.js +78 -74
  52. package/lib/core/http_error.js +2 -8
  53. package/lib/core/http_method.js +7 -10
  54. package/lib/core/server.js +125 -139
  55. package/lib/core/types.js +11 -2
  56. package/lib/index.js +23 -39
  57. package/lib/plugins/base.js +1 -2
  58. package/lib/plugins/cors.js +30 -36
  59. package/lib/plugins/file_parser.d.ts +1 -1
  60. package/lib/plugins/file_parser.js +12 -16
  61. package/lib/plugins/ws_parser.d.ts +1 -1
  62. package/lib/plugins/ws_parser.js +12 -16
  63. package/lib/plugins/xml_parser.d.ts +1 -1
  64. package/lib/plugins/xml_parser.js +47 -43
  65. package/lib/services/base.js +1 -2
  66. package/lib/services/cache.js +213 -190
  67. package/lib/services/captcha.js +32 -33
  68. package/lib/services/dispose.d.ts +1 -1
  69. package/lib/services/dispose.js +22 -23
  70. package/lib/services/jwt.js +45 -48
  71. package/lib/services/redis.js +8 -14
  72. package/lib/x.js +12 -15
  73. package/package.json +6 -4
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ exports.__esModule = true;
6
+ exports.Server = void 0;
7
+
8
+ var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard"));
9
+
10
+ var _fastify = _interopRequireDefault(require("fastify"));
11
+
12
+ var _vtils = require("vtils");
13
+
14
+ var _http_method = require("./http_method");
15
+
16
+ var _x = require("../x");
17
+
18
+ class Server {
19
+ constructor(options) {
20
+ this.options = options;
21
+ this.fastify = void 0;
22
+ this.routes = [];
23
+ Server.options = options;
24
+ }
25
+
26
+ async start() {
27
+ this.applyServices();
28
+ await this.prepareFastify();
29
+ this.applyPlugins();
30
+ await this.prepareRoutes();
31
+ await this.applyRoutes();
32
+ await this.applyHooks();
33
+ await this.startFastify();
34
+ await this.startTasks();
35
+ await this.applyAutoClose();
36
+ }
37
+
38
+ async close() {
39
+ var _this$fastify;
40
+
41
+ await ((_this$fastify = this.fastify) == null ? void 0 : _this$fastify.close());
42
+ }
43
+
44
+ async prepareFastify() {
45
+ this.fastify = (0, _fastify.default)({
46
+ logger: process.env.NODE_ENV === 'development' ? {
47
+ prettyPrint: true
48
+ } : false
49
+ });
50
+ }
51
+
52
+ async startFastify() {
53
+ await this.fastify.listen({
54
+ host: this.options.host || '0.0.0.0',
55
+ port: this.options.port
56
+ });
57
+ }
58
+
59
+ async prepareRoutes() {
60
+ // @ts-ignore
61
+ const {
62
+ routes
63
+ } = await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(require('.x/routes')));
64
+ this.routes = routes;
65
+ }
66
+
67
+ async applyHooks() {
68
+ // @ts-ignore
69
+ await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(require('.x/hooks')));
70
+ }
71
+
72
+ applyServices() {
73
+ _x.x.register(...(this.options.services || []));
74
+ }
75
+
76
+ applyPlugins() {
77
+ const plugins = this.options.plugins || [];
78
+
79
+ for (const plugin of plugins) {
80
+ plugin.register(this.fastify);
81
+ }
82
+ }
83
+
84
+ async applyRoutes() {
85
+ for (const item of this.routes) {
86
+ const handlerOptions = item.handler.options;
87
+ const handlerMethod = handlerOptions.requestMethod || 'POST';
88
+ const isWS = handlerMethod === 'WS';
89
+ const serverMethod = isWS ? 'GET' : _http_method.HandlerMethodToHttpMethod[handlerMethod];
90
+ this.fastify.route({
91
+ method: serverMethod,
92
+ url: item.path,
93
+ websocket: isWS,
94
+ handler: async (req, res) => {
95
+ if (isWS) {
96
+ await item.handler.handle(undefined, {
97
+ headers: req.headers,
98
+ redirect: undefined,
99
+ ws: req
100
+ });
101
+ return;
102
+ }
103
+
104
+ let files = {};
105
+
106
+ if (handlerMethod === 'FILE') {
107
+ const part = await req.file();
108
+ files = Object.keys(part.fields).reduce((res, name) => {
109
+ ;
110
+ res[name] = (0, _vtils.castArray)(part.fields[name]).map(item => item.file ? item : item.value)[0];
111
+ return res;
112
+ }, {});
113
+ }
114
+
115
+ const data = await item.handler.handle({ // @ts-ignore
116
+ ...req.params,
117
+ // @ts-ignore
118
+ ...req.query,
119
+ // @ts-ignore
120
+ ...req.body,
121
+ ...files
122
+ }, {
123
+ headers: req.headers,
124
+ redirect: url => res.redirect(url),
125
+ ws: undefined
126
+ });
127
+ return data;
128
+ }
129
+ });
130
+ }
131
+ }
132
+
133
+ async startTasks() {
134
+ // @ts-ignore
135
+ await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(require('.x/tasks')));
136
+ }
137
+
138
+ async applyAutoClose() {
139
+ _x.x.dispose.add(() => this.close());
140
+ }
141
+
142
+ }
143
+
144
+ exports.Server = Server;
145
+ Server.options = {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.XTask = exports.XServer = exports.XHandler = void 0;
5
+ let XServer;
6
+ exports.XServer = XServer;
7
+
8
+ (function (_XServer) {})(XServer || (exports.XServer = XServer = {}));
9
+
10
+ let XHandler;
11
+ exports.XHandler = XHandler;
12
+
13
+ (function (_XHandler) {})(XHandler || (exports.XHandler = XHandler = {}));
14
+
15
+ let XTask;
16
+ exports.XTask = XTask;
17
+
18
+ (function (_XTask) {})(XTask || (exports.XTask = XTask = {}));
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _define_bus = require("./core/define_bus");
6
+
7
+ Object.keys(_define_bus).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _define_bus[key]) return;
10
+ exports[key] = _define_bus[key];
11
+ });
12
+
13
+ var _define_handler = require("./core/define_handler");
14
+
15
+ Object.keys(_define_handler).forEach(function (key) {
16
+ if (key === "default" || key === "__esModule") return;
17
+ if (key in exports && exports[key] === _define_handler[key]) return;
18
+ exports[key] = _define_handler[key];
19
+ });
20
+
21
+ var _define_hook = require("./core/define_hook");
22
+
23
+ Object.keys(_define_hook).forEach(function (key) {
24
+ if (key === "default" || key === "__esModule") return;
25
+ if (key in exports && exports[key] === _define_hook[key]) return;
26
+ exports[key] = _define_hook[key];
27
+ });
28
+
29
+ var _define_server = require("./core/define_server");
30
+
31
+ Object.keys(_define_server).forEach(function (key) {
32
+ if (key === "default" || key === "__esModule") return;
33
+ if (key in exports && exports[key] === _define_server[key]) return;
34
+ exports[key] = _define_server[key];
35
+ });
36
+
37
+ var _define_task = require("./core/define_task");
38
+
39
+ Object.keys(_define_task).forEach(function (key) {
40
+ if (key === "default" || key === "__esModule") return;
41
+ if (key in exports && exports[key] === _define_task[key]) return;
42
+ exports[key] = _define_task[key];
43
+ });
44
+
45
+ var _handler = require("./core/handler");
46
+
47
+ Object.keys(_handler).forEach(function (key) {
48
+ if (key === "default" || key === "__esModule") return;
49
+ if (key in exports && exports[key] === _handler[key]) return;
50
+ exports[key] = _handler[key];
51
+ });
52
+
53
+ var _http_error = require("./core/http_error");
54
+
55
+ Object.keys(_http_error).forEach(function (key) {
56
+ if (key === "default" || key === "__esModule") return;
57
+ if (key in exports && exports[key] === _http_error[key]) return;
58
+ exports[key] = _http_error[key];
59
+ });
60
+
61
+ var _server = require("./core/server");
62
+
63
+ Object.keys(_server).forEach(function (key) {
64
+ if (key === "default" || key === "__esModule") return;
65
+ if (key in exports && exports[key] === _server[key]) return;
66
+ exports[key] = _server[key];
67
+ });
68
+
69
+ var _types = require("./core/types");
70
+
71
+ Object.keys(_types).forEach(function (key) {
72
+ if (key === "default" || key === "__esModule") return;
73
+ if (key in exports && exports[key] === _types[key]) return;
74
+ exports[key] = _types[key];
75
+ });
76
+
77
+ var _base = require("./plugins/base");
78
+
79
+ Object.keys(_base).forEach(function (key) {
80
+ if (key === "default" || key === "__esModule") return;
81
+ if (key in exports && exports[key] === _base[key]) return;
82
+ exports[key] = _base[key];
83
+ });
84
+
85
+ var _cors = require("./plugins/cors");
86
+
87
+ Object.keys(_cors).forEach(function (key) {
88
+ if (key === "default" || key === "__esModule") return;
89
+ if (key in exports && exports[key] === _cors[key]) return;
90
+ exports[key] = _cors[key];
91
+ });
92
+
93
+ var _file_parser = require("./plugins/file_parser");
94
+
95
+ Object.keys(_file_parser).forEach(function (key) {
96
+ if (key === "default" || key === "__esModule") return;
97
+ if (key in exports && exports[key] === _file_parser[key]) return;
98
+ exports[key] = _file_parser[key];
99
+ });
100
+
101
+ var _ws_parser = require("./plugins/ws_parser");
102
+
103
+ Object.keys(_ws_parser).forEach(function (key) {
104
+ if (key === "default" || key === "__esModule") return;
105
+ if (key in exports && exports[key] === _ws_parser[key]) return;
106
+ exports[key] = _ws_parser[key];
107
+ });
108
+
109
+ var _xml_parser = require("./plugins/xml_parser");
110
+
111
+ Object.keys(_xml_parser).forEach(function (key) {
112
+ if (key === "default" || key === "__esModule") return;
113
+ if (key in exports && exports[key] === _xml_parser[key]) return;
114
+ exports[key] = _xml_parser[key];
115
+ });
116
+
117
+ var _base2 = require("./services/base");
118
+
119
+ Object.keys(_base2).forEach(function (key) {
120
+ if (key === "default" || key === "__esModule") return;
121
+ if (key in exports && exports[key] === _base2[key]) return;
122
+ exports[key] = _base2[key];
123
+ });
124
+
125
+ var _cache = require("./services/cache");
126
+
127
+ Object.keys(_cache).forEach(function (key) {
128
+ if (key === "default" || key === "__esModule") return;
129
+ if (key in exports && exports[key] === _cache[key]) return;
130
+ exports[key] = _cache[key];
131
+ });
132
+
133
+ var _captcha = require("./services/captcha");
134
+
135
+ Object.keys(_captcha).forEach(function (key) {
136
+ if (key === "default" || key === "__esModule") return;
137
+ if (key in exports && exports[key] === _captcha[key]) return;
138
+ exports[key] = _captcha[key];
139
+ });
140
+
141
+ var _dispose = require("./services/dispose");
142
+
143
+ Object.keys(_dispose).forEach(function (key) {
144
+ if (key === "default" || key === "__esModule") return;
145
+ if (key in exports && exports[key] === _dispose[key]) return;
146
+ exports[key] = _dispose[key];
147
+ });
148
+
149
+ var _jwt = require("./services/jwt");
150
+
151
+ Object.keys(_jwt).forEach(function (key) {
152
+ if (key === "default" || key === "__esModule") return;
153
+ if (key in exports && exports[key] === _jwt[key]) return;
154
+ exports[key] = _jwt[key];
155
+ });
156
+
157
+ var _redis = require("./services/redis");
158
+
159
+ Object.keys(_redis).forEach(function (key) {
160
+ if (key === "default" || key === "__esModule") return;
161
+ if (key in exports && exports[key] === _redis[key]) return;
162
+ exports[key] = _redis[key];
163
+ });
164
+
165
+ var _x = require("./x");
166
+
167
+ Object.keys(_x).forEach(function (key) {
168
+ if (key === "default" || key === "__esModule") return;
169
+ if (key in exports && exports[key] === _x[key]) return;
170
+ exports[key] = _x[key];
171
+ });
172
+
173
+ var _models = require(".x/models");
174
+
175
+ Object.keys(_models).forEach(function (key) {
176
+ if (key === "default" || key === "__esModule") return;
177
+ if (key in exports && exports[key] === _models[key]) return;
178
+ exports[key] = _models[key];
179
+ });
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ exports.__esModule = true;
6
+ exports.CorsPlugin = void 0;
7
+
8
+ var _fastifyCors = _interopRequireDefault(require("fastify-cors"));
9
+
10
+ var _vtils = require("vtils");
11
+
12
+ var _date = require("vtils/date");
13
+
14
+ /**
15
+ * CORS 支持插件
16
+ */
17
+ class CorsPlugin {
18
+ constructor(options) {
19
+ this.options = options;
20
+ }
21
+
22
+ register(fastify) {
23
+ const allows = this.options.allow.map(item => ({
24
+ type: item.startsWith('*.') ? 'endsWith' : 'equal',
25
+ domain: item.startsWith('*.') ? item.replace('*.', '.') : item
26
+ }));
27
+ const check = (0, _vtils.memoize)(origin => {
28
+ let i = origin.indexOf(':');
29
+ let j = origin.indexOf(':', i + 1);
30
+ i += 3;
31
+ j = j === -1 ? origin.length : j;
32
+ const domain = origin.substring(i, j);
33
+ const pass = allows.some(item => item.type === 'equal' ? domain === item.domain : domain.endsWith(item.domain));
34
+ return pass;
35
+ });
36
+ fastify.register(_fastifyCors.default, {
37
+ origin: (origin, cb) => cb(null, origin ? check(origin) : true),
38
+ maxAge: (0, _date.ms)(this.options.ttl, true)
39
+ });
40
+ }
41
+
42
+ }
43
+
44
+ exports.CorsPlugin = CorsPlugin;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ exports.__esModule = true;
6
+ exports.FileParserPlugin = void 0;
7
+
8
+ var _fastifyMultipart = _interopRequireDefault(require("fastify-multipart"));
9
+
10
+ /**
11
+ * file 解析器插件
12
+ */
13
+ class FileParserPlugin {
14
+ constructor(options) {
15
+ this.options = options;
16
+ }
17
+
18
+ register(fastify) {
19
+ fastify.register(_fastifyMultipart.default, this.options);
20
+ }
21
+
22
+ }
23
+
24
+ exports.FileParserPlugin = FileParserPlugin;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ exports.__esModule = true;
6
+ exports.WsParserPlugin = void 0;
7
+
8
+ var _fastifyWebsocket = _interopRequireDefault(require("fastify-websocket"));
9
+
10
+ /**
11
+ * websocket 解析器插件
12
+ */
13
+ class WsParserPlugin {
14
+ constructor(options) {
15
+ this.options = options;
16
+ }
17
+
18
+ register(fastify) {
19
+ fastify.register(_fastifyWebsocket.default, this.options);
20
+ }
21
+
22
+ }
23
+
24
+ exports.WsParserPlugin = WsParserPlugin;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ exports.__esModule = true;
6
+ exports.XmlParserPlugin = void 0;
7
+
8
+ var _fastXmlParser = _interopRequireDefault(require("fast-xml-parser"));
9
+
10
+ /**
11
+ * XML 解析器插件
12
+ *
13
+ * 底层解析器是 [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser)
14
+ */
15
+ class XmlParserPlugin {
16
+ constructor(options) {
17
+ this.options = options;
18
+ }
19
+
20
+ register(fastify) {
21
+ const {
22
+ contentType = ['text/xml', 'application/xml'],
23
+ ...parseOptions
24
+ } = this.options || {};
25
+ fastify.addContentTypeParser(contentType, (req, payload, done) => {
26
+ let body = '';
27
+
28
+ const handleError = err => done(err);
29
+
30
+ const handleData = data => body += data;
31
+
32
+ const handleEnd = () => {
33
+ let data;
34
+ let err;
35
+
36
+ try {
37
+ data = _fastXmlParser.default.parse(body, parseOptions);
38
+ } catch (_err) {
39
+ err = _err;
40
+ }
41
+
42
+ payload.removeListener('error', handleError);
43
+ payload.removeListener('data', handleData);
44
+ payload.removeListener('end', handleEnd);
45
+
46
+ if (err) {
47
+ done(err);
48
+ } else {
49
+ done(null, data);
50
+ }
51
+ };
52
+
53
+ payload.on('error', handleError);
54
+ payload.on('data', handleData);
55
+ payload.on('end', handleEnd);
56
+ });
57
+ }
58
+
59
+ }
60
+
61
+ exports.XmlParserPlugin = XmlParserPlugin;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;