@nocobase/server 1.9.20 → 1.9.21

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/helper.d.ts CHANGED
@@ -17,3 +17,362 @@ export declare const getCommandFullName: (command: Command) => string;
17
17
  export declare const tsxRerunning: () => Promise<void>;
18
18
  export declare const enablePerfHooks: (app: Application) => void;
19
19
  export declare function getBodyLimit(): string;
20
+ export declare function createContextVariablesScope(ctx: any): {
21
+ timezone: any;
22
+ now: string;
23
+ getField: (path: any) => any;
24
+ vars: {
25
+ ctx: {
26
+ state: any;
27
+ };
28
+ $system: {
29
+ now: string;
30
+ };
31
+ $date: {
32
+ now: string;
33
+ today: ({ now, timezone, field }: {
34
+ now?: any;
35
+ timezone?: string | number;
36
+ field?: {
37
+ timezone?: string | number;
38
+ };
39
+ }) => any;
40
+ yesterday: ({ now, timezone, field }: {
41
+ now?: any;
42
+ timezone?: string | number;
43
+ field?: {
44
+ timezone?: string | number;
45
+ };
46
+ }) => any;
47
+ tomorrow: ({ now, timezone, field }: {
48
+ now?: any;
49
+ timezone?: string | number;
50
+ field?: {
51
+ timezone?: string | number;
52
+ };
53
+ }) => any;
54
+ thisWeek: ({ now, timezone, field }: {
55
+ now?: any;
56
+ timezone?: string | number;
57
+ field?: {
58
+ timezone?: string | number;
59
+ };
60
+ }) => any;
61
+ lastWeek: ({ now, timezone, field }: {
62
+ now?: any;
63
+ timezone?: string | number;
64
+ field?: {
65
+ timezone?: string | number;
66
+ };
67
+ }) => any;
68
+ nextWeek: ({ now, timezone, field }: {
69
+ now?: any;
70
+ timezone?: string | number;
71
+ field?: {
72
+ timezone?: string | number;
73
+ };
74
+ }) => any;
75
+ thisIsoWeek: ({ now, timezone, field }: {
76
+ now?: any;
77
+ timezone?: string | number;
78
+ field?: {
79
+ timezone?: string | number;
80
+ };
81
+ }) => any;
82
+ lastIsoWeek: ({ now, timezone, field }: {
83
+ now?: any;
84
+ timezone?: string | number;
85
+ field?: {
86
+ timezone?: string | number;
87
+ };
88
+ }) => any;
89
+ nextIsoWeek: ({ now, timezone, field }: {
90
+ now?: any;
91
+ timezone?: string | number;
92
+ field?: {
93
+ timezone?: string | number;
94
+ };
95
+ }) => any;
96
+ thisMonth: ({ now, timezone, field }: {
97
+ now?: any;
98
+ timezone?: string | number;
99
+ field?: {
100
+ timezone?: string | number;
101
+ };
102
+ }) => any;
103
+ lastMonth: ({ now, timezone, field }: {
104
+ now?: any;
105
+ timezone?: string | number;
106
+ field?: {
107
+ timezone?: string | number;
108
+ };
109
+ }) => any;
110
+ nextMonth: ({ now, timezone, field }: {
111
+ now?: any;
112
+ timezone?: string | number;
113
+ field?: {
114
+ timezone?: string | number;
115
+ };
116
+ }) => any;
117
+ thisQuarter: ({ now, timezone, field }: {
118
+ now?: any;
119
+ timezone?: string | number;
120
+ field?: {
121
+ timezone?: string | number;
122
+ };
123
+ }) => any;
124
+ lastQuarter: ({ now, timezone, field }: {
125
+ now?: any;
126
+ timezone?: string | number;
127
+ field?: {
128
+ timezone?: string | number;
129
+ };
130
+ }) => any;
131
+ nextQuarter: ({ now, timezone, field }: {
132
+ now?: any;
133
+ timezone?: string | number;
134
+ field?: {
135
+ timezone?: string | number;
136
+ };
137
+ }) => any;
138
+ thisYear: ({ now, timezone, field }: {
139
+ now?: any;
140
+ timezone?: string | number;
141
+ field?: {
142
+ timezone?: string | number;
143
+ };
144
+ }) => any;
145
+ lastYear: ({ now, timezone, field }: {
146
+ now?: any;
147
+ timezone?: string | number;
148
+ field?: {
149
+ timezone?: string | number;
150
+ };
151
+ }) => any;
152
+ nextYear: ({ now, timezone, field }: {
153
+ now?: any;
154
+ timezone?: string | number;
155
+ field?: {
156
+ timezone?: string | number;
157
+ };
158
+ }) => any;
159
+ last7Days: ({ now, timezone, field }: {
160
+ now?: any;
161
+ timezone?: string | number;
162
+ field?: {
163
+ timezone?: string | number;
164
+ };
165
+ }) => (string | number)[];
166
+ next7Days: ({ now, timezone, field }: {
167
+ now?: any;
168
+ timezone?: string | number;
169
+ field?: {
170
+ timezone?: string | number;
171
+ };
172
+ }) => (string | number)[];
173
+ last30Days: ({ now, timezone, field }: {
174
+ now?: any;
175
+ timezone?: string | number;
176
+ field?: {
177
+ timezone?: string | number;
178
+ };
179
+ }) => (string | number)[];
180
+ next30Days: ({ now, timezone, field }: {
181
+ now?: any;
182
+ timezone?: string | number;
183
+ field?: {
184
+ timezone?: string | number;
185
+ };
186
+ }) => (string | number)[];
187
+ last90Days: ({ now, timezone, field }: {
188
+ now?: any;
189
+ timezone?: string | number;
190
+ field?: {
191
+ timezone?: string | number;
192
+ };
193
+ }) => (string | number)[];
194
+ next90Days: ({ now, timezone, field }: {
195
+ now?: any;
196
+ timezone?: string | number;
197
+ field?: {
198
+ timezone?: string | number;
199
+ };
200
+ }) => (string | number)[];
201
+ };
202
+ $nDate: {
203
+ now: string;
204
+ today: ({ now, timezone, field }: {
205
+ now?: any;
206
+ timezone?: string | number;
207
+ field?: {
208
+ timezone?: string | number;
209
+ };
210
+ }) => any;
211
+ yesterday: ({ now, timezone, field }: {
212
+ now?: any;
213
+ timezone?: string | number;
214
+ field?: {
215
+ timezone?: string | number;
216
+ };
217
+ }) => any;
218
+ tomorrow: ({ now, timezone, field }: {
219
+ now?: any;
220
+ timezone?: string | number;
221
+ field?: {
222
+ timezone?: string | number;
223
+ };
224
+ }) => any;
225
+ thisWeek: ({ now, timezone, field }: {
226
+ now?: any;
227
+ timezone?: string | number;
228
+ field?: {
229
+ timezone?: string | number;
230
+ };
231
+ }) => any;
232
+ lastWeek: ({ now, timezone, field }: {
233
+ now?: any;
234
+ timezone?: string | number;
235
+ field?: {
236
+ timezone?: string | number;
237
+ };
238
+ }) => any;
239
+ nextWeek: ({ now, timezone, field }: {
240
+ now?: any;
241
+ timezone?: string | number;
242
+ field?: {
243
+ timezone?: string | number;
244
+ };
245
+ }) => any;
246
+ thisIsoWeek: ({ now, timezone, field }: {
247
+ now?: any;
248
+ timezone?: string | number;
249
+ field?: {
250
+ timezone?: string | number;
251
+ };
252
+ }) => any;
253
+ lastIsoWeek: ({ now, timezone, field }: {
254
+ now?: any;
255
+ timezone?: string | number;
256
+ field?: {
257
+ timezone?: string | number;
258
+ };
259
+ }) => any;
260
+ nextIsoWeek: ({ now, timezone, field }: {
261
+ now?: any;
262
+ timezone?: string | number;
263
+ field?: {
264
+ timezone?: string | number;
265
+ };
266
+ }) => any;
267
+ thisMonth: ({ now, timezone, field }: {
268
+ now?: any;
269
+ timezone?: string | number;
270
+ field?: {
271
+ timezone?: string | number;
272
+ };
273
+ }) => any;
274
+ lastMonth: ({ now, timezone, field }: {
275
+ now?: any;
276
+ timezone?: string | number;
277
+ field?: {
278
+ timezone?: string | number;
279
+ };
280
+ }) => any;
281
+ nextMonth: ({ now, timezone, field }: {
282
+ now?: any;
283
+ timezone?: string | number;
284
+ field?: {
285
+ timezone?: string | number;
286
+ };
287
+ }) => any;
288
+ thisQuarter: ({ now, timezone, field }: {
289
+ now?: any;
290
+ timezone?: string | number;
291
+ field?: {
292
+ timezone?: string | number;
293
+ };
294
+ }) => any;
295
+ lastQuarter: ({ now, timezone, field }: {
296
+ now?: any;
297
+ timezone?: string | number;
298
+ field?: {
299
+ timezone?: string | number;
300
+ };
301
+ }) => any;
302
+ nextQuarter: ({ now, timezone, field }: {
303
+ now?: any;
304
+ timezone?: string | number;
305
+ field?: {
306
+ timezone?: string | number;
307
+ };
308
+ }) => any;
309
+ thisYear: ({ now, timezone, field }: {
310
+ now?: any;
311
+ timezone?: string | number;
312
+ field?: {
313
+ timezone?: string | number;
314
+ };
315
+ }) => any;
316
+ lastYear: ({ now, timezone, field }: {
317
+ now?: any;
318
+ timezone?: string | number;
319
+ field?: {
320
+ timezone?: string | number;
321
+ };
322
+ }) => any;
323
+ nextYear: ({ now, timezone, field }: {
324
+ now?: any;
325
+ timezone?: string | number;
326
+ field?: {
327
+ timezone?: string | number;
328
+ };
329
+ }) => any;
330
+ last7Days: ({ now, timezone, field }: {
331
+ now?: any;
332
+ timezone?: string | number;
333
+ field?: {
334
+ timezone?: string | number;
335
+ };
336
+ }) => (string | number)[];
337
+ next7Days: ({ now, timezone, field }: {
338
+ now?: any;
339
+ timezone?: string | number;
340
+ field?: {
341
+ timezone?: string | number;
342
+ };
343
+ }) => (string | number)[];
344
+ last30Days: ({ now, timezone, field }: {
345
+ now?: any;
346
+ timezone?: string | number;
347
+ field?: {
348
+ timezone?: string | number;
349
+ };
350
+ }) => (string | number)[];
351
+ next30Days: ({ now, timezone, field }: {
352
+ now?: any;
353
+ timezone?: string | number;
354
+ field?: {
355
+ timezone?: string | number;
356
+ };
357
+ }) => (string | number)[];
358
+ last90Days: ({ now, timezone, field }: {
359
+ now?: any;
360
+ timezone?: string | number;
361
+ field?: {
362
+ timezone?: string | number;
363
+ };
364
+ }) => (string | number)[];
365
+ next90Days: ({ now, timezone, field }: {
366
+ now?: any;
367
+ timezone?: string | number;
368
+ field?: {
369
+ timezone?: string | number;
370
+ };
371
+ }) => (string | number)[];
372
+ };
373
+ $user: ({ fields }: {
374
+ fields: any;
375
+ }) => Promise<any>;
376
+ $nRole: any;
377
+ };
378
+ };
package/lib/helper.js CHANGED
@@ -38,6 +38,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
38
38
  var helper_exports = {};
