@taruvi/refine-providers 1.3.4-beta.1 → 1.3.4-beta.3
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/README.md +8 -5
- package/dist/index.cjs +50 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +99 -30
- package/dist/index.d.ts +99 -30
- package/dist/index.js +48 -26
- package/dist/index.js.map +1 -1
- package/package.json +2 -6
package/README.md
CHANGED
|
@@ -115,23 +115,26 @@ List `getList` filters use an explicit **`TaruviListFilters`** shape:
|
|
|
115
115
|
|
|
116
116
|
Legacy Refine **`CrudFilter[]`** is still accepted: all field leaves → flat array; a single root `and`/`or` object → logical object; mixed lists fall back to the JSON tree. Bracket keys from `convertRefineFilters` remain for helpers / Storage flatten mode.
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
Use **`TaruviCrudOperator`** / **`TaruviFieldFilter`** for type-safe filters (including PostgreSQL range/array ops and `search`). Pass them to Refine hooks with **`toRefineFilters()`** — Refine’s `CrudOperators` type is narrower than the runtime set.
|
|
119
119
|
|
|
120
120
|
```tsx
|
|
121
|
+
import { useList } from "@refinedev/core";
|
|
122
|
+
import { toRefineFilters } from "@taruvi/refine-providers";
|
|
123
|
+
|
|
121
124
|
const { data } = useList({
|
|
122
125
|
resource: "posts",
|
|
123
|
-
filters: [
|
|
126
|
+
filters: toRefineFilters([
|
|
124
127
|
{ field: "status", operator: "eq", value: "published" },
|
|
125
128
|
{ field: "views", operator: "gte", value: 100 },
|
|
129
|
+
{ field: "slot", operator: "roverlaps", value: "[2024-01-01,2024-12-31)" },
|
|
126
130
|
{ field: "title", operator: "containss", value: "refine" },
|
|
127
|
-
|
|
128
|
-
],
|
|
131
|
+
]),
|
|
129
132
|
});
|
|
130
133
|
```
|
|
131
134
|
|
|
132
135
|
**Refine → backend operator mapping (important):**
|
|
133
136
|
|
|
134
|
-
Wire suffixes match the platform (`contains` = case-insensitive, `containss` = case-sensitive). Refine aliases map to the same tokens, e.g. `icontains` → `contains`. See `REFINE_OPERATOR_MAP` in [`src/
|
|
137
|
+
Wire suffixes match the platform (`contains` = case-insensitive, `containss` = case-sensitive). Refine aliases map to the same tokens, e.g. `icontains` → `contains`. See `REFINE_OPERATOR_MAP` in [`src/filterTypes.ts`](src/filterTypes.ts). Details: [docs/filters.md](docs/filters.md).
|
|
135
138
|
|
|
136
139
|
**More operators:**
|
|
137
140
|
|
package/dist/index.cjs
CHANGED
|
@@ -11,9 +11,9 @@ var DataLoader__default = /*#__PURE__*/_interopDefault(DataLoader);
|
|
|
11
11
|
|
|
12
12
|
// package.json
|
|
13
13
|
var package_default = {
|
|
14
|
-
version: "1.3.4-beta.
|
|
14
|
+
version: "1.3.4-beta.3"};
|
|
15
15
|
|
|
16
|
-
// src/
|
|
16
|
+
// src/filterTypes.ts
|
|
17
17
|
var REFINE_OPERATOR_MAP = {
|
|
18
18
|
// Equality
|
|
19
19
|
eq: "",
|
|
@@ -76,6 +76,18 @@ var REFINE_OPERATOR_MAP = {
|
|
|
76
76
|
ilike: "ilike",
|
|
77
77
|
search: "search"
|
|
78
78
|
};
|
|
79
|
+
function hasTaruviOperator(operator) {
|
|
80
|
+
return operator in REFINE_OPERATOR_MAP;
|
|
81
|
+
}
|
|
82
|
+
function taruviOperatorSuffix(operator) {
|
|
83
|
+
if (!hasTaruviOperator(operator)) return void 0;
|
|
84
|
+
return REFINE_OPERATOR_MAP[operator];
|
|
85
|
+
}
|
|
86
|
+
function toRefineFilters(filters) {
|
|
87
|
+
return filters;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// src/utils.ts
|
|
79
91
|
var COMMA_VALUE_OPERATORS = /* @__PURE__ */ new Set([
|
|
80
92
|
"in",
|
|
81
93
|
"nin",
|
|
@@ -112,7 +124,7 @@ function isFlatFilterList(filters) {
|
|
|
112
124
|
if (leaf.value === void 0 || leaf.value === null && leaf.operator !== "null") {
|
|
113
125
|
return false;
|
|
114
126
|
}
|
|
115
|
-
if (
|
|
127
|
+
if (!hasTaruviOperator(leaf.operator)) {
|
|
116
128
|
return false;
|
|
117
129
|
}
|
|
118
130
|
return true;
|
|
@@ -149,7 +161,7 @@ function collectFlatLeaves(filters) {
|
|
|
149
161
|
if (leaf.value === void 0 || leaf.value === null && leaf.operator !== "null") {
|
|
150
162
|
continue;
|
|
151
163
|
}
|
|
152
|
-
if (
|
|
164
|
+
if (!hasTaruviOperator(leaf.operator)) {
|
|
153
165
|
console.warn(`Unknown Refine operator: ${leaf.operator}`);
|
|
154
166
|
return false;
|
|
155
167
|
}
|
|
@@ -165,7 +177,7 @@ function collectFlatLeaves(filters) {
|
|
|
165
177
|
return leaves;
|
|
166
178
|
}
|
|
167
179
|
function refineOperatorToBackendKey(operator) {
|
|
168
|
-
const suffix =
|
|
180
|
+
const suffix = taruviOperatorSuffix(operator);
|
|
169
181
|
if (suffix === void 0) return operator;
|
|
170
182
|
return suffix === "" ? "eq" : suffix;
|
|
171
183
|
}
|
|
@@ -182,7 +194,7 @@ function encodeLeafFlat(field, operator, value, params) {
|
|
|
182
194
|
if (value === void 0 || value === null && operator !== "null") {
|
|
183
195
|
return;
|
|
184
196
|
}
|
|
185
|
-
const suffix =
|
|
197
|
+
const suffix = taruviOperatorSuffix(operator);
|
|
186
198
|
if (suffix === void 0) {
|
|
187
199
|
console.warn(`Unknown Refine operator: ${operator}`);
|
|
188
200
|
return;
|
|
@@ -208,7 +220,7 @@ function encodeCrudFilterBracket(filter, path, out) {
|
|
|
208
220
|
if (value === void 0 || value === null && operator !== "null") {
|
|
209
221
|
return;
|
|
210
222
|
}
|
|
211
|
-
const suffix =
|
|
223
|
+
const suffix = taruviOperatorSuffix(operator);
|
|
212
224
|
if (suffix === void 0) {
|
|
213
225
|
console.warn(`Unknown Refine operator: ${operator}`);
|
|
214
226
|
return;
|
|
@@ -235,7 +247,7 @@ function crudFilterToBackendNodeOrNull(filter) {
|
|
|
235
247
|
if (leaf.value === void 0 || leaf.value === null && leaf.operator !== "null") {
|
|
236
248
|
return null;
|
|
237
249
|
}
|
|
238
|
-
if (
|
|
250
|
+
if (!hasTaruviOperator(leaf.operator)) {
|
|
239
251
|
console.warn(`Unknown Refine operator: ${leaf.operator}`);
|
|
240
252
|
return null;
|
|
241
253
|
}
|
|
@@ -373,7 +385,7 @@ function formatHaving(having) {
|
|
|
373
385
|
if (value === void 0 || value === null && operator !== "null") {
|
|
374
386
|
continue;
|
|
375
387
|
}
|
|
376
|
-
const suffix =
|
|
388
|
+
const suffix = taruviOperatorSuffix(operator);
|
|
377
389
|
if (suffix === void 0) {
|
|
378
390
|
console.warn(`Unknown operator in having clause: ${operator}`);
|
|
379
391
|
continue;
|
|
@@ -385,15 +397,6 @@ function formatHaving(having) {
|
|
|
385
397
|
}
|
|
386
398
|
return params.length > 0 ? params.join(",") : void 0;
|
|
387
399
|
}
|
|
388
|
-
function handleError(error) {
|
|
389
|
-
if (error instanceof Error) {
|
|
390
|
-
throw error;
|
|
391
|
-
}
|
|
392
|
-
if (typeof error === "object" && error !== null && "message" in error) {
|
|
393
|
-
throw new Error(String(error.message));
|
|
394
|
-
}
|
|
395
|
-
throw new Error("Unknown error occurred");
|
|
396
|
-
}
|
|
397
400
|
|
|
398
401
|
// src/dataProvider.ts
|
|
399
402
|
function applyAggregations(query, meta) {
|
|
@@ -464,8 +467,18 @@ function applyAllowedActions(query, meta) {
|
|
|
464
467
|
if (!meta?.allowedActions?.length) return query;
|
|
465
468
|
return query.allowedActions(meta.allowedActions);
|
|
466
469
|
}
|
|
470
|
+
function applySearchAndFields(query, meta) {
|
|
471
|
+
if (!meta) return query;
|
|
472
|
+
let result = query;
|
|
473
|
+
const search = meta.search?.trim();
|
|
474
|
+
if (search) result = result.search(search);
|
|
475
|
+
const select = meta.select;
|
|
476
|
+
const fields = typeof select === "string" ? select.trim() : Array.isArray(select) ? select.map(String).join(",") : "";
|
|
477
|
+
if (fields) result = result.fields(fields);
|
|
478
|
+
return result;
|
|
479
|
+
}
|
|
467
480
|
function isGraphQuery(meta) {
|
|
468
|
-
return !!(meta?.format || meta?.
|
|
481
|
+
return !!(meta?.format || meta?.relationship_type || meta?.include || meta?.depth);
|
|
469
482
|
}
|
|
470
483
|
function buildGraphQuery(client, tableName, meta, recordId) {
|
|
471
484
|
let query = new sdk.Database(client).from(tableName);
|
|
@@ -473,7 +486,7 @@ function buildGraphQuery(client, tableName, meta, recordId) {
|
|
|
473
486
|
if (meta?.format) query = query.format(meta.format);
|
|
474
487
|
if (meta?.include) query = query.include(meta.include);
|
|
475
488
|
if (meta?.depth) query = query.depth(meta.depth);
|
|
476
|
-
if (meta?.
|
|
489
|
+
if (meta?.relationship_type) query = query.types(meta.relationship_type);
|
|
477
490
|
return query;
|
|
478
491
|
}
|
|
479
492
|
function dataProvider(client) {
|
|
@@ -501,6 +514,7 @@ function dataProvider(client) {
|
|
|
501
514
|
query = applyPagination(query, pagination);
|
|
502
515
|
query = applyPopulate(query, taruviMeta);
|
|
503
516
|
query = applyAggregations(query, taruviMeta);
|
|
517
|
+
query = applySearchAndFields(query, taruviMeta);
|
|
504
518
|
query = applyAllowedActions(query, taruviMeta);
|
|
505
519
|
const response = await query.execute();
|
|
506
520
|
return { data: response.data, total: response.total };
|
|
@@ -704,7 +718,9 @@ function storageDataProvider(client) {
|
|
|
704
718
|
return { data: { id: path } };
|
|
705
719
|
},
|
|
706
720
|
getApiUrl: () => baseApiUrl,
|
|
707
|
-
getMany: async () =>
|
|
721
|
+
getMany: async () => {
|
|
722
|
+
throw new Error("getMany is not supported for storage resources");
|
|
723
|
+
},
|
|
708
724
|
createMany: async (params) => {
|
|
709
725
|
const { resource, variables, meta } = params;
|
|
710
726
|
const taruviMeta = meta;
|
|
@@ -714,7 +730,7 @@ function storageDataProvider(client) {
|
|
|
714
730
|
const fileMetadatas = files.map((_, i) => metadatas[i] || {});
|
|
715
731
|
const response = await new sdk.Storage(client).from(bucket).upload({ files, paths: filePaths, metadatas: fileMetadatas }).execute();
|
|
716
732
|
const uploaded = response.data?.successful?.map((s) => s.object) ?? [];
|
|
717
|
-
return { data: uploaded.length > 0 ? uploaded
|
|
733
|
+
return { data: uploaded.length > 0 ? uploaded : [response.data] };
|
|
718
734
|
},
|
|
719
735
|
deleteMany: async (params) => {
|
|
720
736
|
const { resource, ids, meta } = params;
|
|
@@ -1156,6 +1172,7 @@ function analyticsDataProvider(client) {
|
|
|
1156
1172
|
}
|
|
1157
1173
|
};
|
|
1158
1174
|
}
|
|
1175
|
+
var isBrowser = typeof window !== "undefined";
|
|
1159
1176
|
exports._cachedUser = null;
|
|
1160
1177
|
function authProvider(client) {
|
|
1161
1178
|
const auth = new sdk.Auth(client);
|
|
@@ -1225,11 +1242,15 @@ function authProvider(client) {
|
|
|
1225
1242
|
return null;
|
|
1226
1243
|
}
|
|
1227
1244
|
const user = response.data ?? response;
|
|
1228
|
-
exports._cachedUser = user;
|
|
1245
|
+
if (isBrowser) exports._cachedUser = user;
|
|
1229
1246
|
return user;
|
|
1230
1247
|
},
|
|
1231
1248
|
getPermissions: async () => {
|
|
1232
|
-
|
|
1249
|
+
let user = isBrowser ? exports._cachedUser : null;
|
|
1250
|
+
if (!user) {
|
|
1251
|
+
const response = await auth.getCurrentUser();
|
|
1252
|
+
user = response ? response.data ?? response : null;
|
|
1253
|
+
}
|
|
1233
1254
|
if (!user) {
|
|
1234
1255
|
return null;
|
|
1235
1256
|
}
|
|
@@ -1243,13 +1264,14 @@ function authProvider(client) {
|
|
|
1243
1264
|
}
|
|
1244
1265
|
};
|
|
1245
1266
|
}
|
|
1267
|
+
var isBrowser2 = typeof window !== "undefined";
|
|
1246
1268
|
function accessControlProvider(client, options) {
|
|
1247
1269
|
const policy = new sdk.Policy(client);
|
|
1248
1270
|
const auth = new sdk.Auth(client);
|
|
1249
1271
|
const { batchDelayMs = 50 } = options ?? {};
|
|
1250
1272
|
const permissionLoader = new DataLoader__default.default(
|
|
1251
1273
|
async (checks) => {
|
|
1252
|
-
let currentUser = exports._cachedUser;
|
|
1274
|
+
let currentUser = isBrowser2 ? exports._cachedUser : null;
|
|
1253
1275
|
if (!currentUser) {
|
|
1254
1276
|
try {
|
|
1255
1277
|
const response = await auth.getCurrentUser();
|
|
@@ -1362,12 +1384,14 @@ exports.encodeCrudFilterBracket = encodeCrudFilterBracket;
|
|
|
1362
1384
|
exports.encodeFlatFilterListToParams = encodeFlatFilterListToParams;
|
|
1363
1385
|
exports.formatRefineLeafValue = formatRefineLeafValue;
|
|
1364
1386
|
exports.functionsDataProvider = functionsDataProvider;
|
|
1365
|
-
exports.
|
|
1387
|
+
exports.hasTaruviOperator = hasTaruviOperator;
|
|
1366
1388
|
exports.isFlatFilterList = isFlatFilterList;
|
|
1367
1389
|
exports.isLogicalCrudFilter = isLogicalCrudFilter;
|
|
1368
1390
|
exports.normalizeTaruviListFilters = normalizeTaruviListFilters;
|
|
1369
1391
|
exports.refineOperatorToBackendKey = refineOperatorToBackendKey;
|
|
1370
1392
|
exports.storageDataProvider = storageDataProvider;
|
|
1393
|
+
exports.taruviOperatorSuffix = taruviOperatorSuffix;
|
|
1394
|
+
exports.toRefineFilters = toRefineFilters;
|
|
1371
1395
|
exports.userDataProvider = userDataProvider;
|
|
1372
1396
|
//# sourceMappingURL=index.cjs.map
|
|
1373
1397
|
//# sourceMappingURL=index.cjs.map
|