@ai0x0/utils 0.6.1 → 0.7.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 (44) hide show
  1. package/.agents/skills/ai0x0-utils/backend/SKILL.md +8 -5
  2. package/SKILL.md +8 -5
  3. package/es/backend/actions/create-get-action.js +11 -7
  4. package/es/backend/actions/create-get-list-action.js +11 -6
  5. package/es/backend/actions/get-list-data.d.ts +1 -1
  6. package/es/backend/actions/get-list-data.js +12 -5
  7. package/es/backend/actions/get-list-query-core.d.ts +26 -5
  8. package/es/backend/actions/get-list-query-core.js +92 -22
  9. package/es/backend/actions/get-list-query.d.ts +2 -0
  10. package/es/backend/actions/get-list-query.js +7 -4
  11. package/es/backend/actions/index.d.ts +1 -0
  12. package/es/backend/actions/index.js +2 -1
  13. package/es/backend/actions/paging.d.ts +11 -0
  14. package/es/backend/actions/paging.js +32 -0
  15. package/es/backend/route-operation/write-operation-core.js +12 -5
  16. package/es/backend/schemas/common.d.ts +2 -2
  17. package/es/backend/schemas/common.js +1 -1
  18. package/es/backend/sqlite/actions/create-get-action.js +9 -6
  19. package/es/backend/sqlite/actions/create-get-list-action.js +7 -5
  20. package/es/backend/sqlite/actions/get-list-data.d.ts +1 -1
  21. package/es/backend/sqlite/actions/get-list-data.js +11 -5
  22. package/es/backend/sqlite/actions/get-list-query.d.ts +2 -0
  23. package/es/backend/sqlite/actions/get-list-query.js +10 -6
  24. package/lib/backend/actions/create-get-action.js +3 -1
  25. package/lib/backend/actions/create-get-list-action.js +3 -1
  26. package/lib/backend/actions/get-list-data.d.ts +1 -1
  27. package/lib/backend/actions/get-list-data.js +8 -3
  28. package/lib/backend/actions/get-list-query-core.d.ts +26 -5
  29. package/lib/backend/actions/get-list-query-core.js +73 -18
  30. package/lib/backend/actions/get-list-query.d.ts +2 -0
  31. package/lib/backend/actions/get-list-query.js +3 -3
  32. package/lib/backend/actions/index.d.ts +1 -0
  33. package/lib/backend/actions/index.js +7 -2
  34. package/lib/backend/actions/paging.d.ts +11 -0
  35. package/lib/backend/actions/paging.js +50 -0
  36. package/lib/backend/schemas/common.d.ts +2 -2
  37. package/lib/backend/schemas/common.js +1 -1
  38. package/lib/backend/sqlite/actions/create-get-action.js +3 -1
  39. package/lib/backend/sqlite/actions/create-get-list-action.js +3 -1
  40. package/lib/backend/sqlite/actions/get-list-data.d.ts +1 -1
  41. package/lib/backend/sqlite/actions/get-list-data.js +8 -3
  42. package/lib/backend/sqlite/actions/get-list-query.d.ts +2 -0
  43. package/lib/backend/sqlite/actions/get-list-query.js +3 -3
  44. package/package.json +1 -1