39
39
  __export(helper_exports, {
40
40
  createAppProxy: () => createAppProxy,
41
+ createContextVariablesScope: () => createContextVariablesScope,
41
42
  createI18n: () => createI18n,
42
43
  createResourcer: () => createResourcer,
43
44
  enablePerfHooks: () => enablePerfHooks,
@@ -193,9 +194,66 @@ function getBodyLimit() {
193
194
  return process.env.REQUEST_BODY_LIMIT || "10mb";
194
195
  }
195
196
  __name(getBodyLimit, "getBodyLimit");
197
+ function getUser(ctx) {
198
+ return async ({ fields }) => {
199
+ var _a, _b;
200
+ const userFields = fields.filter((f) => f && ctx.db.getFieldByPath("users." + f));
201
+ (_a = ctx.logger) == null ? void 0 : _a.info("filter-parse: ", { userFields });
202
+ if (!ctx.state.currentUser) {
203
+ return;
204
+ }
205
+ if (!userFields.length) {
206
+ return;
207
+ }
208
+ const user = await ctx.db.getRepository("users").findOne({
209
+ filterByTk: ctx.state.currentUser.id,
210
+ fields: userFields
211
+ });
212
+ (_b = ctx.logger) == null ? void 0 : _b.info("filter-parse: ", {
213
+ $user: user == null ? void 0 : user.toJSON()
214
+ });
215
+ return user;
216
+ };
217
+ }
218
+ __name(getUser, "getUser");
219
+ function isNumeric(str) {
220
+ if (typeof str === "number") return true;
221
+ if (typeof str != "string") return false;
222
+ return !isNaN(str) && !isNaN(parseFloat(str));
223
+ }
224
+ __name(isNumeric, "isNumeric");
225
+ function createContextVariablesScope(ctx) {
226
+ const state = JSON.parse(JSON.stringify(ctx.state));
227
+ return {
228
+ timezone: ctx.get("x-timezone"),
229
+ now: (/* @__PURE__ */ new Date()).toISOString(),
230
+ getField: /* @__PURE__ */ __name((path) => {
231
+ const fieldPath = path.split(".").filter((p) => !p.startsWith("$") && !isNumeric(p)).join(".");
232
+ const { resourceName } = ctx.action;
233
+ return ctx.db.getFieldByPath(`${resourceName}.${fieldPath}`);
234
+ }, "getField"),
235
+ vars: {
236
+ ctx: {
237
+ state
238
+ },
239
+ // @deprecated
240
+ $system: {
241
+ now: (/* @__PURE__ */ new Date()).toISOString()
242
+ },
243
+ // @deprecated
244
+ $date: (0, import_utils.getDateVars)(),
245
+ // 新的命名方式,防止和 formily 内置变量冲突
246
+ $nDate: (0, import_utils.getDateVars)(),
247
+ $user: getUser(ctx),
248
+ $nRole: ctx.state.currentRole === "__union__" ? ctx.state.currentRoles : ctx.state.currentRole
249
+ }
250
+ };
251
+ }
252
+ __name(createContextVariablesScope, "createContextVariablesScope");
196
253
  // Annotate the CommonJS export names for ESM import in node:
197
254
  0 && (module.exports = {
198
255
  createAppProxy,
256
+ createContextVariablesScope,
199
257
  createI18n,
200
258
  createResourcer,
201
259
  enablePerfHooks,
package/lib/index.d.ts CHANGED
@@ -23,3 +23,4 @@ export * from './redis-connection-manager';
23
23
  export declare const OFFICIAL_PLUGIN_PREFIX = "@nocobase/plugin-";
24
24
  export { appendToBuiltInPlugins, findAllPlugins, findBuiltInPlugins, findLocalPlugins, packageNameTrim, } from './plugin-manager/findPackageNames';
25
25
  export { runPluginStaticImports } from './run-plugin-static-imports';
26
+ export { createContextVariablesScope } from './helper';
package/lib/index.js CHANGED
@@ -39,6 +39,7 @@ var src_exports = {};
39
39
  __export(src_exports, {
40
40
  OFFICIAL_PLUGIN_PREFIX: () => OFFICIAL_PLUGIN_PREFIX,
41
41
  appendToBuiltInPlugins: () => import_findPackageNames.appendToBuiltInPlugins,
42
+ createContextVariablesScope: () => import_helper.createContextVariablesScope,
42
43
  default: () => import_application.Application,
43
44
  findAllPlugins: () => import_findPackageNames.findAllPlugins,
44
45
  findBuiltInPlugins: () => import_findPackageNames.findBuiltInPlugins,
@@ -64,11 +65,13 @@ __reExport(src_exports, require("./worker-id-allocator"), module.exports);
64
65
  __reExport(src_exports, require("./redis-connection-manager"), module.exports);
65
66
  var import_findPackageNames = require("./plugin-manager/findPackageNames");
66
67
  var import_run_plugin_static_imports = require("./run-plugin-static-imports");
68
+ var import_helper = require("./helper");
67
69
  const OFFICIAL_PLUGIN_PREFIX = "@nocobase/plugin-";
68
70
  // Annotate the CommonJS export names for ESM import in node:
69
71
  0 && (module.exports = {
70
72
  OFFICIAL_PLUGIN_PREFIX,
71
73
  appendToBuiltInPlugins,
74
+ createContextVariablesScope,
72
75
  findAllPlugins,
73
76
  findBuiltInPlugins,
74
77
  findLocalPlugins,
@@ -31,64 +31,13 @@ __export(parse_variables_exports, {
31
31
  });
32
32
  module.exports = __toCommonJS(parse_variables_exports);
33
33
  var import_utils = require("@nocobase/utils");
34
- function getUser(ctx) {
35
- return async ({ fields }) => {
36
- var _a, _b;
37
- const userFields = fields.filter((f) => f && ctx.db.getFieldByPath("users." + f));
38
- (_a = ctx.logger) == null ? void 0 : _a.info("filter-parse: ", { userFields });
39
- if (!ctx.state.currentUser) {
40
- return;
41
- }
42
- if (!userFields.length) {
43
- return;
44
- }
45
- const user = await ctx.db.getRepository("users").findOne({
46
- filterByTk: ctx.state.currentUser.id,
47
- fields: userFields
48
- });
49
- (_b = ctx.logger) == null ? void 0 : _b.info("filter-parse: ", {
50
- $user: user == null ? void 0 : user.toJSON()
51
- });
52
- return user;
53
- };
54
- }
55
- __name(getUser, "getUser");
56
- function isNumeric(str) {
57
- if (typeof str === "number") return true;
58
- if (typeof str != "string") return false;
59
- return !isNaN(str) && !isNaN(parseFloat(str));
60
- }
61
- __name(isNumeric, "isNumeric");
34
+ var import_helper = require("../helper");
62
35
  async function parseVariables(ctx, next) {
63
36
  const filter = ctx.action.params.filter;
64
37
  if (!filter) {
65
38
  return next();
66
39
  }
67
- const state = JSON.parse(JSON.stringify(ctx.state));
68
- ctx.action.params.filter = await (0, import_utils.parseFilter)(filter, {
69
- timezone: ctx.get("x-timezone"),
70
- now: (/* @__PURE__ */ new Date()).toISOString(),
71
- getField: /* @__PURE__ */ __name((path) => {
72
- const fieldPath = path.split(".").filter((p) => !p.startsWith("$") && !isNumeric(p)).join(".");
73
- const { resourceName } = ctx.action;
74
- return ctx.db.getFieldByPath(`${resourceName}.${fieldPath}`);
75
- }, "getField"),
76
- vars: {
77
- ctx: {
78
- state
79
- },
80
- // @deprecated
81
- $system: {
82
- now: (/* @__PURE__ */ new Date()).toISOString()
83
- },
84
- // @deprecated
85
- $date: (0, import_utils.getDateVars)(),
86
- // 新的命名方式,防止和 formily 内置变量冲突
87
- $nDate: (0, import_utils.getDateVars)(),
88
- $user: getUser(ctx),
89
- $nRole: ctx.state.currentRole === "__union__" ? ctx.state.currentRoles : ctx.state.currentRole
90
- }
91
- });
40
+ ctx.action.params.filter = await (0, import_utils.parseFilter)(filter, (0, import_helper.createContextVariablesScope)(ctx));
92
41
  await next();
93
42
  }
94
43
  __name(parseVariables, "parseVariables");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/server",
3
- "version": "1.9.20",
3
+ "version": "1.9.21",
4
4
  "main": "lib/index.js",
5
5
  "types": "./lib/index.d.ts",
6
6
  "license": "AGPL-3.0",
@@ -10,20 +10,20 @@
10
10
  "@koa/cors": "^5.0.0",
11
11
  "@koa/multer": "^3.1.0",
12
12
  "@koa/router": "^13.1.0",
13
- "@nocobase/acl": "1.9.20",
14
- "@nocobase/actions": "1.9.20",
15
- "@nocobase/auth": "1.9.20",
16
- "@nocobase/cache": "1.9.20",
17
- "@nocobase/data-source-manager": "1.9.20",
18
- "@nocobase/database": "1.9.20",
19
- "@nocobase/evaluators": "1.9.20",
20
- "@nocobase/lock-manager": "1.9.20",
21
- "@nocobase/logger": "1.9.20",
22
- "@nocobase/resourcer": "1.9.20",
23
- "@nocobase/sdk": "1.9.20",
24
- "@nocobase/snowflake-id": "1.9.20",
25
- "@nocobase/telemetry": "1.9.20",
26
- "@nocobase/utils": "1.9.20",
13
+ "@nocobase/acl": "1.9.21",
14
+ "@nocobase/actions": "1.9.21",
15
+ "@nocobase/auth": "1.9.21",
16
+ "@nocobase/cache": "1.9.21",
17
+ "@nocobase/data-source-manager": "1.9.21",
18
+ "@nocobase/database": "1.9.21",
19
+ "@nocobase/evaluators": "1.9.21",
20
+ "@nocobase/lock-manager": "1.9.21",
21
+ "@nocobase/logger": "1.9.21",
22
+ "@nocobase/resourcer": "1.9.21",
23
+ "@nocobase/sdk": "1.9.21",
24
+ "@nocobase/snowflake-id": "1.9.21",
25
+ "@nocobase/telemetry": "1.9.21",
26
+ "@nocobase/utils": "1.9.21",
27
27
  "@types/decompress": "4.2.7",
28
28
  "@types/ini": "^1.3.31",
29
29
  "@types/koa-send": "^4.1.3",
@@ -59,5 +59,5 @@
59
59
  "@types/serve-handler": "^6.1.1",
60
60
  "@types/ws": "^8.5.5"
61
61
  },
62
- "gitHead": "21cd385ff885f28851e7e7c04c5f5a429b910c9f"
62
+ "gitHead": "b932b22c5582e558d81ab6dbd7e00c83914bcfb9"
63
63
  }