@robinpath/stream 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 +96 -96
- package/package.json +37 -7
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -6
- package/dist/index.js.map +0 -1
- package/dist/stream.d.ts +0 -178
- package/dist/stream.d.ts.map +0 -1
- package/dist/stream.js +0 -208
- package/dist/stream.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
# @robinpath/stream
|
|
2
|
-
|
|
3
|
-
> Stream processing for large files: read, write, transform, filter, split, concat, hash without loading into memory
|
|
4
|
-
|
|
5
|
-
   
|
|
6
|
-
|
|
7
|
-
## Why use this module?
|
|
8
|
-
|
|
9
|
-
The `stream` module lets you:
|
|
10
|
-
|
|
11
|
-
- Read entire file content
|
|
12
|
-
- Write data to file
|
|
13
|
-
- Stream-copy a file
|
|
14
|
-
- Read file line by line into array
|
|
15
|
-
- Transform file line by line
|
|
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/stream
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Quick Start
|
|
26
|
-
|
|
27
|
-
No credentials needed — start using it right away:
|
|
28
|
-
|
|
29
|
-
```robinpath
|
|
30
|
-
stream.writeFile "./out.txt" "hello"
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Available Functions
|
|
34
|
-
|
|
35
|
-
| Function | Description |
|
|
36
|
-
|----------|-------------|
|
|
37
|
-
| `stream.readFile` | Read entire file content |
|
|
38
|
-
| `stream.writeFile` | Write data to file |
|
|
39
|
-
| `stream.copyFile` | Stream-copy a file |
|
|
40
|
-
| `stream.lines` | Read file line by line into array |
|
|
41
|
-
| `stream.transform` | Transform file line by line |
|
|
42
|
-
| `stream.filter` | Filter file lines by regex pattern |
|
|
43
|
-
| `stream.concat` | Concatenate multiple files |
|
|
44
|
-
| `stream.split` | Split file into chunks |
|
|
45
|
-
| `stream.count` | Count lines in file |
|
|
46
|
-
| `stream.head` | Read first N lines |
|
|
47
|
-
| `stream.tail` | Read last N lines |
|
|
48
|
-
| `stream.pipe` | Download URL to file via stream |
|
|
49
|
-
| `stream.hash` | Stream-hash a file |
|
|
50
|
-
|
|
51
|
-
## Examples
|
|
52
|
-
|
|
53
|
-
### Write data to file
|
|
54
|
-
|
|
55
|
-
```robinpath
|
|
56
|
-
stream.writeFile "./out.txt" "hello"
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### Stream-copy a file
|
|
60
|
-
|
|
61
|
-
```robinpath
|
|
62
|
-
stream.copyFile "./a.txt" "./b.txt"
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Read file line by line into array
|
|
66
|
-
|
|
67
|
-
```robinpath
|
|
68
|
-
stream.lines "./data.csv"
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## Integration with RobinPath
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
import { RobinPath } from "@wiredwp/robinpath";
|
|
75
|
-
import Module from "@robinpath/stream";
|
|
76
|
-
|
|
77
|
-
const rp = new RobinPath();
|
|
78
|
-
rp.registerModule(Module.name, Module.functions);
|
|
79
|
-
rp.registerModuleMeta(Module.name, Module.functionMetadata);
|
|
80
|
-
|
|
81
|
-
const result = await rp.executeScript(`
|
|
82
|
-
stream.writeFile "./out.txt" "hello"
|
|
83
|
-
`);
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Full API Reference
|
|
87
|
-
|
|
88
|
-
See [MODULE.md](./MODULE.md) for complete documentation including all parameters, return types, error handling, and advanced examples.
|
|
89
|
-
|
|
90
|
-
## Related Modules
|
|
91
|
-
|
|
92
|
-
- [`@robinpath/json`](../json) — JSON module for complementary functionality
|
|
93
|
-
|
|
94
|
-
## License
|
|
95
|
-
|
|
96
|
-
MIT
|
|
1
|
+
# @robinpath/stream
|
|
2
|
+
|
|
3
|
+
> Stream processing for large files: read, write, transform, filter, split, concat, hash without loading into memory
|
|
4
|
+
|
|
5
|
+
   
