@robinpath/table 0.1.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/README.md +107 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/table.d.ts +321 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +338 -0
- package/dist/table.js.map +1 -0
- package/package.json +13 -0
package/README.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# @robinpath/table
|
|
2
|
+
|
|
3
|
+
> Tabular data operations: filter, sort, join, group, aggregate, pivot — like a lightweight DataFrame
|
|
4
|
+
|
|
5
|
+
   
|
|
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/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@robinpath/table",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"publishConfig": { "access": "public" },
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"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" }
|
|
13
|
+
}
|