@toolplex/app-server 0.1.0 → 0.1.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,aAAa,CAAC;AAItE,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,eAAe,GACtB,IAAI,CA2BN"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,aAAa,CAAC;AAItE,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,eAAe,GACtB,IAAI,CAyCN"}
@@ -10,14 +10,79 @@ export function registerDataRoutes(fastify, config) {
10
10
  const params = parseFetchParams(request.query);
11
11
  const response = await definition.fetch(params);
12
12
  validateFetchResponse(resource, response);
13
+ // Apply column filters (_cf_ prefixed) post-fetch
14
+ // These are auto-applied by the library so developers don't need to handle them
15
+ const columnFilters = extractColumnFilters(params.filters);
16
+ let filteredRows = response.rows;
17
+ let filteredTotal = response.total;
18
+ if (columnFilters.length > 0) {
19
+ filteredRows = applyColumnFilters(filteredRows, columnFilters);
20
+ filteredTotal = filteredRows.length;
21
+ // Re-paginate after filtering
22
+ const start = (params.page - 1) * params.pageSize;
23
+ filteredRows = filteredRows.slice(start, start + params.pageSize);
24
+ }
13
25
  const result = {
14
- rows: response.rows,
15
- total: response.total,
26
+ rows: filteredRows,
27
+ total: filteredTotal,
16
28
  page: params.page,
17
29
  pageSize: params.pageSize,
18
- totalPages: Math.ceil(response.total / params.pageSize),
30
+ totalPages: Math.ceil(filteredTotal / params.pageSize),
19
31
  };
20
32
  return reply.send(result);
21
33
  });
22
34
  }
35
+ function extractColumnFilters(filters) {
36
+ if (!filters)
37
+ return [];
38
+ const result = [];
39
+ for (const [key, value] of Object.entries(filters)) {
40
+ if (!key.startsWith("_cf_"))
41
+ continue;
42
+ const rest = key.slice(4); // remove _cf_ prefix
43
+ const parts = rest.split("__");
44
+ const columnKey = parts[0];
45
+ const operator = (parts[1] || "contains");
46
+ result.push({ columnKey, operator, value });
47
+ }
48
+ return result;
49
+ }
50
+ function resolveKey(row, key) {
51
+ const parts = key.split(".");
52
+ let current = row;
53
+ for (const part of parts) {
54
+ if (current === null || current === undefined || typeof current !== "object")
55
+ return undefined;
56
+ current = current[part];
57
+ }
58
+ return current;
59
+ }
60
+ function applyColumnFilters(rows, filters) {
61
+ return rows.filter((row) => filters.every((f) => {
62
+ const cellValue = resolveKey(row, f.columnKey);
63
+ switch (f.operator) {
64
+ case "empty":
65
+ return (cellValue === null ||
66
+ cellValue === undefined ||
67
+ cellValue === "");
68
+ case "not_empty":
69
+ return (cellValue !== null &&
70
+ cellValue !== undefined &&
71
+ cellValue !== "");
72
+ case "equals":
73
+ return (String(cellValue ?? "").toLowerCase() ===
74
+ f.value.toLowerCase());
75
+ case "contains":
76
+ return String(cellValue ?? "")
77
+ .toLowerCase()
78
+ .includes(f.value.toLowerCase());
79
+ case "gt":
80
+ return Number(cellValue) > Number(f.value);
81
+ case "lt":
82
+ return Number(cellValue) < Number(f.value);
83
+ default:
84
+ return true;
85
+ }
86
+ }));
87
+ }
23
88
  //# sourceMappingURL=data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,UAAU,kBAAkB,CAChC,OAAwB,EACxB,MAAuB;IAEvB,OAAO,CAAC,GAAG,CAGR,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACpC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,QAAQ,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhD,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAsB;YAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;SACxD,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toolplex/app-server",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Fastify plugin for serving ToolPlex App Pages — page definitions, paginated data, actions, and agent context",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",