befly 3.17.15 → 3.18.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/checks/config.js CHANGED
@@ -41,7 +41,8 @@ const configSchema = z
41
41
  username: noTrimString,
42
42
  password: noTrimString,
43
43
  database: noTrimString,
44
- max: z.number().min(1)
44
+ max: z.number().min(1),
45
+ stateFilter: z.union([z.literal(0), z.literal(1)]).optional()
45
46
  })
46
47
  .strict(),
47
48
 
@@ -25,7 +25,8 @@
25
25
  "username": "root",
26
26
  "password": "root",
27
27
  "database": "befly_dev",
28
- "max": 10
28
+ "max": 10,
29
+ "stateFilter": 1
29
30
  },
30
31
 
31
32
  "redis": {
@@ -2,12 +2,12 @@
2
2
  {
3
3
  "name": "首页",
4
4
  "path": "/",
5
- "sort": 1
5
+ "sort": 0
6
6
  },
7
7
  {
8
8
  "name": "人员管理",
9
9
  "path": "/people",
10
- "sort": 2,
10
+ "sort": 9000,
11
11
  "children": [
12
12
  {
13
13
  "name": "管理员",
@@ -19,7 +19,7 @@
19
19
  {
20
20
  "name": "权限设置",
21
21
  "path": "/permission",
22
- "sort": 3,
22
+ "sort": 9001,
23
23
  "children": [
24
24
  {
25
25
  "name": "角色管理",
@@ -41,7 +41,7 @@
41
41
  {
42
42
  "name": "配置管理",
43
43
  "path": "/config",
44
- "sort": 4,
44
+ "sort": 9002,
45
45
  "children": [
46
46
  {
47
47
  "name": "字典类型",
@@ -63,7 +63,7 @@
63
63
  {
64
64
  "name": "日志管理",
65
65
  "path": "/log",
66
- "sort": 5,
66
+ "sort": 9003,
67
67
  "children": [
68
68
  {
69
69
  "name": "登录日志",
@@ -355,7 +355,11 @@ export function processJoinOn(on) {
355
355
  return result;
356
356
  }
357
357
 
358
- export function addDefaultStateFilter(where = {}, table, hasJoins = false) {
358
+ export function addDefaultStateFilter(where = {}, table, hasJoins = false, enableStateFilter = true) {
359
+ if (!enableStateFilter) {
360
+ return where;
361
+ }
362
+
359
363
  const hasStateCondition = Object.keys(where).some((key) => key.startsWith("state") || key.includes(".state"));
360
364
  if (hasStateCondition) {
361
365
  return where;
@@ -13,7 +13,7 @@ export const dataOpsMethods = {
13
13
  const { table, where, joins, tableQualifier } = await this.prepareQueryOptions(options, "getCount.options");
14
14
  const hasJoins = Array.isArray(joins) && joins.length > 0;
15
15
 
16
- const whereFiltered = addDefaultStateFilter(where, tableQualifier, hasJoins);
16
+ const whereFiltered = addDefaultStateFilter(where, tableQualifier, hasJoins, this.enableStateFilter);
17
17
  const result = await this.fetchCount({ table: table, joins: joins }, whereFiltered, "COUNT(*) as count");
18
18
 
19
19
  return {
@@ -26,7 +26,7 @@ export const dataOpsMethods = {
26
26
  const { table, fields, where, joins, tableQualifier } = await this.prepareQueryOptions(options, "getOne.options");
27
27
  const hasJoins = Array.isArray(joins) && joins.length > 0;
28
28
 
29
- const whereFiltered = addDefaultStateFilter(where, tableQualifier, hasJoins);
29
+ const whereFiltered = addDefaultStateFilter(where, tableQualifier, hasJoins, this.enableStateFilter);
30
30
  const builder = this.createSqlBuilder().select(fields).from(table).where(whereFiltered);
31
31
  this.applyJoins(builder, joins);
32
32
 
@@ -50,7 +50,7 @@ export const dataOpsMethods = {
50
50
  validatePageLimitRange(prepared, options.table);
51
51
 
52
52
  const hasJoins = Array.isArray(prepared.joins) && prepared.joins.length > 0;
53
- const whereFiltered = addDefaultStateFilter(prepared.where, prepared.tableQualifier, hasJoins);
53
+ const whereFiltered = addDefaultStateFilter(prepared.where, prepared.tableQualifier, hasJoins, this.enableStateFilter);
54
54
  const countResult = await this.fetchCount(prepared, whereFiltered, "COUNT(*) as total");
55
55
  const total = countResult.total;
56
56
 
@@ -102,7 +102,7 @@ export const dataOpsMethods = {
102
102
  const prepared = await this.prepareQueryOptions(prepareOptions, "getAll.options");
103
103
 
104
104
  const hasJoins = Array.isArray(prepared.joins) && prepared.joins.length > 0;
105
- const whereFiltered = addDefaultStateFilter(prepared.where, prepared.tableQualifier, hasJoins);
105
+ const whereFiltered = addDefaultStateFilter(prepared.where, prepared.tableQualifier, hasJoins, this.enableStateFilter);
106
106
  const countResult = await this.fetchCount(prepared, whereFiltered, "COUNT(*) as total");
107
107
  const total = countResult.total;
108
108
 
@@ -150,7 +150,7 @@ export const dataOpsMethods = {
150
150
  validateNoJoinReadOptions(options, "exists", "exists 不支持 joins(请使用显式 query 或拆分查询)");
151
151
  const snakeTable = snakeCase(options.table);
152
152
  const snakeWhere = whereKeysToSnake(clearDeep(options.where || {}));
153
- const whereFiltered = addDefaultStateFilter(snakeWhere, snakeTable, false);
153
+ const whereFiltered = addDefaultStateFilter(snakeWhere, snakeTable, false, this.enableStateFilter);
154
154
 
155
155
  const builder = this.createSqlBuilder().selectRaw("COUNT(1) as cnt").from(snakeTable).where(whereFiltered).limit(1);
156
156
  const { sql, params } = builder.toSelectSql();
@@ -405,7 +405,7 @@ export const dataOpsMethods = {
405
405
  const snakeWhere = whereKeysToSnake(clearDeep(where));
406
406
 
407
407
  const processed = buildUpdateRow({ data: data, now: Date.now(), allowState: true });
408
- const whereFiltered = addDefaultStateFilter(snakeWhere, snakeTable, false);
408
+ const whereFiltered = addDefaultStateFilter(snakeWhere, snakeTable, false, this.enableStateFilter);
409
409
  const builder = this.createSqlBuilder().where(whereFiltered);
410
410
  const { sql, params } = builder.toUpdateSql(snakeTable, processed);
411
411
 
@@ -478,7 +478,7 @@ export const dataOpsMethods = {
478
478
  const snakeField = snakeCase(field);
479
479
 
480
480
  const snakeWhere = whereKeysToSnake(clearDeep(where));
481
- const whereFiltered = addDefaultStateFilter(snakeWhere, snakeTable, false);
481
+ const whereFiltered = addDefaultStateFilter(snakeWhere, snakeTable, false, this.enableStateFilter);
482
482
  const builder = this.createSqlBuilder().where(whereFiltered);
483
483
  const { sql: whereClause, params: whereParams } = builder.getWhereConditions();
484
484
 
@@ -19,6 +19,7 @@ function DbHelper(options) {
19
19
  this.sql = options.sql || null;
20
20
  this.isTransaction = Boolean(options.sql);
21
21
  this.idMode = options.idMode === "autoId" ? "autoId" : "timeId";
22
+ this.enableStateFilter = options.stateFilter === 0 ? false : true;
22
23
  }
23
24
 
24
25
  Object.assign(DbHelper.prototype, builderMethods, executeMethods, dataOpsMethods, transactionMethods);
@@ -26,7 +26,7 @@ export const transactionMethods = {
26
26
 
27
27
  try {
28
28
  return await sql.begin(async (tx) => {
29
- const trans = new this.constructor({ redis: this.redis, dbName: this.dbName, sql: tx, idMode: this.idMode });
29
+ const trans = new this.constructor({ redis: this.redis, dbName: this.dbName, sql: tx, idMode: this.idMode, stateFilter: this.enableStateFilter ? 1 : 0 });
30
30
  const result = await callback(trans);
31
31
  if (isBeflyResponse(result) && result.code !== 0) {
32
32
  throw new TransAbortError(result);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "befly",
3
- "version": "3.17.15",
4
- "gitHead": "aa84ccde6c76bc45727464c30d4680c379815110",
3
+ "version": "3.18.0",
4
+ "gitHead": "1d9785d976aaa758c598e30055570a607b0a0574",
5
5
  "private": false,
6
6
  "description": "Befly - 为 Bun 专属打造的 JavaScript API 接口框架核心引擎",
7
7
  "keywords": [
package/plugins/mysql.js CHANGED
@@ -19,7 +19,8 @@ export default {
19
19
  redis: befly.redis,
20
20
  dbName: befly.config?.mysql?.database,
21
21
  sql: Connect.getMysql(),
22
- idMode: befly.config?.mysql?.idMode
22
+ idMode: befly.config?.mysql?.idMode,
23
+ stateFilter: befly.config?.mysql?.stateFilter
23
24
  });
24
25
 
25
26
  return dbManager;
@@ -67,7 +67,8 @@ export async function prepareSyncDbBaseContext(mysqlConfig) {
67
67
  redis: null,
68
68
  dbName: mysqlConfig.database,
69
69
  sql: Connect.getMysql(),
70
- idMode: mysqlConfig.idMode
70
+ idMode: mysqlConfig.idMode,
71
+ stateFilter: mysqlConfig.stateFilter
71
72
  });
72
73
 
73
74
  const dbColumns = await querySyncDbColumns(mysql);