@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.
- package/.agents/skills/ai0x0-utils/backend/SKILL.md +8 -5
- package/SKILL.md +8 -5
- package/es/backend/actions/create-get-action.js +11 -7
- package/es/backend/actions/create-get-list-action.js +11 -6
- package/es/backend/actions/get-list-data.d.ts +1 -1
- package/es/backend/actions/get-list-data.js +12 -5
- package/es/backend/actions/get-list-query-core.d.ts +26 -5
- package/es/backend/actions/get-list-query-core.js +92 -22
- package/es/backend/actions/get-list-query.d.ts +2 -0
- package/es/backend/actions/get-list-query.js +7 -4
- package/es/backend/actions/index.d.ts +1 -0
- package/es/backend/actions/index.js +2 -1
- package/es/backend/actions/paging.d.ts +11 -0
- package/es/backend/actions/paging.js +32 -0
- package/es/backend/route-operation/write-operation-core.js +12 -5
- package/es/backend/schemas/common.d.ts +2 -2
- package/es/backend/schemas/common.js +1 -1
- package/es/backend/sqlite/actions/create-get-action.js +9 -6
- package/es/backend/sqlite/actions/create-get-list-action.js +7 -5
- package/es/backend/sqlite/actions/get-list-data.d.ts +1 -1
- package/es/backend/sqlite/actions/get-list-data.js +11 -5
- package/es/backend/sqlite/actions/get-list-query.d.ts +2 -0
- package/es/backend/sqlite/actions/get-list-query.js +10 -6
- package/lib/backend/actions/create-get-action.js +3 -1
- package/lib/backend/actions/create-get-list-action.js +3 -1
- package/lib/backend/actions/get-list-data.d.ts +1 -1
- package/lib/backend/actions/get-list-data.js +8 -3
- package/lib/backend/actions/get-list-query-core.d.ts +26 -5
- package/lib/backend/actions/get-list-query-core.js +73 -18
- package/lib/backend/actions/get-list-query.d.ts +2 -0
- package/lib/backend/actions/get-list-query.js +3 -3
- package/lib/backend/actions/index.d.ts +1 -0
- package/lib/backend/actions/index.js +7 -2
- package/lib/backend/actions/paging.d.ts +11 -0
- package/lib/backend/actions/paging.js +50 -0
- package/lib/backend/schemas/common.d.ts +2 -2
- package/lib/backend/schemas/common.js +1 -1
- package/lib/backend/sqlite/actions/create-get-action.js +3 -1
- package/lib/backend/sqlite/actions/create-get-list-action.js +3 -1
- package/lib/backend/sqlite/actions/get-list-data.d.ts +1 -1
- package/lib/backend/sqlite/actions/get-list-data.js +8 -3
- package/lib/backend/sqlite/actions/get-list-query.d.ts +2 -0
- package/lib/backend/sqlite/actions/get-list-query.js +3 -3
- 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
|
|
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
|
|
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
|
|
39
|
-
current
|
|
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(
|
|
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,
|
|
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,
|
|
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 ${
|
|
34
|
+
WHERE tag.value LIKE ${pattern} ESCAPE '\\'
|
|
35
35
|
)
|
|
36
36
|
`
|
|
37
37
|
});
|