evaengine 1.0.14 → 2.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 (199) hide show
  1. package/README.md +15 -1
  2. package/bin/engine +2 -31
  3. package/dist/bin.d.ts +1 -0
  4. package/dist/bin.js +40 -0
  5. package/dist/bin.js.map +1 -0
  6. package/{src/commands/index.js → dist/commands/index.d.ts} +1 -8
  7. package/dist/commands/index.js +6 -0
  8. package/dist/commands/index.js.map +1 -0
  9. package/dist/commands/interface.d.ts +18 -0
  10. package/dist/commands/interface.js +40 -0
  11. package/dist/commands/interface.js.map +1 -0
  12. package/dist/commands/make_entity.d.ts +47 -0
  13. package/dist/commands/make_entity.js +410 -0
  14. package/dist/commands/make_entity.js.map +1 -0
  15. package/dist/commands/tramp.d.ts +7 -0
  16. package/dist/commands/tramp.js +29 -0
  17. package/dist/commands/tramp.js.map +1 -0
  18. package/dist/config/index.d.ts +92 -0
  19. package/dist/config/index.js +96 -0
  20. package/dist/config/index.js.map +1 -0
  21. package/dist/di.d.ts +73 -0
  22. package/dist/di.js +76 -0
  23. package/dist/di.js.map +1 -0
  24. package/dist/engine.d.ts +85 -0
  25. package/dist/engine.js +404 -0
  26. package/dist/engine.js.map +1 -0
  27. package/dist/entities/index.d.ts +54 -0
  28. package/dist/entities/index.js +228 -0
  29. package/dist/entities/index.js.map +1 -0
  30. package/dist/exceptions/index.d.ts +153 -0
  31. package/dist/exceptions/index.js +439 -0
  32. package/dist/exceptions/index.js.map +1 -0
  33. package/dist/index.d.ts +45 -0
  34. package/dist/index.js +45 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/middlewares/auth.d.ts +5 -0
  37. package/dist/middlewares/auth.js +63 -0
  38. package/dist/middlewares/auth.js.map +1 -0
  39. package/dist/middlewares/auth_kong.d.ts +2 -0
  40. package/dist/middlewares/auth_kong.js +24 -0
  41. package/dist/middlewares/auth_kong.js.map +1 -0
  42. package/dist/middlewares/debug.d.ts +3 -0
  43. package/dist/middlewares/debug.js +50 -0
  44. package/dist/middlewares/debug.js.map +1 -0
  45. package/{src/middlewares/index.js → dist/middlewares/index.d.ts} +1 -11
  46. package/dist/middlewares/index.js +9 -0
  47. package/dist/middlewares/index.js.map +1 -0
  48. package/dist/middlewares/providers.d.ts +25 -0
  49. package/dist/middlewares/providers.js +63 -0
  50. package/dist/middlewares/providers.js.map +1 -0
  51. package/dist/middlewares/session.d.ts +6 -0
  52. package/dist/middlewares/session.js +51 -0
  53. package/dist/middlewares/session.js.map +1 -0
  54. package/dist/middlewares/trace.d.ts +52 -0
  55. package/dist/middlewares/trace.js +225 -0
  56. package/dist/middlewares/trace.js.map +1 -0
  57. package/dist/middlewares/validator.d.ts +10 -0
  58. package/dist/middlewares/validator.js +43 -0
  59. package/dist/middlewares/validator.js.map +1 -0
  60. package/dist/middlewares/view_cache.d.ts +14 -0
  61. package/dist/middlewares/view_cache.js +102 -0
  62. package/dist/middlewares/view_cache.js.map +1 -0
  63. package/dist/services/cache.d.ts +66 -0
  64. package/dist/services/cache.js +207 -0
  65. package/dist/services/cache.js.map +1 -0
  66. package/dist/services/config.d.ts +25 -0
  67. package/dist/services/config.js +88 -0
  68. package/dist/services/config.js.map +1 -0
  69. package/dist/services/env.d.ts +12 -0
  70. package/dist/services/env.js +24 -0
  71. package/dist/services/env.js.map +1 -0
  72. package/dist/services/event_manager.d.ts +29 -0
  73. package/dist/services/event_manager.js +75 -0
  74. package/dist/services/event_manager.js.map +1 -0
  75. package/dist/services/http_client.d.ts +66 -0
  76. package/dist/services/http_client.js +62 -0
  77. package/dist/services/http_client.js.map +1 -0
  78. package/{src/services/index.js → dist/services/index.d.ts} +1 -15
  79. package/dist/services/index.js +14 -0
  80. package/dist/services/index.js.map +1 -0
  81. package/{src/services/interface.js → dist/services/interface.d.ts} +1 -3
  82. package/dist/services/interface.js +6 -0
  83. package/dist/services/interface.js.map +1 -0
  84. package/{src/services/joi.js → dist/services/joi.d.ts} +2 -9
  85. package/dist/services/joi.js +11 -0
  86. package/dist/services/joi.js.map +1 -0
  87. package/dist/services/jwt_token.d.ts +24 -0
  88. package/dist/services/jwt_token.js +77 -0
  89. package/dist/services/jwt_token.js.map +1 -0
  90. package/dist/services/jwt_token_kong.d.ts +25 -0
  91. package/dist/services/jwt_token_kong.js +65 -0
  92. package/dist/services/jwt_token_kong.js.map +1 -0
  93. package/dist/services/logger.d.ts +30 -0
  94. package/dist/services/logger.js +126 -0
  95. package/dist/services/logger.js.map +1 -0
  96. package/dist/services/namespace.d.ts +55 -0
  97. package/dist/services/namespace.js +157 -0
  98. package/dist/services/namespace.js.map +1 -0
  99. package/dist/services/now.d.ts +14 -0
  100. package/dist/services/now.js +43 -0
  101. package/dist/services/now.js.map +1 -0
  102. package/dist/services/providers.d.ts +55 -0
  103. package/dist/services/providers.js +134 -0
  104. package/dist/services/providers.js.map +1 -0
  105. package/dist/services/redis.d.ts +18 -0
  106. package/dist/services/redis.js +53 -0
  107. package/dist/services/redis.js.map +1 -0
  108. package/dist/services/rest_client.d.ts +48 -0
  109. package/dist/services/rest_client.js +96 -0
  110. package/dist/services/rest_client.js.map +1 -0
  111. package/dist/swagger/index.d.ts +223 -0
  112. package/dist/swagger/index.js +564 -0
  113. package/dist/swagger/index.js.map +1 -0
  114. package/dist/types/express.d.ts +14 -0
  115. package/dist/types/vendor.d.ts +102 -0
  116. package/dist/utils/api_scaffold.d.ts +74 -0
  117. package/dist/utils/api_scaffold.js +220 -0
  118. package/dist/utils/api_scaffold.js.map +1 -0
  119. package/dist/utils/case_converter.d.ts +7 -0
  120. package/dist/utils/case_converter.js +29 -0
  121. package/dist/utils/case_converter.js.map +1 -0
  122. package/dist/utils/crc32.d.ts +2 -0
  123. package/dist/utils/crc32.js +43 -0
  124. package/dist/utils/crc32.js.map +1 -0
  125. package/dist/utils/cron.d.ts +27 -0
  126. package/dist/utils/cron.js +186 -0
  127. package/dist/utils/cron.js.map +1 -0
  128. package/dist/utils/datetime.d.ts +4 -0
  129. package/dist/utils/datetime.js +6 -0
  130. package/dist/utils/datetime.js.map +1 -0
  131. package/dist/utils/host.d.ts +18 -0
  132. package/dist/utils/host.js +33 -0
  133. package/dist/utils/host.js.map +1 -0
  134. package/{src/utils/index.js → dist/utils/index.d.ts} +2 -26
  135. package/dist/utils/index.js +12 -0
  136. package/dist/utils/index.js.map +1 -0
  137. package/dist/utils/pagination.d.ts +150 -0
  138. package/dist/utils/pagination.js +242 -0
  139. package/dist/utils/pagination.js.map +1 -0
  140. package/dist/utils/random.d.ts +3 -0
  141. package/dist/utils/random.js +18 -0
  142. package/dist/utils/random.js.map +1 -0
  143. package/dist/utils/request_client.d.ts +33 -0
  144. package/dist/utils/request_client.js +153 -0
  145. package/dist/utils/request_client.js.map +1 -0
  146. package/dist/utils/smart_query.d.ts +144 -0
  147. package/dist/utils/smart_query.js +310 -0
  148. package/dist/utils/smart_query.js.map +1 -0
  149. package/dist/utils/test.d.ts +14 -0
  150. package/dist/utils/test.js +37 -0
  151. package/dist/utils/test.js.map +1 -0
  152. package/dist/utils/wrapper.d.ts +3 -0
  153. package/dist/utils/wrapper.js +5 -0
  154. package/dist/utils/wrapper.js.map +1 -0
  155. package/package.json +24 -10
  156. package/index.js +0 -2
  157. package/src/commands/interface.js +0 -45
  158. package/src/commands/make_entity.js +0 -490
  159. package/src/commands/tramp.js +0 -34
  160. package/src/config/index.js +0 -95
  161. package/src/di.js +0 -96
  162. package/src/engine.js +0 -556
  163. package/src/entities/index.js +0 -272
  164. package/src/exceptions/index.js +0 -501
  165. package/src/index.js +0 -55
  166. package/src/middlewares/auth.js +0 -67
  167. package/src/middlewares/auth_kong.js +0 -28
  168. package/src/middlewares/debug.js +0 -88
  169. package/src/middlewares/providers.js +0 -73
  170. package/src/middlewares/session.js +0 -63
  171. package/src/middlewares/trace.js +0 -254
  172. package/src/middlewares/validator.js +0 -50
  173. package/src/middlewares/view_cache.js +0 -127
  174. package/src/services/cache.js +0 -223
  175. package/src/services/config.js +0 -115
  176. package/src/services/env.js +0 -28
  177. package/src/services/event_manager.js +0 -84
  178. package/src/services/http_client.js +0 -69
  179. package/src/services/jwt_token.js +0 -89
  180. package/src/services/jwt_token_kong.js +0 -75
  181. package/src/services/logger.js +0 -150
  182. package/src/services/namespace.js +0 -176
  183. package/src/services/now.js +0 -49
  184. package/src/services/providers.js +0 -158
  185. package/src/services/redis.js +0 -63
  186. package/src/services/rest_client.js +0 -112
  187. package/src/swagger/index.js +0 -665
  188. package/src/utils/api_scaffold.js +0 -240
  189. package/src/utils/case_converter.js +0 -33
  190. package/src/utils/crc32.js +0 -44
  191. package/src/utils/cron.js +0 -208
  192. package/src/utils/datetime.js +0 -13
  193. package/src/utils/host.js +0 -39
  194. package/src/utils/pagination.js +0 -260
  195. package/src/utils/random.js +0 -23
  196. package/src/utils/request_client.js +0 -179
  197. package/src/utils/smart_query.js +0 -352
  198. package/src/utils/test.js +0 -48
  199. package/src/utils/wrapper.js +0 -8
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Minimal cron expression parser and scheduler.
3
+ * Replaces the unmaintained `later` package with Node built-ins.
4
+ *
5
+ * Supports 5-field (minute hour day-of-month month day-of-week) and
6
+ * 6-field (with a leading seconds) expressions. Each field accepts
7
+ * wildcard, step, single value, range, range-with-step and
8
+ * comma-separated lists. All times are interpreted in local time,
9
+ * matching the previous `later.date.localTime()` default.
10
+ */
11
+ const FIELD_BOUNDS = {
12
+ second: [0, 59],
13
+ minute: [0, 59],
14
+ hour: [0, 23],
15
+ dayOfMonth: [1, 31],
16
+ month: [1, 12],
17
+ dayOfWeek: [0, 7]
18
+ };
19
+ const FIELD_ORDER = [
20
+ 'second', 'minute', 'hour', 'dayOfMonth', 'month', 'dayOfWeek'
21
+ ];
22
+ const parseField = (field, min, max) => {
23
+ const values = new Set();
24
+ for (const token of field.split(',')) {
25
+ if (token === '*') {
26
+ for (let value = min; value <= max; value += 1) {
27
+ values.add(value);
28
+ }
29
+ continue;
30
+ }
31
+ if (token.includes('/')) {
32
+ const [base, stepToken] = token.split('/');
33
+ const step = Number.parseInt(stepToken, 10);
34
+ if (Number.isNaN(step) || step < 1) {
35
+ throw new Error(`Invalid cron step "${stepToken}" in "${field}"`);
36
+ }
37
+ let start = min;
38
+ let end = max;
39
+ if (base !== '*') {
40
+ if (base.includes('-')) {
41
+ [start, end] = base.split('-').map(v => Number.parseInt(v, 10));
42
+ }
43
+ else {
44
+ start = Number.parseInt(base, 10);
45
+ }
46
+ }
47
+ if (Number.isNaN(start) || start < min || start > max
48
+ || Number.isNaN(end) || end < min || end > max || start > end) {
49
+ throw new Error(`Invalid cron value in "${field}"`);
50
+ }
51
+ for (let value = start; value <= end; value += step) {
52
+ values.add(value);
53
+ }
54
+ continue;
55
+ }
56
+ if (token.includes('-')) {
57
+ const [start, end] = token.split('-').map(v => Number.parseInt(v, 10));
58
+ if (Number.isNaN(start) || Number.isNaN(end)
59
+ || start < min || end > max || start > end) {
60
+ throw new Error(`Invalid cron range in "${field}"`);
61
+ }
62
+ for (let value = start; value <= end; value += 1) {
63
+ values.add(value);
64
+ }
65
+ continue;
66
+ }
67
+ const value = Number.parseInt(token, 10);
68
+ if (Number.isNaN(value) || value < min || value > max) {
69
+ throw new Error(`Invalid cron value "${token}" in "${field}"`);
70
+ }
71
+ values.add(value);
72
+ }
73
+ return values;
74
+ };
75
+ /**
76
+ * Parse a cron expression into a schedule of Sets.
77
+ */
78
+ export const parseCron = (expression, useSeconds = false) => {
79
+ const parts = String(expression).trim().split(/\s+/);
80
+ const names = useSeconds ? FIELD_ORDER : FIELD_ORDER.slice(1);
81
+ if (parts.length !== names.length) {
82
+ throw new Error(`Cron expression must contain ${names.length} fields, got ${parts.length}: "${expression}"`);
83
+ }
84
+ const schedule = {};
85
+ names.forEach((name, index) => {
86
+ const [min, max] = FIELD_BOUNDS[name];
87
+ schedule[name] = parseField(parts[index], min, max);
88
+ });
89
+ if (schedule.dayOfWeek) {
90
+ if (schedule.dayOfWeek.has(7)) {
91
+ schedule.dayOfWeek.delete(7);
92
+ schedule.dayOfWeek.add(0);
93
+ }
94
+ }
95
+ return schedule;
96
+ };
97
+ const matches = (schedule, date) => {
98
+ if (schedule.second && !schedule.second.has(date.getSeconds())) {
99
+ return false;
100
+ }
101
+ if (schedule.minute && !schedule.minute.has(date.getMinutes())) {
102
+ return false;
103
+ }
104
+ if (schedule.hour && !schedule.hour.has(date.getHours())) {
105
+ return false;
106
+ }
107
+ if (schedule.dayOfMonth && !schedule.dayOfMonth.has(date.getDate())) {
108
+ return false;
109
+ }
110
+ if (schedule.month && !schedule.month.has(date.getMonth() + 1)) {
111
+ return false;
112
+ }
113
+ if (schedule.dayOfWeek && !schedule.dayOfWeek.has(date.getDay())) {
114
+ return false;
115
+ }
116
+ return true;
117
+ };
118
+ /**
119
+ * Compute the next run date strictly after `from` that matches the schedule.
120
+ */
121
+ export const getNextRun = (schedule, from = new Date()) => {
122
+ const stepMs = schedule.second ? 1000 : 60000;
123
+ let current = new Date(Math.floor(from.getTime() / stepMs) * stepMs + stepMs);
124
+ const deadline = from.getTime() + 366 * 24 * 3600 * 1000;
125
+ while (current.getTime() <= deadline) {
126
+ if (matches(schedule, current)) {
127
+ return current;
128
+ }
129
+ //Fast-forward coarse fields so unschedulable expressions stay fast
130
+ if (schedule.month && !schedule.month.has(current.getMonth() + 1)) {
131
+ current = new Date(current.getFullYear(), current.getMonth() + 1, 1, 0, 0, 0, 0);
132
+ continue;
133
+ }
134
+ if (schedule.dayOfMonth && !schedule.dayOfMonth.has(current.getDate())) {
135
+ current.setDate(current.getDate() + 1);
136
+ current.setHours(0, 0, 0, 0);
137
+ continue;
138
+ }
139
+ if (schedule.dayOfWeek && !schedule.dayOfWeek.has(current.getDay())) {
140
+ current.setDate(current.getDate() + 1);
141
+ current.setHours(0, 0, 0, 0);
142
+ continue;
143
+ }
144
+ if (schedule.hour && !schedule.hour.has(current.getHours())) {
145
+ current.setHours(current.getHours() + 1, 0, 0, 0);
146
+ continue;
147
+ }
148
+ if (schedule.minute && !schedule.minute.has(current.getMinutes())) {
149
+ current.setMinutes(current.getMinutes() + 1, 0, 0);
150
+ continue;
151
+ }
152
+ if (schedule.second && !schedule.second.has(current.getSeconds())) {
153
+ current.setSeconds(current.getSeconds() + 1, 0);
154
+ continue;
155
+ }
156
+ current = new Date(current.getTime() + stepMs);
157
+ }
158
+ throw new Error('Cron expression has no match within the next year');
159
+ };
160
+ const MAX_TIMEOUT = 2147483647;
161
+ /**
162
+ * Run `callback` on `schedule` until the returned handle is cleared.
163
+ */
164
+ export const setCronInterval = (callback, schedule) => {
165
+ let timer = null;
166
+ const scheduleNext = () => {
167
+ const nextRun = getNextRun(schedule, new Date());
168
+ const delay = Math.max(0, nextRun.getTime() - Date.now());
169
+ timer = setTimeout(() => {
170
+ scheduleNext();
171
+ if (delay <= MAX_TIMEOUT) {
172
+ callback();
173
+ }
174
+ }, Math.min(delay, MAX_TIMEOUT));
175
+ };
176
+ scheduleNext();
177
+ return {
178
+ clear() {
179
+ if (timer) {
180
+ clearTimeout(timer);
181
+ timer = null;
182
+ }
183
+ }
184
+ };
185
+ };
186
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/utils/cron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const getTimestamp: () => number;
2
+ export declare const getMilliTimestamp: () => number;
3
+ export declare const getMicroTimestamp: () => number;
4
+ export declare const getDatabaseDatetime: () => string;
@@ -0,0 +1,6 @@
1
+ import moment from 'moment-timezone';
2
+ export const getTimestamp = () => Math.floor(Date.now() / 1000);
3
+ export const getMilliTimestamp = () => Date.now();
4
+ export const getMicroTimestamp = () => Date.now() * 1000;
5
+ export const getDatabaseDatetime = () => moment().format('YYYY-MM-DD HH:mm:ss');
6
+ //# sourceMappingURL=datetime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../src/utils/datetime.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAW,EAAE,CACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE,CAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;AAEb,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE,CAC5C,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpB,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAW,EAAE,CAC9C,MAAM,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Request } from 'express';
2
+ /**
3
+ * getHostFullUrl 只读取 protocol/originalUrl/headers.host/get;
4
+ * 用最小结构类型兼容真实 express Request 与测试用的 duck-typed mock
5
+ */
6
+ type HostUrlRequest = {
7
+ protocol: string;
8
+ originalUrl: string;
9
+ headers?: {
10
+ host?: string | undefined;
11
+ };
12
+ get(name: string): string | undefined;
13
+ };
14
+ export declare const getHostFullUrl: (req: HostUrlRequest, url?: string) => string;
15
+ export declare const getHostIp: () => string;
16
+ export declare const getHostPort: (req: Request) => number | string;
17
+ export declare const getClientIp: (req: Request) => string | undefined;
18
+ export {};
@@ -0,0 +1,33 @@
1
+ import os from 'os';
2
+ export const getHostFullUrl = (req, url) => {
3
+ const { protocol, originalUrl } = req;
4
+ const host = req.headers && req.headers.host ? req.headers.host : req.get('host');
5
+ return `${protocol}://${host}${url || originalUrl}`;
6
+ };
7
+ export const getHostIp = () => {
8
+ const ifaces = os.networkInterfaces();
9
+ const addresses = [];
10
+ Object.keys(ifaces).forEach((ifname) => {
11
+ ifaces[ifname].forEach((iface) => {
12
+ if (iface.family !== 'IPv4' || iface.internal !== false) {
13
+ // skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses
14
+ return;
15
+ }
16
+ addresses.push(iface.address);
17
+ });
18
+ });
19
+ return addresses.length > 0 ? addresses[0] : '127.0.0.1';
20
+ };
21
+ export const getHostPort = (req) => {
22
+ if (!req.headers || !req.headers.host) {
23
+ return -1;
24
+ }
25
+ const [, port] = req.headers.host.split(':');
26
+ return port || -1;
27
+ };
28
+ export const getClientIp = (req) => req.headers['x-forwarded-for'] ||
29
+ req.connection.remoteAddress ||
30
+ req.socket.remoteAddress ||
31
+ // 原实现访问 connection.socket(Socket 上不存在该属性),不可达时按原样抛 TypeError,不做可选链
32
+ req.connection.socket.remoteAddress;
33
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/utils/host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAcpB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAmB,EAAE,GAAY,EAAU,EAAE;IAC1E,MAAM,EACJ,QAAQ,EACR,WAAW,EACZ,GAAG,GAAG,CAAC;IACR,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClF,OAAO,GAAG,QAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAW,EAAE;IACpC,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;IACtC,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,MAAM,CAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAChC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACxD,6DAA6D;gBAC7D,OAAO;YACT,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAY,EAAmB,EAAE;IAC3D,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAY,EAAsB,EAAE,CAC/D,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAwB;IACtD,GAAG,CAAC,UAAU,CAAC,aAAa;IAC5B,GAAG,CAAC,MAAM,CAAC,aAAa;IACxB,mEAAmE;IAClE,GAAG,CAAC,UAAgE,CAAC,MAAM,CAAC,aAAa,CAAC"}
@@ -6,30 +6,6 @@ import crc32 from './crc32.js';
6
6
  import { randomNumber, randomString } from './random.js';