|
|
6
|
+
|
|
7
|
+
## Why use this module?
|
|
8
|
+
|
|
9
|
+
The `stream` module lets you:
|
|
10
|
+
|
|
11
|
+
- Read entire file content
|
|
12
|
+
- Write data to file
|
|
13
|
+
- Stream-copy a file
|
|
14
|
+
- Read file line by line into array
|
|
15
|
+
- Transform file line by line
|
|
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/stream
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
No credentials needed — start using it right away:
|
|
28
|
+
|
|
29
|
+
```robinpath
|
|
30
|
+
stream.writeFile "./out.txt" "hello"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Available Functions
|
|
34
|
+
|
|
35
|
+
| Function | Description |
|
|
36
|
+
|----------|-------------|
|
|
37
|
+
| `stream.readFile` | Read entire file content |
|
|
38
|
+
| `stream.writeFile` | Write data to file |
|
|
39
|
+
| `stream.copyFile` | Stream-copy a file |
|
|
40
|
+
| `stream.lines` | Read file line by line into array |
|
|
41
|
+
| `stream.transform` | Transform file line by line |
|
|
42
|
+
| `stream.filter` | Filter file lines by regex pattern |
|
|
43
|
+
| `stream.concat` | Concatenate multiple files |
|
|
44
|
+
| `stream.split` | Split file into chunks |
|
|
45
|
+
| `stream.count` | Count lines in file |
|
|
46
|
+
| `stream.head` | Read first N lines |
|
|
47
|
+
| `stream.tail` | Read last N lines |
|
|
48
|
+
| `stream.pipe` | Download URL to file via stream |
|
|
49
|
+
| `stream.hash` | Stream-hash a file |
|
|
50
|
+
|
|
51
|
+
## Examples
|
|
52
|
+
|
|
53
|
+
### Write data to file
|
|
54
|
+
|
|
55
|
+
```robinpath
|
|
56
|
+
stream.writeFile "./out.txt" "hello"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Stream-copy a file
|
|
60
|
+
|
|
61
|
+
```robinpath
|
|
62
|
+
stream.copyFile "./a.txt" "./b.txt"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Read file line by line into array
|
|
66
|
+
|
|
67
|
+
```robinpath
|
|
68
|
+
stream.lines "./data.csv"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Integration with RobinPath
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import { RobinPath } from "@wiredwp/robinpath";
|
|
75
|
+
import Module from "@robinpath/stream";
|
|
76
|
+
|
|
77
|
+
const rp = new RobinPath();
|
|
78
|
+
rp.registerModule(Module.name, Module.functions);
|
|
79
|
+
rp.registerModuleMeta(Module.name, Module.functionMetadata);
|
|
80
|
+
|
|
81
|
+
const result = await rp.executeScript(`
|
|
82
|
+
stream.writeFile "./out.txt" "hello"
|
|
83
|
+
`);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Full API Reference
|
|
87
|
+
|
|
88
|
+
See [MODULE.md](./MODULE.md) for complete documentation including all parameters, return types, error handling, and advanced examples.
|
|
89
|
+
|
|
90
|
+
## Related Modules
|
|
91
|
+
|
|
92
|
+
- [`@robinpath/json`](../json) — JSON module for complementary functionality
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,13 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@robinpath/stream",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"publishConfig": {
|
|
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": {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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": "Stream processing for large files: read, write, transform, filter, split, concat, hash without loading into memory",
|
|
32
|
+
"keywords": [
|
|
33
|
+
"stream",
|
|
34
|
+
"infrastructure"
|
|
35
|
+
],
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"robinpath": {
|
|
38
|
+
"category": "infrastructure",
|
|
39
|
+
"type": "utility",
|
|
40
|
+
"auth": "none",
|
|
41
|
+
"functionCount": 13
|
|
42
|
+
}
|
|
13
43
|
}
|
package/dist/index.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { ModuleAdapter } from "@wiredwp/robinpath";
|
|
2
|
-
declare const StreamModule: ModuleAdapter;
|
|
3
|
-
export default StreamModule;
|
|
4
|
-
export { StreamModule };
|
|
5
|
-
export { StreamFunctions, StreamFunctionMetadata, StreamModuleMetadata } from "./stream.js";
|
|
6
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -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,YAAY,EAAE,aAA2K,CAAC;AAChM,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { StreamFunctions, StreamFunctionMetadata, StreamModuleMetadata } from "./stream.js";
|
|
2
|
-
const StreamModule = { name: "stream", functions: StreamFunctions, functionMetadata: StreamFunctionMetadata, moduleMetadata: StreamModuleMetadata, global: false };
|
|
3
|
-
export default StreamModule;
|
|
4
|
-
export { StreamModule };
|
|
5
|
-
export { StreamFunctions, StreamFunctionMetadata, StreamModuleMetadata } from "./stream.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,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC5F,MAAM,YAAY,GAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAA6B,EAAE,cAAc,EAAE,oBAA2B,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAChM,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/stream.d.ts
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import type { BuiltinHandler } from "@wiredwp/robinpath";
|
|
2
|
-
export declare const StreamFunctions: Record<string, BuiltinHandler>;
|
|
3
|
-
export declare const StreamFunctionMetadata: {
|
|
4
|
-
readFile: {
|
|
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
|
-
writeFile: {
|
|
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
|
-
copyFile: {
|
|
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
|
-
lines: {
|
|
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
|
-
transform: {
|
|
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
|
-
filter: {
|
|
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
|
-
concat: {
|
|
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
|
-
split: {
|
|
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
|
-
count: {
|
|
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
|
-
head: {
|
|
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
|
-
tail: {
|
|
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
|
-
pipe: {
|
|
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
|
-
hash: {
|
|
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
|
-
};
|
|
174
|
-
export declare const StreamModuleMetadata: {
|
|
175
|
-
description: string;
|
|
176
|
-
methods: string[];
|
|
177
|
-
};
|
|
178
|
-
//# sourceMappingURL=stream.d.ts.map
|
package/dist/stream.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA2C,MAAM,oBAAoB,CAAC;AAsMlG,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAE1D,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAclC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;CAGhC,CAAC"}
|
package/dist/stream.js
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { createReadStream, createWriteStream, readFileSync, writeFileSync, statSync } from "node:fs";
|
|
2
|
-
import { pipeline as pipelineAsync } from "node:stream/promises";
|
|
3
|
-
import { Transform } from "node:stream";
|
|
4
|
-
import { createHash } from "node:crypto";
|
|
5
|
-
import { createInterface } from "node:readline";
|
|
6
|
-
import { join, dirname } from "node:path";
|
|
7
|
-
import { mkdirSync } from "node:fs";
|
|
8
|
-
const readFile = (args) => {
|
|
9
|
-
const filePath = String(args[0] ?? "");
|
|
10
|
-
const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {});
|
|
11
|
-
const encoding = String(opts.encoding ?? "utf-8");
|
|
12
|
-
return readFileSync(filePath, { encoding });
|
|
13
|
-
};
|
|
14
|
-
const writeFile = (args) => {
|
|
15
|
-
const filePath = String(args[0] ?? "");
|
|
16
|
-
const data = String(args[1] ?? "");
|
|
17
|
-
const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {});
|
|
18
|
-
const encoding = String(opts.encoding ?? "utf-8");
|
|
19
|
-
writeFileSync(filePath, typeof args[1] === "string" ? args[1] : data, { encoding });
|
|
20
|
-
return { path: filePath, size: statSync(filePath).size };
|
|
21
|
-
};
|
|
22
|
-
const copyFile = async (args) => {
|
|
23
|
-
const src = String(args[0] ?? "");
|
|
24
|
-
const dest = String(args[1] ?? "");
|
|
25
|
-
await pipelineAsync(createReadStream(src), createWriteStream(dest));
|
|
26
|
-
return { src, dest, size: statSync(dest).size };
|
|
27
|
-
};
|
|
28
|
-
const lines = async (args) => {
|
|
29
|
-
const filePath = String(args[0] ?? "");
|
|
30
|
-
const result = [];
|
|
31
|
-
const rl = createInterface({ input: createReadStream(filePath, { encoding: "utf-8" }), crlfDelay: Infinity });
|
|
32
|
-
for await (const line of rl)
|
|
33
|
-
result.push(line);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
|
-
const transform = async (args) => {
|
|
37
|
-
const inputPath = String(args[0] ?? "");
|
|
38
|
-
const outputPath = String(args[1] ?? "");
|
|
39
|
-
const transformType = String(args[2] ?? "trim");
|
|
40
|
-
const transformArgs = (typeof args[3] === "object" && args[3] !== null ? args[3] : {});
|
|
41
|
-
let lineCount = 0;
|
|
42
|
-
const transformer = new Transform({
|
|
43
|
-
transform(chunk, _encoding, callback) {
|
|
44
|
-
const text = chunk.toString();
|
|
45
|
-
const outputLines = text.split("\n").map((line) => {
|
|
46
|
-
lineCount++;
|
|
47
|
-
switch (transformType) {
|
|
48
|
-
case "uppercase": return line.toUpperCase();
|
|
49
|
-
case "lowercase": return line.toLowerCase();
|
|
50
|
-
case "trim": return line.trim();
|
|
51
|
-
case "prefix": return `${transformArgs.prefix ?? ""}${line}`;
|
|
52
|
-
case "suffix": return `${line}${transformArgs.suffix ?? ""}`;
|
|
53
|
-
case "replace": return line.replaceAll(String(transformArgs.search ?? ""), String(transformArgs.replace ?? ""));
|
|
54
|
-
default: return line;
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
callback(null, outputLines.join("\n"));
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
await pipelineAsync(createReadStream(inputPath, { encoding: "utf-8" }), transformer, createWriteStream(outputPath));
|
|
61
|
-
return { inputPath, outputPath, linesProcessed: lineCount };
|
|
62
|
-
};
|
|
63
|
-
const filter = async (args) => {
|
|
64
|
-
const inputPath = String(args[0] ?? "");
|
|
65
|
-
const outputPath = String(args[1] ?? "");
|
|
66
|
-
const pattern = new RegExp(String(args[2] ?? ""));
|
|
67
|
-
let matched = 0;
|
|
68
|
-
let total = 0;
|
|
69
|
-
const filterer = new Transform({
|
|
70
|
-
transform(chunk, _encoding, callback) {
|
|
71
|
-
const lines = chunk.toString().split("\n");
|
|
72
|
-
const kept = [];
|
|
73
|
-
for (const line of lines) {
|
|
74
|
-
total++;
|
|
75
|
-
if (pattern.test(line)) {
|
|
76
|
-
kept.push(line);
|
|
77
|
-
matched++;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
callback(null, kept.join("\n"));
|
|
81
|
-
},
|
|
82
|
-
});
|
|
83
|
-
await pipelineAsync(createReadStream(inputPath, { encoding: "utf-8" }), filterer, createWriteStream(outputPath));
|
|
84
|
-
return { inputPath, outputPath, totalLines: total, matchedLines: matched };
|
|
85
|
-
};
|
|
86
|
-
const concat = async (args) => {
|
|
87
|
-
const inputPaths = (args[0] ?? []);
|
|
88
|
-
const outputPath = String(args[1] ?? "");
|
|
89
|
-
const out = createWriteStream(outputPath);
|
|
90
|
-
for (const p of inputPaths) {
|
|
91
|
-
await pipelineAsync(createReadStream(String(p)), out, { end: false });
|
|
92
|
-
}
|
|
93
|
-
out.end();
|
|
94
|
-
return { outputPath, filesConcatenated: inputPaths.length, size: statSync(outputPath).size };
|
|
95
|
-
};
|
|
96
|
-
const split = async (args) => {
|
|
97
|
-
const inputPath = String(args[0] ?? "");
|
|
98
|
-
const outputDir = String(args[1] ?? ".");
|
|
99
|
-
const linesPerChunk = Number(args[2] ?? 1000);
|
|
100
|
-
const outputFiles = [];
|
|
101
|
-
let chunkIndex = 0;
|
|
102
|
-
let lineCount = 0;
|
|
103
|
-
let currentOut = null;
|
|
104
|
-
const rl = createInterface({ input: createReadStream(inputPath, { encoding: "utf-8" }), crlfDelay: Infinity });
|
|
105
|
-
for await (const line of rl) {
|
|
106
|
-
if (lineCount % linesPerChunk === 0) {
|
|
107
|
-
if (currentOut)
|
|
108
|
-
currentOut.end();
|
|
109
|
-
const chunkPath = join(outputDir, `chunk_${String(chunkIndex).padStart(4, "0")}.txt`);
|
|
110
|
-
try {
|
|
111
|
-
mkdirSync(dirname(chunkPath), { recursive: true });
|
|
112
|
-
}
|
|
113
|
-
catch { }
|
|
114
|
-
currentOut = createWriteStream(chunkPath);
|
|
115
|
-
outputFiles.push(chunkPath);
|
|
116
|
-
chunkIndex++;
|
|
117
|
-
}
|
|
118
|
-
currentOut.write(line + "\n");
|
|
119
|
-
lineCount++;
|
|
120
|
-
}
|
|
121
|
-
if (currentOut)
|
|
122
|
-
currentOut.end();
|
|
123
|
-
return { outputFiles, totalLines: lineCount, chunks: chunkIndex };
|
|
124
|
-
};
|
|
125
|
-
const count = async (args) => {
|
|
126
|
-
const filePath = String(args[0] ?? "");
|
|
127
|
-
let lineCount = 0;
|
|
128
|
-
const rl = createInterface({ input: createReadStream(filePath, { encoding: "utf-8" }), crlfDelay: Infinity });
|
|
129
|
-
for await (const _ of rl)
|
|
130
|
-
lineCount++;
|
|
131
|
-
return lineCount;
|
|
132
|
-
};
|
|
133
|
-
const head = async (args) => {
|
|
134
|
-
const filePath = String(args[0] ?? "");
|
|
135
|
-
const n = Number(args[1] ?? 10);
|
|
136
|
-
const result = [];
|
|
137
|
-
const rl = createInterface({ input: createReadStream(filePath, { encoding: "utf-8" }), crlfDelay: Infinity });
|
|
138
|
-
for await (const line of rl) {
|
|
139
|
-
result.push(line);
|
|
140
|
-
if (result.length >= n)
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
rl.close();
|
|
144
|
-
return result.join("\n");
|
|
145
|
-
};
|
|
146
|
-
const tail = async (args) => {
|
|
147
|
-
const filePath = String(args[0] ?? "");
|
|
148
|
-
const n = Number(args[1] ?? 10);
|
|
149
|
-
const buffer = [];
|
|
150
|
-
const rl = createInterface({ input: createReadStream(filePath, { encoding: "utf-8" }), crlfDelay: Infinity });
|
|
151
|
-
for await (const line of rl) {
|
|
152
|
-
buffer.push(line);
|
|
153
|
-
if (buffer.length > n)
|
|
154
|
-
buffer.shift();
|
|
155
|
-
}
|
|
156
|
-
return buffer.join("\n");
|
|
157
|
-
};
|
|
158
|
-
const pipe = async (args) => {
|
|
159
|
-
const url = String(args[0] ?? "");
|
|
160
|
-
const outputPath = String(args[1] ?? "");
|
|
161
|
-
const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
|
|
162
|
-
const headers = {};
|
|
163
|
-
if (typeof opts.headers === "object" && opts.headers !== null) {
|
|
164
|
-
for (const [k, v] of Object.entries(opts.headers))
|
|
165
|
-
headers[k] = String(v);
|
|
166
|
-
}
|
|
167
|
-
const response = await fetch(url, { headers });
|
|
168
|
-
if (!response.ok)
|
|
169
|
-
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
170
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
171
|
-
writeFileSync(outputPath, Buffer.from(arrayBuffer));
|
|
172
|
-
const size = statSync(outputPath).size;
|
|
173
|
-
return { path: outputPath, size };
|
|
174
|
-
};
|
|
175
|
-
const hash = async (args) => {
|
|
176
|
-
const filePath = String(args[0] ?? "");
|
|
177
|
-
const algorithm = String(args[1] ?? "sha256");
|
|
178
|
-
return new Promise((resolve, reject) => {
|
|
179
|
-
const h = createHash(algorithm);
|
|
180
|
-
const stream = createReadStream(filePath);
|
|
181
|
-
stream.on("data", (chunk) => h.update(chunk));
|
|
182
|
-
stream.on("end", () => resolve(h.digest("hex")));
|
|
183
|
-
stream.on("error", reject);
|
|
184
|
-
});
|
|
185
|
-
};
|
|
186
|
-
export const StreamFunctions = {
|
|
187
|
-
readFile, writeFile, copyFile, lines, transform, filter, concat, split, count, head, tail, pipe, hash,
|
|
188
|
-
};
|
|
189
|
-
export const StreamFunctionMetadata = {
|
|
190
|
-
readFile: { description: "Read entire file content", parameters: [{ name: "filePath", dataType: "string", description: "File path", formInputType: "text", required: true }, { name: "options", dataType: "object", description: "{encoding}", formInputType: "text", required: false }], returnType: "string", returnDescription: "File content", example: 'stream.readFile "./data.txt"' },
|
|
191
|
-
writeFile: { description: "Write data to file", parameters: [{ name: "filePath", dataType: "string", description: "File path", formInputType: "text", required: true }, { name: "data", dataType: "string", description: "Content to write", formInputType: "text", required: true }], returnType: "object", returnDescription: "{path, size}", example: 'stream.writeFile "./out.txt" "hello"' },
|
|
192
|
-
copyFile: { description: "Stream-copy a file", parameters: [{ name: "src", dataType: "string", description: "Source path", formInputType: "text", required: true }, { name: "dest", dataType: "string", description: "Destination path", formInputType: "text", required: true }], returnType: "object", returnDescription: "{src, dest, size}", example: 'stream.copyFile "./a.txt" "./b.txt"' },
|
|
193
|
-
lines: { description: "Read file line by line into array", parameters: [{ name: "filePath", dataType: "string", description: "File path", formInputType: "text", required: true }], returnType: "array", returnDescription: "Array of lines", example: 'stream.lines "./data.csv"' },
|
|
194
|
-
transform: { description: "Transform file line by line", parameters: [{ name: "inputPath", dataType: "string", description: "Input file", formInputType: "text", required: true }, { name: "outputPath", dataType: "string", description: "Output file", formInputType: "text", required: true }, { name: "type", dataType: "string", description: "uppercase|lowercase|trim|prefix|suffix|replace", formInputType: "text", required: true }, { name: "args", dataType: "object", description: "{prefix, suffix, search, replace}", formInputType: "text", required: false }], returnType: "object", returnDescription: "{inputPath, outputPath, linesProcessed}", example: 'stream.transform "./in.txt" "./out.txt" "uppercase"' },
|
|
195
|
-
filter: { description: "Filter file lines by regex pattern", parameters: [{ name: "inputPath", dataType: "string", description: "Input file", formInputType: "text", required: true }, { name: "outputPath", dataType: "string", description: "Output file", formInputType: "text", required: true }, { name: "pattern", dataType: "string", description: "Regex pattern", formInputType: "text", required: true }], returnType: "object", returnDescription: "{totalLines, matchedLines}", example: 'stream.filter "./log.txt" "./errors.txt" "ERROR"' },
|
|
196
|
-
concat: { description: "Concatenate multiple files", parameters: [{ name: "inputPaths", dataType: "array", description: "Array of file paths", formInputType: "text", required: true }, { name: "outputPath", dataType: "string", description: "Output file", formInputType: "text", required: true }], returnType: "object", returnDescription: "{outputPath, filesConcatenated, size}", example: 'stream.concat ["a.txt", "b.txt"] "merged.txt"' },
|
|
197
|
-
split: { description: "Split file into chunks", parameters: [{ name: "inputPath", dataType: "string", description: "Input file", formInputType: "text", required: true }, { name: "outputDir", dataType: "string", description: "Output directory", formInputType: "text", required: true }, { name: "linesPerChunk", dataType: "number", description: "Lines per chunk", formInputType: "text", required: false }], returnType: "object", returnDescription: "{outputFiles, totalLines, chunks}", example: 'stream.split "./big.csv" "./chunks" 1000' },
|
|
198
|
-
count: { description: "Count lines in file", parameters: [{ name: "filePath", dataType: "string", description: "File path", formInputType: "text", required: true }], returnType: "number", returnDescription: "Line count", example: 'stream.count "./data.txt"' },
|
|
199
|
-
head: { description: "Read first N lines", parameters: [{ name: "filePath", dataType: "string", description: "File path", formInputType: "text", required: true }, { name: "n", dataType: "number", description: "Number of lines (default 10)", formInputType: "text", required: false }], returnType: "string", returnDescription: "First N lines", example: 'stream.head "./data.txt" 20' },
|
|
200
|
-
tail: { description: "Read last N lines", parameters: [{ name: "filePath", dataType: "string", description: "File path", formInputType: "text", required: true }, { name: "n", dataType: "number", description: "Number of lines (default 10)", formInputType: "text", required: false }], returnType: "string", returnDescription: "Last N lines", example: 'stream.tail "./log.txt" 50' },
|
|
201
|
-
pipe: { description: "Download URL to file via stream", parameters: [{ name: "url", dataType: "string", description: "URL to download", formInputType: "text", required: true }, { name: "outputPath", dataType: "string", description: "Output file path", formInputType: "text", required: true }, { name: "options", dataType: "object", description: "{headers}", formInputType: "text", required: false }], returnType: "object", returnDescription: "{path, size}", example: 'stream.pipe "https://example.com/file.zip" "./file.zip"' },
|
|
202
|
-
hash: { description: "Stream-hash a file", parameters: [{ name: "filePath", dataType: "string", description: "File path", formInputType: "text", required: true }, { name: "algorithm", dataType: "string", description: "Hash algorithm (default sha256)", formInputType: "text", required: false }], returnType: "string", returnDescription: "Hex hash string", example: 'stream.hash "./data.bin" "sha256"' },
|
|
203
|
-
};
|
|
204
|
-
export const StreamModuleMetadata = {
|
|
205
|
-
description: "Stream processing for large files: read, write, transform, filter, split, concat, hash without loading into memory",
|
|
206
|
-
methods: ["readFile", "writeFile", "copyFile", "lines", "transform", "filter", "concat", "split", "count", "head", "tail", "pipe", "hash"],
|
|
207
|
-
};
|
|
208
|
-
//# sourceMappingURL=stream.js.map
|
package/dist/stream.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
|