@jayfong/x-server 2.3.0 → 2.4.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.
package/lib/_cjs/index.js CHANGED
@@ -202,6 +202,14 @@ Object.keys(_jwt).forEach(function (key) {
202
202
  exports[key] = _jwt[key];
203
203
  });
204
204
 
205
+ var _log = require("./services/log");
206
+
207
+ Object.keys(_log).forEach(function (key) {
208
+ if (key === "default" || key === "__esModule") return;
209
+ if (key in exports && exports[key] === _log[key]) return;
210
+ exports[key] = _log[key];
211
+ });
212
+
205
213
  var _mail = require("./services/mail");
206
214
 
207
215
  Object.keys(_mail).forEach(function (key) {
@@ -242,12 +250,12 @@ Object.keys(_sensitive_words).forEach(function (key) {
242
250
  exports[key] = _sensitive_words[key];
243
251
  });
244
252
 
245
- var _x = require("./x");
253
+ var _template_renderer = require("./services/template_renderer");
246
254
 
247
- Object.keys(_x).forEach(function (key) {
255
+ Object.keys(_template_renderer).forEach(function (key) {
248
256
  if (key === "default" || key === "__esModule") return;
249
- if (key in exports && exports[key] === _x[key]) return;
250
- exports[key] = _x[key];
257
+ if (key in exports && exports[key] === _template_renderer[key]) return;
258
+ exports[key] = _template_renderer[key];
251
259
  });
252
260
 
253
261
  var _index = require("./types/index");
@@ -258,6 +266,14 @@ Object.keys(_index).forEach(function (key) {
258
266
  exports[key] = _index[key];
259
267
  });
260
268
 
269
+ var _x = require("./x");
270
+
271
+ Object.keys(_x).forEach(function (key) {
272
+ if (key === "default" || key === "__esModule") return;
273
+ if (key in exports && exports[key] === _x[key]) return;
274
+ exports[key] = _x[key];
275
+ });
276
+
261
277
  var _models = require(".x/models");
262
278
 
263
279
  Object.keys(_models).forEach(function (key) {
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.TemplateRendererService = void 0;
5
+
6
+ class TemplateRendererService {
7
+ constructor() {
8
+ this.serviceName = 'templateRenderer';
9
+ }
10
+
11
+ render(text, data, options) {
12
+ const keys = Object.keys(data);
13
+
14
+ for (const key of keys) {
15
+ text = typeof data[key] === 'function' ? text.replace(new RegExp(`\\{${key}(:.+?)?\\}`, 'g'), (_, params) => {
16
+ return data[key].call(null, ...(params ? params.substring(1) : '').split(','));
17
+ }) : text.replaceAll(`{${key}}`, data[key]);
18
+ }
19
+
20
+ if (options != null && options.code) {
21
+ text = text.replace(/\{\{(.+?)\}\}/g, (_, code) => {
22
+ return eval(`
23
+ (() => {
24
+ const {${keys.join(',')}} = ${JSON.stringify(data)};
25
+ return ${code};
26
+ })()
27
+ `);
28
+ });
29
+ }
30
+
31
+ return text;
32
+ }
33
+
34
+ }
35
+
36
+ exports.TemplateRendererService = TemplateRendererService;
package/lib/_cjs/x.js CHANGED
@@ -15,6 +15,8 @@ var _dispose = require("./services/dispose");
15
15
 
16
16
  var _log = require("./services/log");
17
17
 
18
+ var _template_renderer = require("./services/template_renderer");
19
+
18
20
  const env = JSON.parse(process.env.X_SERVER_ENVS || '{}');
19
21
  const x = {
20
22
  appId: env.APP_ID,
@@ -33,4 +35,4 @@ _fsExtra.default.ensureDirSync(x.dataDir);
33
35
 
34
36
  x.register(new _dispose.DisposeService({
35
37
  disposeOnExit: true
36
- }), new _log.LogService());
38
+ }), new _log.LogService(), new _template_renderer.TemplateRendererService());
package/lib/index.d.ts CHANGED
@@ -23,11 +23,13 @@ export * from './services/captcha';
23
23
  export * from './services/dingtalk';
24
24
  export * from './services/dispose';
25
25
  export * from './services/jwt';
26
+ export * from './services/log';
26
27
  export * from './services/mail';
27
28
  export * from './services/pay';
28
29
  export * from './services/rate_limit';
29
30
  export * from './services/redis';
30
31
  export * from './services/sensitive_words';
31
- export * from './x';
32
+ export * from './services/template_renderer';
32
33
  export * from './types/index';
34
+ export * from './x';
33
35
  export * from '.x/models';
package/lib/index.js CHANGED
@@ -24,13 +24,15 @@ export * from "./services/captcha";
24
24
  export * from "./services/dingtalk";
25
25
  export * from "./services/dispose";
26
26
  export * from "./services/jwt";
27
+ export * from "./services/log";
27
28
  export * from "./services/mail";
28
29
  export * from "./services/pay";
29
30
  export * from "./services/rate_limit";
30
31
  export * from "./services/redis";
31
32
  export * from "./services/sensitive_words";
33
+ export * from "./services/template_renderer";
34
+ export * from "./types/index";
32
35
  export * from "./x"; // @endindex
33
-
34
- export * from "./types/index"; // @ts-ignore
36
+ // @ts-ignore
35
37
 
36
38
  export * from '.x/models';
@@ -0,0 +1,14 @@
1
+ import { BaseService } from './base';
2
+ export interface TemplateRendererServiceRenderOptions {
3
+ /** 是否启用代码渲染 */
4
+ code?: boolean;
5
+ }
6
+ export declare class TemplateRendererService implements BaseService {
7
+ serviceName: string;
8
+ render(text: string, data: Record<string, any>, options?: TemplateRendererServiceRenderOptions): string;
9
+ }
10
+ declare module '../x' {
11
+ interface X {
12
+ templateRenderer: TemplateRendererService;
13
+ }
14
+ }
@@ -0,0 +1,29 @@
1
+ export class TemplateRendererService {
2
+ constructor() {
3
+ this.serviceName = 'templateRenderer';
4
+ }
5
+
6
+ render(text, data, options) {
7
+ const keys = Object.keys(data);
8
+
9
+ for (const key of keys) {
10
+ text = typeof data[key] === 'function' ? text.replace(new RegExp(`\\{${key}(:.+?)?\\}`, 'g'), (_, params) => {
11
+ return data[key].call(null, ...(params ? params.substring(1) : '').split(','));
12
+ }) : text.replaceAll(`{${key}}`, data[key]);
13
+ }
14
+
15
+ if (options != null && options.code) {
16
+ text = text.replace(/\{\{(.+?)\}\}/g, (_, code) => {
17
+ return eval(`
18
+ (() => {
19
+ const {${keys.join(',')}} = ${JSON.stringify(data)};
20
+ return ${code};
21
+ })()
22
+ `);
23
+ });
24
+ }
25
+
26
+ return text;
27
+ }
28
+
29
+ }
package/lib/x.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  import { BaseService } from './services/base';
3
3
  import './services/dispose';
4
4
  import './services/log';
5
+ import './services/template_renderer';
5
6
  export interface X {
6
7
  readonly appId: string;
7
8
  readonly env: NodeJS.ProcessEnv;
package/lib/x.js CHANGED
@@ -3,6 +3,7 @@ import os from 'os';
3
3
  import path from 'path';
4
4
  import { DisposeService } from "./services/dispose";
5
5
  import { LogService } from "./services/log";
6
+ import { TemplateRendererService } from "./services/template_renderer";
6
7
  const env = JSON.parse(process.env.X_SERVER_ENVS || '{}');
7
8
  export const x = {
8
9
  appId: env.APP_ID,
@@ -18,4 +19,4 @@ export const x = {
18
19
  fs.ensureDirSync(x.dataDir);
19
20
  x.register(new DisposeService({
20
21
  disposeOnExit: true
21
- }), new LogService());
22
+ }), new LogService(), new TemplateRendererService());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jayfong/x-server",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "license": "ISC",
5
5
  "sideEffects": false,
6
6
  "main": "lib/_cjs/index.js",