7
7
  import { toCamelCase, toSnakeCase } from './case_converter.js';
8
8
  import { getHostFullUrl, getHostIp, getHostPort, getClientIp } from './host.js';
9
- import {
10
- getTimestamp, getMilliTimestamp,
11
- getMicroTimestamp, getDatabaseDatetime
12
- } from './datetime.js';
9
+ import { getTimestamp, getMilliTimestamp, getMicroTimestamp, getDatabaseDatetime } from './datetime.js';
13
10
  import * as apiScaffold from './api_scaffold.js';
14
-
15
- export {
16
- apiScaffold,
17
- crc32,
18
- getHostFullUrl,
19
- getHostIp,
20
- getHostPort,
21
- getClientIp,
22
- getTimestamp,
23
- getMilliTimestamp,
24
- getMicroTimestamp,
25
- getDatabaseDatetime,
26
- merge,
27
- pagination,
28
- paginationFilter,
29
- randomNumber,
30
- randomString,
31
- test,
32
- toCamelCase,
33
- toSnakeCase,
34
- wrapper
35
- };
11
+ export { apiScaffold, crc32, getHostFullUrl, getHostIp, getHostPort, getClientIp, getTimestamp, getMilliTimestamp, getMicroTimestamp, getDatabaseDatetime, merge, pagination, paginationFilter, randomNumber, randomString, test, toCamelCase, toSnakeCase, wrapper };
@@ -0,0 +1,12 @@
1
+ import merge from 'lodash/merge.js';
2
+ import wrapper from "./wrapper.js";
3
+ import * as test from "./test.js";
4
+ import { pagination, paginationFilter } from "./pagination.js";
5
+ import crc32 from "./crc32.js";
6
+ import { randomNumber, randomString } from "./random.js";
7
+ import { toCamelCase, toSnakeCase } from "./case_converter.js";
8
+ import { getHostFullUrl, getHostIp, getHostPort, getClientIp } from "./host.js";
9
+ import { getTimestamp, getMilliTimestamp, getMicroTimestamp, getDatabaseDatetime } from "./datetime.js";
10
+ import * as apiScaffold from "./api_scaffold.js";
11
+ export { apiScaffold, crc32, getHostFullUrl, getHostIp, getHostPort, getClientIp, getTimestamp, getMilliTimestamp, getMicroTimestamp, getDatabaseDatetime, merge, pagination, paginationFilter, randomNumber, randomString, test, toCamelCase, toSnakeCase, wrapper };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EACL,YAAY,EAAE,iBAAiB,EAC/B,iBAAiB,EAAE,mBAAmB,EACvC,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EACL,WAAW,EACX,KAAK,EACL,cAAc,EACd,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,WAAW,EACX,OAAO,EACR,CAAC"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * pagination 的 req 只使用 protocol/baseUrl/path/query/get,
3
+ * 用最小结构类型同时兼容真实 express Request 与测试用的 duck-typed mock
4
+ */
5
+ type PaginationRequest = {
6
+ protocol: string;
7
+ baseUrl: string;
8
+ path: string;
9
+ query: Record<string, unknown>;
10
+ get(name: string): string | undefined;
11
+ };
12
+ /**
13
+ @swagger
14
+ PaginationSnake:
15
+ type: object
16
+ properties:
17
+ total:
18
+ type: integer
19
+ description: 总数据量
20
+ offset:
21
+ type: integer
22
+ description: 偏移量
23
+ limit:
24
+ type: integer
25
+ description: 单页数据量
26
+ prev:
27
+ type: integer
28
+ description: 上页偏移量
29
+ next:
30
+ type: integer
31
+ description: 下页偏移量
32
+ prev_uri:
33
+ type: string
34
+ description: 上页Uri
35
+ next_uri:
36
+ type: string
37
+ description: 下页Uri
38
+ is_first:
39
+ type: boolean
40
+ description: 是否为首页
41
+ is_last:
42
+ type: boolean
43
+ description: 是否为末页
44
+ first_uri:
45
+ type: string
46
+ description: 首页Uri
47
+ last_uri:
48
+ type: string
49
+ description: 末页Uri
50
+ required:
51
+ - total
52
+ - offset
53
+ - limit
54
+ - prev
55
+ - next
56
+ - prev_uri
57
+ - next_uri
58
+ - is_first
59
+ - is_last
60
+ - first_uri
61
+ - last_uri
62
+ example:
63
+ total: 100
64
+ offset: 30
65
+ limit: 15
66
+ prev: 15
67
+ next: 45
68
+ prev_uri: http://localhost/v1/posts?offset=15&limit=15
69
+ next_uri: http://localhost/v1/posts?offset=30&limit=15
70
+ is_first: false
71
+ is_last: false
72
+ first_uri: http://localhost/v1/posts?offset=0&limit=15
73
+ last_uri: http://localhost/v1/posts?offset=90&limit=15
74
+ @swagger
75
+ Pagination:
76
+ type: object
77
+ properties:
78
+ total:
79
+ type: integer
80
+ description: 总数据量
81
+ offset:
82
+ type: integer
83
+ description: 偏移量
84
+ limit:
85
+ type: integer
86
+ description: 单页数据量
87
+ prev:
88
+ type: integer
89
+ description: 上页偏移量
90
+ next:
91
+ type: integer
92
+ description: 下页偏移量
93
+ prevUri:
94
+ type: string
95
+ description: 上页Uri
96
+ nextUri:
97
+ type: string
98
+ description: 下页Uri
99
+ isFirst:
100
+ type: boolean
101
+ description: 是否为首页
102
+ isLast:
103
+ type: boolean
104
+ description: 是否为末页
105
+ firstUri:
106
+ type: string
107
+ description: 首页Uri
108
+ lastUri:
109
+ type: string
110
+ description: 末页Uri
111
+ required:
112
+ - total
113
+ - offset
114
+ - limit
115
+ - prev
116
+ - next
117
+ - prevUri
118
+ - nextUri
119
+ - isFirst
120
+ - isLast
121
+ - firstUri
122
+ - lastUri
123
+ example:
124
+ total: 100
125
+ offset: 30
126
+ limit: 15
127
+ prev: 15
128
+ next: 45
129
+ prevUri: http://localhost/v1/posts?offset=15&limit=15
130
+ nextUri: http://localhost/v1/posts?offset=30&limit=15
131
+ isFirst: false
132
+ isLast: false
133
+ firstUri: http://localhost/v1/posts?offset=0&limit=15
134
+ lastUri: http://localhost/v1/posts?offset=90&limit=15
135
+ */
136
+ export declare const pagination: ({ total, limit, offset, req, snakeCase: useSnake }: {
137
+ total: unknown;
138
+ limit: unknown;
139
+ offset: unknown;
140
+ req: PaginationRequest;
141
+ snakeCase?: boolean;
142
+ }) => Record<string, unknown>;
143
+ export declare const paginationFilter: ({ offset, limit }: {
144
+ offset?: unknown;
145
+ limit?: unknown;
146
+ }, defaultLimit?: number, maxLimit?: number) => {
147
+ offset: number;
148
+ limit: number;
149
+ };
150
+ export {};