@@ -32,8 +32,9 @@ function createGetAction({
32
32
  table
33
33
  }) {
34
34
  return async (params, { scope }) => {
35
+ const exposed = Object.keys(bodySchema.shape);
35
36
  const fields = {};
36
- for (const key of Object.keys(bodySchema.shape)) {
37
+ for (const key of exposed) {
37
38
  const field = table[key];
38
39
  if (field) {
39
40
  fields[key] = field;
@@ -42,6 +43,7 @@ function createGetAction({
42
43
  const { query, countQuery } = (0, import_get_list_query.getListQuery)({
43
44
  db,
44
45
  fields,
46
+ filterable: exposed,
45
47
  jsonArrayFields,
46
48
  params,
47
49
  scope,
@@ -33,8 +33,9 @@ function createGetListAction({
33
33
  }) {
34
34
  return async (params, { scope }) => {
35
35
  const { current, pageSize, ...other } = params;
36
+ const exposed = Object.keys(bodySchema.shape);
36
37
  const fields = {};
37
- for (const key of Object.keys(bodySchema.shape)) {
38
+ for (const key of exposed) {
38
39
  const field = table[key];
39
40
  if (field) {
40
41
  fields[key] = field;
@@ -43,6 +44,7 @@ function createGetListAction({
43
44
  const { query, countQuery } = (0, import_get_list_query.getListQuery)({
44
45
  db,
45
46
  fields,
47
+ filterable: exposed,
46
48
  jsonArrayFields,
47
49
  params: other,
48
50
  scope,
@@ -1,5 +1,5 @@
1
1
  import { getListQuery } from "./get-list-query.js";
2
- export declare function getListData({ query, countQuery, pageSize, current, }: {
2
+ export declare function getListData({ query, countQuery, pageSize: rawPageSize, current: rawCurrent, }: {
3
3
  bodySchema?: any;
4
4
  current?: number;
5
5
  pageSize?: number;
@@ -22,6 +22,7 @@ __export(get_list_data_exports, {
22
22
  getListData: () => getListData
23
23
  });
24
24
  module.exports = __toCommonJS(get_list_data_exports);
25
+ var import_paging = require("../../actions/paging");
25
26
  async function runSelect(query) {
26
27
  const executable = query;
27
28
  if (executable.all) {
@@ -35,11 +36,15 @@ async function runSelect(query) {
35
36
  function getListData({
36
37
  query,
37
38
  countQuery,
38
- pageSize = 10,
39
- current = 1
39
+ pageSize: rawPageSize,
40
+ current: rawCurrent
40
41
  }) {
42
+ const { current, pageSize } = (0, import_paging.normalizePaging)({
43
+ current: rawCurrent,
44
+ pageSize: rawPageSize
45
+ });
41
46
  return async () => {
42
- const dataQuery = query.limit(+pageSize).offset((+current - 1) * +pageSize);
47
+ const dataQuery = query.limit(pageSize).offset((current - 1) * pageSize);
43
48
  const data = await runSelect(dataQuery);
44
49
  const [{ count }] = await runSelect(countQuery);
45
50
  return { data, total: Number(count) };
@@ -5,6 +5,8 @@ import { type ListQueryParams } from "../../actions/get-list-query-core.js";
5
5
  export declare function getListQuery<TTable extends BaseTable, TSelection extends SelectedFields>(args: {
6
6
  db: any;
7
7
  fields: TSelection;
8
+ /** 允许被当成筛选条件的键。不传等于不限制,见核心里的说明。 */
9
+ filterable?: readonly string[];
8
10
  jsonArrayFields?: string[];
9
11
  /** 必填。与 pg 那套同义,见 backend/scope.ts。 */
10
12
  scope: ScopeArg;
@@ -25,13 +25,13 @@ module.exports = __toCommonJS(get_list_query_exports);
25
25
  var import_drizzle_orm = require("drizzle-orm");
26
26
  var import_get_list_query_core = require("../../actions/get-list-query-core");
27
27
  var run = (0, import_get_list_query_core.createGetListQuery)({
28
- contains: (column, keyword) => (0, import_drizzle_orm.like)(column, `%${keyword}%`),
28
+ contains: (column, pattern) => import_drizzle_orm.sql`${column} LIKE ${pattern} ESCAPE '\\'`,
29
29
  // json_each 展开出来的行里,值在 tag.value 上(pg 那个 _text 变体是直接给字符串的)——
30
30
  // 这是两边唯一一处连字段名都不同的地方。
31
- jsonArrayContains: (column, keyword) => import_drizzle_orm.sql`
31
+ jsonArrayContains: (column, pattern) => import_drizzle_orm.sql`
32
32
  EXISTS (
33
33
  SELECT 1 FROM json_each(${column}) tag
34
- WHERE tag.value LIKE ${`%${keyword}%`}
34
+ WHERE tag.value LIKE ${pattern} ESCAPE '\\'
35
35
  )
36
36
  `
37
37
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai0x0/utils",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "description": "AI0x0 utils",
5
5
  "keywords": [
6
6
  "ai0x0"