@robinpath/table 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.
package/README.md CHANGED
@@ -1,107 +1,107 @@
1
- # @robinpath/table
2
-
3
- > Tabular data operations: filter, sort, join, group, aggregate, pivot — like a lightweight DataFrame
4
-
5
- ![Category](https://img.shields.io/badge/category-Analytics-blue) ![Functions](https://img.shields.io/badge/functions-24-green) ![Auth](https://img.shields.io/badge/auth-none-lightgrey) ![License](https://img.shields.io/badge/license-MIT-brightgreen)
6
-
7
- ## Why use this module?
8
-
9
- The `table` module lets you:
10
-
11
- - Create a table from array of objects or columns+rows
12
- - Select specific columns
13
- - Filter rows by condition
14
- - Sort rows by a field
15
- - Group rows by a field
16
-
17
- All functions are callable directly from RobinPath scripts with a simple, consistent API.
18
-
19
- ## Installation
20
-
21
- ```bash
22
- npm install @robinpath/table
23
- ```
24
-
25
- ## Quick Start
26
-
27
- No credentials needed — start using it right away:
28
-
29
- ```robinpath
30
- table.select $data ["name", "age"]
31
- ```
32
-
33
- ## Available Functions
34
-
35
- | Function | Description |
36
- |----------|-------------|
37
- | `table.create` | Create a table from array of objects or columns+rows |
38
- | `table.select` | Select specific columns |
39
- | `table.where` | Filter rows by condition |
40
- | `table.orderBy` | Sort rows by a field |
41
- | `table.groupBy` | Group rows by a field |
42
- | `table.aggregate` | Aggregate grouped data |
43
- | `table.join` | Join two tables |
44
- | `table.distinct` | Remove duplicate rows |
45
- | `table.limit` | Take first N rows |
46
- | `table.offset` | Skip first N rows |
47
- | `table.addColumn` | Add a column with a default value |
48
- | `table.removeColumn` | Remove column(s) |
49
- | `table.renameColumn` | Rename a column |
50
- | `table.pivot` | Pivot table |
51
- | `table.unpivot` | Unpivot/melt table |
52
- | `table.count` | Count rows |
53
- | `table.sum` | Sum a numeric column |
54
- | `table.avg` | Average a numeric column |
55
- | `table.min` | Minimum of a column |
56
- | `table.max` | Maximum of a column |
57
- | `table.head` | First N rows |
58
- | `table.tail` | Last N rows |
59
- | `table.columns` | Get column names |
60
- | `table.shape` | Get row and column counts |
61
-
62
- ## Examples
63
-
64
- ### Select specific columns
65
-
66
- ```robinpath
67
- table.select $data ["name", "age"]
68
- ```
69
-
70
- ### Filter rows by condition
71
-
72
- ```robinpath
73
- table.where $data "age" "gt" 25
74
- ```
75
-
76
- ### Sort rows by a field
77
-
78
- ```robinpath
79
- table.orderBy $data "age" "desc"
80
- ```
81
-
82
- ## Integration with RobinPath
83
-
84
- ```typescript
85
- import { RobinPath } from "@wiredwp/robinpath";
86
- import Module from "@robinpath/table";
87
-
88
- const rp = new RobinPath();
89
- rp.registerModule(Module.name, Module.functions);
90
- rp.registerModuleMeta(Module.name, Module.functionMetadata);
91
-
92
- const result = await rp.executeScript(`
93
- table.select $data ["name", "age"]
94
- `);
95
- ```
96
-
97
- ## Full API Reference
98
-
99
- See [MODULE.md](./MODULE.md) for complete documentation including all parameters, return types, error handling, and advanced examples.
100
-
101
- ## Related Modules
102
-
103
- - [`@robinpath/json`](../json) — JSON module for complementary functionality
104
-
105
- ## License
106
-
107
- MIT
1
+ # @robinpath/table
2
+
3
+ > Tabular data operations: filter, sort, join, group, aggregate, pivot — like a lightweight DataFrame
4
+
5
+ ![Category](https://img.shields.io/badge/category-Analytics-blue) ![Functions](https://img.shields.io/badge/functions-24-green) ![Auth](https://img.shields.io/badge/auth-none-lightgrey) ![License](https://img.shields.io/badge/license-MIT-brightgreen)
6
+
7
+ ## Why use this module?
8
+
9
+ The `table` module lets you:
10
+
11
+ - Create a table from array of objects or columns+rows
12
+ - Select specific columns
13
+ - Filter rows by condition
14
+ - Sort rows by a field
15
+ - Group rows by a field
16
+
17
+ All functions are callable directly from RobinPath scripts with a simple, consistent API.
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ npm install @robinpath/table
23
+ ```
24
+
25
+ ## Quick Start
26
+
27
+ No credentials needed — start using it right away:
28
+
29
+ ```robinpath
30
+ table.select $data ["name", "age"]
31
+ ```
32
+
33
+ ## Available Functions
34
+
35
+ | Function | Description |
36
+ |----------|-------------|
37
+ | `table.create` | Create a table from array of objects or columns+rows |
38
+ | `table.select` | Select specific columns |
39
+ | `table.where` | Filter rows by condition |
40
+ | `table.orderBy` | Sort rows by a field |
41
+ | `table.groupBy` | Group rows by a field |
42
+ | `table.aggregate` | Aggregate grouped data |
43
+ | `table.join` | Join two tables |
44
+ | `table.distinct` | Remove duplicate rows |
45
+ | `table.limit` | Take first N rows |
46
+ | `table.offset` | Skip first N rows |
47
+ | `table.addColumn` | Add a column with a default value |
48
+ | `table.removeColumn` | Remove column(s) |
49
+ | `table.renameColumn` | Rename a column |
50
+ | `table.pivot` | Pivot table |
51
+ | `table.unpivot` | Unpivot/melt table |
52
+ | `table.count` | Count rows |
53
+ | `table.sum` | Sum a numeric column |
54
+ | `table.avg` | Average a numeric column |
55
+ | `table.min` | Minimum of a column |
56
+ | `table.max` | Maximum of a column |
57
+ | `table.head` | First N rows |
58
+ | `table.tail` | Last N rows |
59
+ | `table.columns` | Get column names |
60
+ | `table.shape` | Get row and column counts |
61
+
62
+ ## Examples
63
+
64
+ ### Select specific columns
65
+
66
+ ```robinpath
67
+ table.select $data ["name", "age"]
68
+ ```
69
+
70
+ ### Filter rows by condition
71
+
72
+ ```robinpath
73
+ table.where $data "age" "gt" 25
74
+ ```
75
+
76
+ ### Sort rows by a field
77
+
78
+ ```robinpath
79
+ table.orderBy $data "age" "desc"
80
+ ```
81
+
82
+ ## Integration with RobinPath
83
+
84
+ ```typescript
85
+ import { RobinPath } from "@wiredwp/robinpath";
86
+ import Module from "@robinpath/table";
87
+
88
+ const rp = new RobinPath();
89
+ rp.registerModule(Module.name, Module.functions);
90
+ rp.registerModuleMeta(Module.name, Module.functionMetadata);
91
+
92
+ const result = await rp.executeScript(`
93
+ table.select $data ["name", "age"]
94
+ `);
95
+ ```
96
+
97
+ ## Full API Reference
98
+
99
+ See [MODULE.md](./MODULE.md) for complete documentation including all parameters, return types, error handling, and advanced examples.
100
+
101
+ ## Related Modules
102
+
103
+ - [`@robinpath/json`](../json) — JSON module for complementary functionality
104
+
105
+ ## License
106
+
107
+ MIT
package/package.json CHANGED
@@ -1,13 +1,43 @@
1
1
  {
2
2
  "name": "@robinpath/table",
3
- "version": "0.1.0",
4
- "publishConfig": { "access": "public" },
3
+ "version": "0.1.1",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
5
7
  "type": "module",
6
8
  "main": "dist/index.js",
7
9
  "types": "dist/index.d.ts",
8
- "exports": { ".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" } },
9
- "files": ["dist"],
10
- "scripts": { "build": "tsc", "test": "node --import tsx --test tests/*.test.ts" },
11
- "peerDependencies": { "@wiredwp/robinpath": ">=0.20.0" },
12
- "devDependencies": { "@wiredwp/robinpath": "^0.30.1", "tsx": "^4.19.0", "typescript": "^5.6.0" }
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "test": "node --import tsx --test tests/*.test.ts"
22
+ },
23
+ "peerDependencies": {
24
+ "@robinpath/core": ">=0.20.0"
25
+ },
26
+ "devDependencies": {
27
+ "@robinpath/core": "^0.30.1",
28
+ "tsx": "^4.19.0",
29
+ "typescript": "^5.6.0"
30
+ },
31
+ "description": "Tabular data operations: filter, sort, join, group, aggregate, pivot — like a lightweight DataFrame",
32
+ "keywords": [
33
+ "table",
34
+ "analytics"
35
+ ],
36
+ "license": "MIT",
37
+ "robinpath": {
38
+ "category": "analytics",
39
+ "type": "integration",
40
+ "auth": "none",
41
+ "functionCount": 24
42
+ }
13
43
  }
package/dist/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import type { ModuleAdapter } from "@wiredwp/robinpath";
2
- declare const TableModule: ModuleAdapter;
3
- export default TableModule;
4
- export { TableModule };
5
- export { TableFunctions, TableFunctionMetadata, TableModuleMetadata } from "./table.js";
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,QAAA,MAAM,WAAW,EAAE,aAAuK,CAAC;AAC3L,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js DELETED
@@ -1,6 +0,0 @@
1
- import { TableFunctions, TableFunctionMetadata, TableModuleMetadata } from "./table.js";
2
- const TableModule = { name: "table", functions: TableFunctions, functionMetadata: TableFunctionMetadata, moduleMetadata: TableModuleMetadata, global: false };
3
- export default TableModule;
4
- export { TableModule };
5
- export { TableFunctions, TableFunctionMetadata, TableModuleMetadata } from "./table.js";
6
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxF,MAAM,WAAW,GAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,qBAA4B,EAAE,cAAc,EAAE,mBAA0B,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3L,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
package/dist/table.d.ts DELETED
@@ -1,321 +0,0 @@
1
- import type { BuiltinHandler } from "@wiredwp/robinpath";
2
- export declare const TableFunctions: Record<string, BuiltinHandler>;
3
- export declare const TableFunctionMetadata: {
4
- create: {
5
- description: string;
6
- parameters: {
7
- name: string;
8
- dataType: string;
9
- description: string;
10
- formInputType: string;
11
- required: boolean;
12
- }[];
13
- returnType: string;
14
- returnDescription: string;
15
- example: string;
16
- };
17
- select: {
18
- description: string;
19
- parameters: {
20
- name: string;
21
- dataType: string;
22
- description: string;
23
- formInputType: string;
24
- required: boolean;
25
- }[];
26
- returnType: string;
27
- returnDescription: string;
28
- example: string;
29
- };
30
- where: {
31
- description: string;
32
- parameters: {
33
- name: string;
34
- dataType: string;
35
- description: string;
36
- formInputType: string;
37
- required: boolean;
38
- }[];
39
- returnType: string;
40
- returnDescription: string;
41
- example: string;
42
- };
43
- orderBy: {
44
- description: string;
45
- parameters: {
46
- name: string;
47
- dataType: string;
48
- description: string;
49
- formInputType: string;
50
- required: boolean;
51
- }[];
52
- returnType: string;
53
- returnDescription: string;
54
- example: string;
55
- };
56
- groupBy: {
57
- description: string;
58
- parameters: {
59
- name: string;
60
- dataType: string;
61
- description: string;
62
- formInputType: string;
63
- required: boolean;
64
- }[];
65
- returnType: string;
66
- returnDescription: string;
67
- example: string;
68
- };
69
- aggregate: {
70
- description: string;
71
- parameters: {
72
- name: string;
73
- dataType: string;
74
- description: string;
75
- formInputType: string;
76
- required: boolean;
77
- }[];
78
- returnType: string;
79
- returnDescription: string;
80
- example: string;
81
- };
82
- join: {
83
- description: string;
84
- parameters: {
85
- name: string;
86
- dataType: string;
87
- description: string;
88
- formInputType: string;
89
- required: boolean;
90
- }[];
91
- returnType: string;
92
- returnDescription: string;
93
- example: string;
94
- };
95
- distinct: {
96
- description: string;
97
- parameters: {
98
- name: string;
99
- dataType: string;
100
- description: string;
101
- formInputType: string;
102
- required: boolean;
103
- }[];
104
- returnType: string;
105
- returnDescription: string;
106
- example: string;
107
- };
108
- limit: {
109
- description: string;
110
- parameters: {
111
- name: string;
112
- dataType: string;
113
- description: string;
114
- formInputType: string;
115
- required: boolean;
116
- }[];
117
- returnType: string;
118
- returnDescription: string;
119
- example: string;
120
- };
121
- offset: {
122
- description: string;
123
- parameters: {
124
- name: string;
125
- dataType: string;
126
- description: string;
127
- formInputType: string;
128
- required: boolean;
129
- }[];
130
- returnType: string;
131
- returnDescription: string;
132
- example: string;
133
- };
134
- addColumn: {
135
- description: string;
136
- parameters: {
137
- name: string;
138
- dataType: string;
139
- description: string;
140
- formInputType: string;
141
- required: boolean;
142
- }[];
143
- returnType: string;
144
- returnDescription: string;
145
- example: string;
146
- };
147
- removeColumn: {
148
- description: string;
149
- parameters: {
150
- name: string;
151
- dataType: string;
152
- description: string;
153
- formInputType: string;
154
- required: boolean;
155
- }[];
156
- returnType: string;
157
- returnDescription: string;
158
- example: string;
159
- };
160
- renameColumn: {
161
- description: string;
162
- parameters: {
163
- name: string;
164
- dataType: string;
165
- description: string;
166
- formInputType: string;
167
- required: boolean;
168
- }[];
169
- returnType: string;
170
- returnDescription: string;
171
- example: string;
172
- };
173
- pivot: {
174
- description: string;
175
- parameters: {
176
- name: string;
177
- dataType: string;
178
- description: string;
179
- formInputType: string;
180
- required: boolean;
181
- }[];
182
- returnType: string;
183
- returnDescription: string;
184
- example: string;
185
- };
186
- unpivot: {
187
- description: string;
188
- parameters: {
189
- name: string;
190
- dataType: string;
191
- description: string;
192
- formInputType: string;
193
- required: boolean;
194
- }[];
195
- returnType: string;
196
- returnDescription: string;
197
- example: string;
198
- };
199
- count: {
200
- description: string;
201
- parameters: {
202
- name: string;
203
- dataType: string;
204
- description: string;
205
- formInputType: string;
206
- required: boolean;
207
- }[];
208
- returnType: string;
209
- returnDescription: string;
210
- example: string;
211
- };
212
- sum: {
213
- description: string;
214
- parameters: {
215
- name: string;
216
- dataType: string;
217
- description: string;
218
- formInputType: string;
219
- required: boolean;
220
- }[];
221
- returnType: string;
222
- returnDescription: string;
223
- example: string;
224
- };
225
- avg: {
226
- description: string;
227
- parameters: {
228
- name: string;
229
- dataType: string;
230
- description: string;
231
- formInputType: string;
232
- required: boolean;
233
- }[];
234
- returnType: string;
235
- returnDescription: string;
236
- example: string;
237
- };
238
- min: {
239
- description: string;
240
- parameters: {
241
- name: string;
242
- dataType: string;
243
- description: string;
244
- formInputType: string;
245
- required: boolean;
246
- }[];
247
- returnType: string;
248
- returnDescription: string;
249
- example: string;
250
- };
251
- max: {
252
- description: string;
253
- parameters: {
254
- name: string;
255
- dataType: string;
256
- description: string;
257
- formInputType: string;
258
- required: boolean;
259
- }[];
260
- returnType: string;
261
- returnDescription: string;
262
- example: string;
263
- };
264
- head: {
265
- description: string;
266
- parameters: {
267
- name: string;
268
- dataType: string;
269
- description: string;
270
- formInputType: string;
271
- required: boolean;
272
- }[];
273
- returnType: string;
274
- returnDescription: string;
275
- example: string;
276
- };
277
- tail: {
278
- description: string;
279
- parameters: {
280
- name: string;
281
- dataType: string;
282
- description: string;
283
- formInputType: string;
284
- required: boolean;
285
- }[];
286
- returnType: string;
287
- returnDescription: string;
288
- example: string;
289
- };
290
- columns: {
291
- description: string;
292
- parameters: {
293
- name: string;
294
- dataType: string;
295
- description: string;
296
- formInputType: string;
297
- required: boolean;
298
- }[];
299
- returnType: string;
300
- returnDescription: string;
301
- example: string;
302
- };
303
- shape: {
304
- description: string;
305
- parameters: {
306
- name: string;
307
- dataType: string;
308
- description: string;
309
- formInputType: string;
310
- required: boolean;
311
- }[];
312
- returnType: string;
313
- returnDescription: string;
314
- example: string;
315
- };
316
- };
317
- export declare const TableModuleMetadata: {
318
- description: string;
319
- methods: string[];
320
- };
321
- //# sourceMappingURL=table.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAoC,MAAM,oBAAoB,CAAC;AA6S3F,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAIzD,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBjC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC"}
package/dist/table.js DELETED
@@ -1,338 +0,0 @@
1
- const create = (args) => {
2
- const input = args[0];
3
- if (Array.isArray(input))
4
- return [...input];
5
- if (typeof input === "object" && input !== null) {
6
- const obj = input;
7
- if (obj.columns && obj.rows) {
8
- return obj.rows.map((row) => {
9
- const r = {};
10
- obj.columns.forEach((col, i) => { r[col] = row[i]; });
11
- return r;
12
- });
13
- }
14
- }
15
- return [];
16
- };
17
- const select = (args) => {
18
- const table = (args[0] ?? []);
19
- const columns = (args[1] ?? []);
20
- return table.map((row) => {
21
- const r = {};
22
- for (const col of columns)
23
- r[col] = row[col];
24
- return r;
25
- });
26
- };
27
- const where = (args) => {
28
- const table = (args[0] ?? []);
29
- const field = String(args[1] ?? "");
30
- const operator = String(args[2] ?? "eq");
31
- const value = args[3];
32
- return table.filter((row) => {
33
- const v = row[field];
34
- switch (operator) {
35
- case "eq": return v === value;
36
- case "neq": return v !== value;
37
- case "gt": return Number(v) > Number(value);
38
- case "lt": return Number(v) < Number(value);
39
- case "gte": return Number(v) >= Number(value);
40
- case "lte": return Number(v) <= Number(value);
41
- case "contains": return String(v).includes(String(value));
42
- case "startsWith": return String(v).startsWith(String(value));
43
- case "endsWith": return String(v).endsWith(String(value));
44
- case "in": return Array.isArray(value) && value.includes(v);
45
- case "notIn": return Array.isArray(value) && !value.includes(v);
46
- case "isNull": return v === null || v === undefined;
47
- case "notNull": return v !== null && v !== undefined;
48
- default: return true;
49
- }
50
- });
51
- };
52
- const orderBy = (args) => {
53
- const table = [...(args[0] ?? [])];
54
- const field = String(args[1] ?? "");
55
- const direction = String(args[2] ?? "asc").toLowerCase();
56
- const mult = direction === "desc" ? -1 : 1;
57
- return table.sort((a, b) => {
58
- const va = a[field], vb = b[field];
59
- if (va === vb)
60
- return 0;
61
- if (va === null || va === undefined)
62
- return 1;
63
- if (vb === null || vb === undefined)
64
- return -1;
65
- if (typeof va === "number" && typeof vb === "number")
66
- return (va - vb) * mult;
67
- return String(va).localeCompare(String(vb)) * mult;
68
- });
69
- };
70
- const groupBy = (args) => {
71
- const table = (args[0] ?? []);
72
- const field = String(args[1] ?? "");
73
- const groups = {};
74
- for (const row of table) {
75
- const key = String(row[field] ?? "");
76
- (groups[key] ??= []).push(row);
77
- }
78
- return groups;
79
- };
80
- const aggregate = (args) => {
81
- const table = (args[0] ?? []);
82
- const groupField = String(args[1] ?? "");
83
- const aggregations = (args[2] ?? []);
84
- const groups = {};
85
- for (const row of table) {
86
- const key = String(row[groupField] ?? "");
87
- (groups[key] ??= []).push(row);
88
- }
89
- return Object.entries(groups).map(([key, rows]) => {
90
- const result = { [groupField]: key };
91
- for (const agg of aggregations) {
92
- const vals = rows.map((r) => r[agg.field]).filter((v) => v !== null && v !== undefined);
93
- const nums = vals.map(Number).filter((n) => !isNaN(n));
94
- switch (agg.op) {
95
- case "sum":
96
- result[`${agg.field}_sum`] = nums.reduce((a, b) => a + b, 0);
97
- break;
98
- case "avg":
99
- result[`${agg.field}_avg`] = nums.length ? nums.reduce((a, b) => a + b, 0) / nums.length : 0;
100
- break;
101
- case "min":
102
- result[`${agg.field}_min`] = nums.length ? Math.min(...nums) : null;
103
- break;
104
- case "max":
105
- result[`${agg.field}_max`] = nums.length ? Math.max(...nums) : null;
106
- break;
107
- case "count":
108
- result[`${agg.field}_count`] = vals.length;
109
- break;
110
- case "first":
111
- result[`${agg.field}_first`] = vals[0] ?? null;
112
- break;
113
- case "last":
114
- result[`${agg.field}_last`] = vals[vals.length - 1] ?? null;
115
- break;
116
- }
117
- }
118
- return result;
119
- });
120
- };
121
- const join = (args) => {
122
- const left = (args[0] ?? []);
123
- const right = (args[1] ?? []);
124
- const leftKey = String(args[2] ?? "");
125
- const rightKey = String(args[3] ?? "");
126
- const type = String(args[4] ?? "inner");
127
- const rightIndex = new Map();
128
- for (const r of right) {
129
- const k = String(r[rightKey] ?? "");
130
- (rightIndex.get(k) ?? (rightIndex.set(k, []), rightIndex.get(k))).push(r);
131
- }
132
- const results = [];
133
- const matchedRight = new Set();
134
- for (const l of left) {
135
- const k = String(l[leftKey] ?? "");
136
- const matches = rightIndex.get(k);
137
- if (matches) {
138
- matchedRight.add(k);
139
- for (const r of matches)
140
- results.push({ ...l, ...r });
141
- }
142
- else if (type === "left" || type === "full") {
143
- results.push({ ...l });
144
- }
145
- }
146
- if (type === "right" || type === "full") {
147
- for (const r of right) {
148
- const k = String(r[rightKey] ?? "");
149
- if (!matchedRight.has(k))
150
- results.push({ ...r });
151
- }
152
- }
153
- return results;
154
- };
155
- const distinct = (args) => {
156
- const table = (args[0] ?? []);
157
- const columns = args[1];
158
- const seen = new Set();
159
- return table.filter((row) => {
160
- const key = columns ? columns.map((c) => JSON.stringify(row[c])).join("|") : JSON.stringify(row);
161
- if (seen.has(key))
162
- return false;
163
- seen.add(key);
164
- return true;
165
- });
166
- };
167
- const limit = (args) => {
168
- const table = (args[0] ?? []);
169
- return table.slice(0, Number(args[1] ?? 10));
170
- };
171
- const offset = (args) => {
172
- const table = (args[0] ?? []);
173
- return table.slice(Number(args[1] ?? 0));
174
- };
175
- const addColumn = (args) => {
176
- const table = (args[0] ?? []);
177
- const colName = String(args[1] ?? "");
178
- const defaultValue = args[2];
179
- return table.map((row) => ({ ...row, [colName]: defaultValue }));
180
- };
181
- const removeColumn = (args) => {
182
- const table = (args[0] ?? []);
183
- const cols = Array.isArray(args[1]) ? args[1].map(String) : [String(args[1] ?? "")];
184
- return table.map((row) => {
185
- const r = { ...row };
186
- for (const c of cols)
187
- delete r[c];
188
- return r;
189
- });
190
- };
191
- const renameColumn = (args) => {
192
- const table = (args[0] ?? []);
193
- const oldName = String(args[1] ?? "");
194
- const newName = String(args[2] ?? "");
195
- return table.map((row) => {
196
- const r = {};
197
- for (const [k, v] of Object.entries(row))
198
- r[k === oldName ? newName : k] = v;
199
- return r;
200
- });
201
- };
202
- const pivot = (args) => {
203
- const table = (args[0] ?? []);
204
- const rowField = String(args[1] ?? "");
205
- const columnField = String(args[2] ?? "");
206
- const valueField = String(args[3] ?? "");
207
- const aggOp = String(args[4] ?? "first");
208
- const groups = new Map();
209
- for (const row of table) {
210
- const rk = String(row[rowField] ?? "");
211
- const ck = String(row[columnField] ?? "");
212
- if (!groups.has(rk))
213
- groups.set(rk, new Map());
214
- const cols = groups.get(rk);
215
- if (!cols.has(ck))
216
- cols.set(ck, []);
217
- cols.get(ck).push(row[valueField]);
218
- }
219
- return [...groups.entries()].map(([rk, cols]) => {
220
- const r = { [rowField]: rk };
221
- for (const [ck, vals] of cols) {
222
- const nums = vals.map(Number).filter((n) => !isNaN(n));
223
- switch (aggOp) {
224
- case "sum":
225
- r[ck] = nums.reduce((a, b) => a + b, 0);
226
- break;
227
- case "count":
228
- r[ck] = vals.length;
229
- break;
230
- case "avg":
231
- r[ck] = nums.length ? nums.reduce((a, b) => a + b, 0) / nums.length : 0;
232
- break;
233
- case "first":
234
- r[ck] = vals[0];
235
- break;
236
- default: r[ck] = vals[0];
237
- }
238
- }
239
- return r;
240
- });
241
- };
242
- const unpivot = (args) => {
243
- const table = (args[0] ?? []);
244
- const idColumns = (args[1] ?? []);
245
- const valueColumns = (args[2] ?? []);
246
- const results = [];
247
- for (const row of table) {
248
- for (const vc of valueColumns) {
249
- const r = {};
250
- for (const ic of idColumns)
251
- r[ic] = row[ic];
252
- r.key = vc;
253
- r.value = row[vc];
254
- results.push(r);
255
- }
256
- }
257
- return results;
258
- };
259
- const count = (args) => (args[0] ?? []).length;
260
- const sum = (args) => {
261
- const table = (args[0] ?? []);
262
- const field = String(args[1] ?? "");
263
- return table.reduce((acc, row) => acc + Number(row[field] ?? 0), 0);
264
- };
265
- const avg = (args) => {
266
- const table = (args[0] ?? []);
267
- const field = String(args[1] ?? "");
268
- if (!table.length)
269
- return 0;
270
- return table.reduce((acc, row) => acc + Number(row[field] ?? 0), 0) / table.length;
271
- };
272
- const min = (args) => {
273
- const table = (args[0] ?? []);
274
- const field = String(args[1] ?? "");
275
- const vals = table.map((r) => Number(r[field])).filter((n) => !isNaN(n));
276
- return vals.length ? Math.min(...vals) : null;
277
- };
278
- const max = (args) => {
279
- const table = (args[0] ?? []);
280
- const field = String(args[1] ?? "");
281
- const vals = table.map((r) => Number(r[field])).filter((n) => !isNaN(n));
282
- return vals.length ? Math.max(...vals) : null;
283
- };
284
- const head = (args) => {
285
- const table = (args[0] ?? []);
286
- return table.slice(0, Number(args[1] ?? 5));
287
- };
288
- const tail = (args) => {
289
- const table = (args[0] ?? []);
290
- const n = Number(args[1] ?? 5);
291
- return table.slice(-n);
292
- };
293
- const columns = (args) => {
294
- const table = (args[0] ?? []);
295
- if (!table.length)
296
- return [];
297
- return Object.keys(table[0]);
298
- };
299
- const shape = (args) => {
300
- const table = (args[0] ?? []);
301
- return { rows: table.length, columns: table.length ? Object.keys(table[0]).length : 0 };
302
- };
303
- export const TableFunctions = {
304
- create, select, where, orderBy, groupBy, aggregate, join, distinct, limit, offset,
305
- addColumn, removeColumn, renameColumn, pivot, unpivot,
306
- count, sum, avg, min, max, head, tail, columns, shape,
307
- };
308
- export const TableFunctionMetadata = {
309
- create: { description: "Create a table from array of objects or columns+rows", parameters: [{ name: "data", dataType: "object", description: "Array of objects or {columns, rows}", formInputType: "text", required: true }], returnType: "array", returnDescription: "Array of row objects", example: 'table.create [{"name": "Alice", "age": 30}]' },
310
- select: { description: "Select specific columns", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "columns", dataType: "array", description: "Column names to keep", formInputType: "text", required: true }], returnType: "array", returnDescription: "Table with selected columns", example: 'table.select $data ["name", "age"]' },
311
- where: { description: "Filter rows by condition", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "field", dataType: "string", description: "Column name", formInputType: "text", required: true }, { name: "operator", dataType: "string", description: "eq|neq|gt|lt|gte|lte|contains|startsWith|endsWith|in|notIn|isNull|notNull", formInputType: "text", required: true }, { name: "value", dataType: "any", description: "Comparison value", formInputType: "text", required: false }], returnType: "array", returnDescription: "Filtered rows", example: 'table.where $data "age" "gt" 25' },
312
- orderBy: { description: "Sort rows by a field", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "field", dataType: "string", description: "Column to sort by", formInputType: "text", required: true }, { name: "direction", dataType: "string", description: "asc or desc", formInputType: "text", required: false }], returnType: "array", returnDescription: "Sorted table", example: 'table.orderBy $data "age" "desc"' },
313
- groupBy: { description: "Group rows by a field", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "field", dataType: "string", description: "Column to group by", formInputType: "text", required: true }], returnType: "object", returnDescription: "Grouped rows keyed by field value", example: 'table.groupBy $data "department"' },
314
- aggregate: { description: "Aggregate grouped data", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "groupField", dataType: "string", description: "Column to group by", formInputType: "text", required: true }, { name: "aggregations", dataType: "array", description: "Array of {field, op: sum|avg|min|max|count|first|last}", formInputType: "text", required: true }], returnType: "array", returnDescription: "Aggregated results", example: 'table.aggregate $data "dept" [{"field": "salary", "op": "avg"}]' },
315
- join: { description: "Join two tables", parameters: [{ name: "left", dataType: "array", description: "Left table", formInputType: "text", required: true }, { name: "right", dataType: "array", description: "Right table", formInputType: "text", required: true }, { name: "leftKey", dataType: "string", description: "Left join key", formInputType: "text", required: true }, { name: "rightKey", dataType: "string", description: "Right join key", formInputType: "text", required: true }, { name: "type", dataType: "string", description: "inner|left|right|full", formInputType: "text", required: false }], returnType: "array", returnDescription: "Joined table", example: 'table.join $users $orders "id" "userId" "left"' },
316
- distinct: { description: "Remove duplicate rows", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "columns", dataType: "array", description: "Columns for uniqueness check", formInputType: "text", required: false }], returnType: "array", returnDescription: "Deduplicated table", example: 'table.distinct $data ["name"]' },
317
- limit: { description: "Take first N rows", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "n", dataType: "number", description: "Number of rows", formInputType: "text", required: true }], returnType: "array", returnDescription: "First N rows", example: 'table.limit $data 10' },
318
- offset: { description: "Skip first N rows", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "n", dataType: "number", description: "Rows to skip", formInputType: "text", required: true }], returnType: "array", returnDescription: "Remaining rows", example: 'table.offset $data 5' },
319
- addColumn: { description: "Add a column with a default value", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "columnName", dataType: "string", description: "New column name", formInputType: "text", required: true }, { name: "value", dataType: "any", description: "Default value", formInputType: "text", required: true }], returnType: "array", returnDescription: "Table with new column", example: 'table.addColumn $data "status" "active"' },
320
- removeColumn: { description: "Remove column(s)", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "columns", dataType: "any", description: "Column name or array of names", formInputType: "text", required: true }], returnType: "array", returnDescription: "Table without specified columns", example: 'table.removeColumn $data "temp"' },
321
- renameColumn: { description: "Rename a column", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "oldName", dataType: "string", description: "Current name", formInputType: "text", required: true }, { name: "newName", dataType: "string", description: "New name", formInputType: "text", required: true }], returnType: "array", returnDescription: "Table with renamed column", example: 'table.renameColumn $data "fname" "firstName"' },
322
- pivot: { description: "Pivot table", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "rowField", dataType: "string", description: "Row grouping field", formInputType: "text", required: true }, { name: "columnField", dataType: "string", description: "Column pivot field", formInputType: "text", required: true }, { name: "valueField", dataType: "string", description: "Value field", formInputType: "text", required: true }, { name: "aggOp", dataType: "string", description: "sum|count|avg|first", formInputType: "text", required: false }], returnType: "array", returnDescription: "Pivoted table", example: 'table.pivot $data "product" "month" "sales" "sum"' },
323
- unpivot: { description: "Unpivot/melt table", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "idColumns", dataType: "array", description: "Columns to keep", formInputType: "text", required: true }, { name: "valueColumns", dataType: "array", description: "Columns to melt", formInputType: "text", required: true }], returnType: "array", returnDescription: "Unpivoted table with key/value columns", example: 'table.unpivot $data ["name"] ["jan", "feb", "mar"]' },
324
- count: { description: "Count rows", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }], returnType: "number", returnDescription: "Row count", example: 'table.count $data' },
325
- sum: { description: "Sum a numeric column", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "field", dataType: "string", description: "Column name", formInputType: "text", required: true }], returnType: "number", returnDescription: "Sum", example: 'table.sum $data "amount"' },
326
- avg: { description: "Average a numeric column", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "field", dataType: "string", description: "Column name", formInputType: "text", required: true }], returnType: "number", returnDescription: "Average", example: 'table.avg $data "score"' },
327
- min: { description: "Minimum of a column", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "field", dataType: "string", description: "Column name", formInputType: "text", required: true }], returnType: "number", returnDescription: "Minimum value", example: 'table.min $data "price"' },
328
- max: { description: "Maximum of a column", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "field", dataType: "string", description: "Column name", formInputType: "text", required: true }], returnType: "number", returnDescription: "Maximum value", example: 'table.max $data "price"' },
329
- head: { description: "First N rows", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "n", dataType: "number", description: "Number of rows (default 5)", formInputType: "text", required: false }], returnType: "array", returnDescription: "First N rows", example: 'table.head $data 5' },
330
- tail: { description: "Last N rows", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }, { name: "n", dataType: "number", description: "Number of rows (default 5)", formInputType: "text", required: false }], returnType: "array", returnDescription: "Last N rows", example: 'table.tail $data 5' },
331
- columns: { description: "Get column names", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }], returnType: "array", returnDescription: "Column name strings", example: 'table.columns $data' },
332
- shape: { description: "Get row and column counts", parameters: [{ name: "table", dataType: "array", description: "Table data", formInputType: "text", required: true }], returnType: "object", returnDescription: "{rows, columns}", example: 'table.shape $data' },
333
- };
334
- export const TableModuleMetadata = {
335
- description: "Tabular data operations: filter, sort, join, group, aggregate, pivot — like a lightweight DataFrame",
336
- methods: ["create", "select", "where", "orderBy", "groupBy", "aggregate", "join", "distinct", "limit", "offset", "addColumn", "removeColumn", "renameColumn", "pivot", "unpivot", "count", "sum", "avg", "min", "max", "head", "tail", "columns", "shape"],
337
- };
338
- //# sourceMappingURL=table.js.map
package/dist/table.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}