@t4h.framework/fs 0.5.0 → 0.6.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/.ai/skills/framework-fs/SKILL.md +18 -3
- package/.ai/skills/framework-fs-split/SKILL.md +255 -0
- package/README.md +184 -3
- package/dist/FileSystemClaim.d.ts +4 -0
- package/dist/FileSystemClaim.d.ts.map +1 -1
- package/dist/FileSystemClaim.js.map +1 -1
- package/dist/activities/FileJoinActivity.d.ts +39 -0
- package/dist/activities/FileJoinActivity.d.ts.map +1 -0
- package/dist/activities/FileJoinActivity.js +87 -0
- package/dist/activities/FileJoinActivity.js.map +1 -0
- package/dist/activities/FileSplitActivity.d.ts +30 -28
- package/dist/activities/FileSplitActivity.d.ts.map +1 -1
- package/dist/activities/FileSplitActivity.js +39 -34
- package/dist/activities/FileSplitActivity.js.map +1 -1
- package/dist/activities/__tests__/FileJoinActivity.spec.d.ts +2 -0
- package/dist/activities/__tests__/FileJoinActivity.spec.d.ts.map +1 -0
- package/dist/activities/__tests__/FileJoinActivity.spec.js +160 -0
- package/dist/activities/__tests__/FileJoinActivity.spec.js.map +1 -0
- package/dist/activities/__tests__/FileSplitActivity.spec.js +114 -132
- package/dist/activities/__tests__/FileSplitActivity.spec.js.map +1 -1
- package/dist/fs.d.ts +3 -0
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +3 -0
- package/dist/fs.js.map +1 -1
- package/dist/helpers/__tests__/byte-delimiter-scanner.spec.d.ts +2 -0
- package/dist/helpers/__tests__/byte-delimiter-scanner.spec.d.ts.map +1 -0
- package/dist/helpers/__tests__/byte-delimiter-scanner.spec.js +127 -0
- package/dist/helpers/__tests__/byte-delimiter-scanner.spec.js.map +1 -0
- package/dist/helpers/byte-delimiter-scanner.d.ts +36 -0
- package/dist/helpers/byte-delimiter-scanner.d.ts.map +1 -0
- package/dist/helpers/byte-delimiter-scanner.js +61 -0
- package/dist/helpers/byte-delimiter-scanner.js.map +1 -0
- package/package.json +8 -5
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Transform } from 'node:stream';
|
|
2
|
+
export class ByteDelimiterScanner extends Transform {
|
|
3
|
+
ranges = [];
|
|
4
|
+
delimiter;
|
|
5
|
+
keepPrevious;
|
|
6
|
+
keepNext;
|
|
7
|
+
cutEvery;
|
|
8
|
+
skipEmpty;
|
|
9
|
+
pending = Buffer.alloc(0);
|
|
10
|
+
pendingAt = 0;
|
|
11
|
+
sliceStart = 0;
|
|
12
|
+
matches = 0;
|
|
13
|
+
constructor({ delimiter, every = 1, skipEmpty = true, encoding = 'utf8', }) {
|
|
14
|
+
super();
|
|
15
|
+
this.delimiter = Buffer.from(delimiter.value, encoding);
|
|
16
|
+
this.keepPrevious = delimiter.keep?.previous ?? 0;
|
|
17
|
+
this.keepNext = delimiter.keep?.next ?? 0;
|
|
18
|
+
this.cutEvery = every;
|
|
19
|
+
this.skipEmpty = skipEmpty;
|
|
20
|
+
if (this.delimiter.length === 0)
|
|
21
|
+
throw new TypeError('Split delimiter must not be empty');
|
|
22
|
+
if (this.keepPrevious < 0 || this.keepNext < 0)
|
|
23
|
+
throw new TypeError('Split delimiter keep sizes must not be negative');
|
|
24
|
+
if (this.keepPrevious + this.keepNext > this.delimiter.length)
|
|
25
|
+
throw new TypeError('Split delimiter keep sizes must not exceed the delimiter length');
|
|
26
|
+
if (!Number.isInteger(every) || every < 1)
|
|
27
|
+
throw new TypeError('Split every must be a positive integer');
|
|
28
|
+
}
|
|
29
|
+
_transform(chunk, _encoding, callback) {
|
|
30
|
+
this.scan(this.pending.length > 0 ? Buffer.concat([this.pending, chunk]) : chunk);
|
|
31
|
+
callback(null, chunk);
|
|
32
|
+
}
|
|
33
|
+
_flush(callback) {
|
|
34
|
+
this.cut(this.sliceStart, this.pendingAt + this.pending.length);
|
|
35
|
+
callback();
|
|
36
|
+
}
|
|
37
|
+
scan(buffer) {
|
|
38
|
+
let searchFrom = 0;
|
|
39
|
+
while (true) {
|
|
40
|
+
const index = buffer.indexOf(this.delimiter, searchFrom);
|
|
41
|
+
if (index === -1)
|
|
42
|
+
break;
|
|
43
|
+
const at = this.pendingAt + index;
|
|
44
|
+
searchFrom = index + this.delimiter.length;
|
|
45
|
+
this.matches += 1;
|
|
46
|
+
if (this.matches % this.cutEvery !== 0)
|
|
47
|
+
continue;
|
|
48
|
+
this.cut(this.sliceStart, at + this.keepPrevious);
|
|
49
|
+
this.sliceStart = at + this.delimiter.length - this.keepNext;
|
|
50
|
+
}
|
|
51
|
+
const tail = Math.max(searchFrom, buffer.length - (this.delimiter.length - 1));
|
|
52
|
+
this.pending = buffer.subarray(tail);
|
|
53
|
+
this.pendingAt += tail;
|
|
54
|
+
}
|
|
55
|
+
cut(start, end) {
|
|
56
|
+
if (this.skipEmpty && end <= start)
|
|
57
|
+
return;
|
|
58
|
+
this.ranges.push({ start, end });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=byte-delimiter-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"byte-delimiter-scanner.js","sourceRoot":"","sources":["../../src/helpers/byte-delimiter-scanner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@t4h.framework/fs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "File system module for the T4H Framework",
|
|
5
5
|
"homepage": "https://github.com/tech4humans-brasil/framework/tree/main/packages/fs",
|
|
6
6
|
"bugs": "https://github.com/tech4humans-brasil/framework/issues",
|
|
@@ -27,14 +27,17 @@
|
|
|
27
27
|
"build": "tsc --project tsconfig.build.json",
|
|
28
28
|
"check-types": "tsc --noEmit",
|
|
29
29
|
"lint": "eslint .",
|
|
30
|
-
"prepublishOnly": "yarn build"
|
|
30
|
+
"prepublishOnly": "yarn build",
|
|
31
|
+
"test": "vitest run",
|
|
32
|
+
"test:watch": "vitest"
|
|
31
33
|
},
|
|
32
34
|
"devDependencies": {
|
|
33
|
-
"@t4h.framework/core": "^0.
|
|
34
|
-
"typescript": "^5.9.3"
|
|
35
|
+
"@t4h.framework/core": "^0.9.0",
|
|
36
|
+
"typescript": "^5.9.3",
|
|
37
|
+
"vitest": "^4.0.18"
|
|
35
38
|
},
|
|
36
39
|
"peerDependencies": {
|
|
37
|
-
"@t4h.framework/core": "^0.
|
|
40
|
+
"@t4h.framework/core": "^0.9.0"
|
|
38
41
|
},
|
|
39
42
|
"packageManager": "yarn@4.12.0",
|
|
40
43
|
"engines": {
|