@t4h.framework/fs 0.12.2 → 0.13.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/.ai/skills/framework-fs/SKILL.md +25 -26
- package/.ai/skills/framework-fs-split/SKILL.md +40 -54
- package/.ai/skills/framework-fs-write/SKILL.md +13 -15
- package/CHANGELOG.md +44 -0
- package/README.md +14 -41
- package/dist/activities/FileJoinActivity.d.ts +3 -3
- package/dist/activities/FileJoinActivity.d.ts.map +1 -1
- package/dist/activities/FileJoinActivity.js.map +1 -1
- package/dist/activities/FileReadActivity.d.ts +1 -0
- package/dist/activities/FileReadActivity.d.ts.map +1 -1
- package/dist/activities/FileReadActivity.js +24 -19
- package/dist/activities/FileReadActivity.js.map +1 -1
- package/dist/activities/FileSplitActivity.d.ts +8 -15
- package/dist/activities/FileSplitActivity.d.ts.map +1 -1
- package/dist/activities/FileSplitActivity.js +18 -32
- package/dist/activities/FileSplitActivity.js.map +1 -1
- package/dist/constants/operations.d.ts +1 -1
- package/dist/constants/operations.d.ts.map +1 -1
- package/dist/constants/operations.js.map +1 -1
- package/dist/fs.d.ts +1 -1
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +0 -1
- package/dist/fs.js.map +1 -1
- package/dist/helpers/CSV.d.ts.map +1 -1
- package/dist/helpers/CSV.js +3 -1
- package/dist/helpers/CSV.js.map +1 -1
- package/dist/helpers/group-records.d.ts +12 -0
- package/dist/helpers/group-records.d.ts.map +1 -0
- package/dist/helpers/group-records.js +36 -0
- package/dist/helpers/group-records.js.map +1 -0
- package/dist/helpers/split-records.d.ts +30 -0
- package/dist/helpers/split-records.d.ts.map +1 -0
- package/dist/helpers/split-records.js +122 -0
- package/dist/helpers/split-records.js.map +1 -0
- package/package.json +4 -3
- package/dist/helpers/ByteDelimiterScanner.d.ts +0 -50
- package/dist/helpers/ByteDelimiterScanner.d.ts.map +0 -1
- package/dist/helpers/ByteDelimiterScanner.js +0 -103
- package/dist/helpers/ByteDelimiterScanner.js.map +0 -1
- package/dist/helpers/ByteRecordFilter.d.ts +0 -32
- package/dist/helpers/ByteRecordFilter.d.ts.map +0 -1
- package/dist/helpers/ByteRecordFilter.js +0 -89
- package/dist/helpers/ByteRecordFilter.js.map +0 -1
|
@@ -18,7 +18,7 @@ export class FileReadActivity extends SyncActivity {
|
|
|
18
18
|
if (range.end > binary.contentLength)
|
|
19
19
|
throw new TypeError('Read range must not exceed the binary length');
|
|
20
20
|
if (length > FILE_READ_MAX_BYTES)
|
|
21
|
-
throw new RangeError(`Length ${length} exceeded max ${FILE_READ_MAX_BYTES}`);
|
|
21
|
+
throw new RangeError(`Length ${String(length)} exceeded max ${String(FILE_READ_MAX_BYTES)}`);
|
|
22
22
|
const slice = await this.slice(binary, range, encoding);
|
|
23
23
|
if (slice)
|
|
24
24
|
return (await buffer(await slice.stream())).toString(encoding);
|
|
@@ -36,30 +36,35 @@ export class FileReadActivity extends SyncActivity {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
async window(readable, range) {
|
|
39
|
-
|
|
40
|
-
let position = 0;
|
|
41
|
-
let size = 0;
|
|
39
|
+
let collected;
|
|
42
40
|
try {
|
|
43
|
-
|
|
44
|
-
const chunk = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
45
|
-
const chunkStart = position;
|
|
46
|
-
position += chunk.length;
|
|
47
|
-
if (position <= range.start)
|
|
48
|
-
continue;
|
|
49
|
-
const from = Math.max(range.start - chunkStart, 0);
|
|
50
|
-
const to = Math.min(range.end - chunkStart, chunk.length);
|
|
51
|
-
chunks.push(chunk.subarray(from, to));
|
|
52
|
-
size += to - from;
|
|
53
|
-
if (position >= range.end)
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
41
|
+
collected = await this.collect(readable, range);
|
|
56
42
|
}
|
|
57
43
|
finally {
|
|
58
44
|
readable.destroy();
|
|
59
45
|
}
|
|
60
|
-
if (size < range.end - range.start)
|
|
46
|
+
if (collected.size < range.end - range.start)
|
|
61
47
|
throw new RangeError('Binary stream ended before the read window was filled');
|
|
62
|
-
return Buffer.concat(chunks);
|
|
48
|
+
return Buffer.concat(collected.chunks);
|
|
49
|
+
}
|
|
50
|
+
async collect(readable, range) {
|
|
51
|
+
const chunks = [];
|
|
52
|
+
let position = 0;
|
|
53
|
+
let size = 0;
|
|
54
|
+
for await (const data of readable) {
|
|
55
|
+
const chunk = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
56
|
+
const chunkStart = position;
|
|
57
|
+
position += chunk.length;
|
|
58
|
+
if (position <= range.start)
|
|
59
|
+
continue;
|
|
60
|
+
const from = Math.max(range.start - chunkStart, 0);
|
|
61
|
+
const to = Math.min(range.end - chunkStart, chunk.length);
|
|
62
|
+
chunks.push(chunk.subarray(from, to));
|
|
63
|
+
size += to - from;
|
|
64
|
+
if (position >= range.end)
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
return { chunks, size };
|
|
63
68
|
}
|
|
64
69
|
}
|
|
65
70
|
export async function read(binary, options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileReadActivity.js","sourceRoot":"","sources":["../../src/activities/FileReadActivity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAe,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAYvD,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAA;AAEvC,MAAM,OAAO,gBAAiB,SAAQ,YAKrC;IACkB,MAAM,GAAG,IAAI,KAAK,CAAC;QAClC,EAAE,EAAE,eAAe;KACpB,CAAC,CAAA;IAEK,OAAO,CACZ,MAAc,EACd,OAAwB;QAExB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,EACf,MAAM,EACN,OAAO,GACe;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAA;QAE3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,aAAa,EAAE,CAAA;QAEtE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAA;QAEtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC;YACjE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAA;QAEtE,IAAI,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,aAAa;YAClC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAA;QAErE,IAAI,MAAM,GAAG,mBAAmB;YAC9B,MAAM,IAAI,UAAU,CAClB,UAAU,MAAM,iBAAiB,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"FileReadActivity.js","sourceRoot":"","sources":["../../src/activities/FileReadActivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AsyncActivity, type Binary, type
|
|
2
|
-
import { type ByteTrim, type FileSplitDelimiter } from '../helpers/
|
|
1
|
+
import { AsyncActivity, type AsyncActivityResult, type Binary, type AnyWorkflow, WorkflowBatchCollectionRef, workflowBatchSchema } from '@t4h.framework/core';
|
|
2
|
+
import { type ByteTrim, type FileSplitDelimiter } from '../helpers/split-records.js';
|
|
3
3
|
type FileSplitWhereOperators = {
|
|
4
4
|
$eq?: string;
|
|
5
5
|
$ne?: string;
|
|
@@ -25,7 +25,6 @@ export type FileSplitOptions = {
|
|
|
25
25
|
trim?: ByteTrim;
|
|
26
26
|
skipEmpty?: boolean;
|
|
27
27
|
encoding?: BufferEncoding;
|
|
28
|
-
inlineMaxBytes?: number;
|
|
29
28
|
timeoutInMs?: number;
|
|
30
29
|
};
|
|
31
30
|
export type FileSplitActivityInput = {
|
|
@@ -37,22 +36,16 @@ export type FileSplitBatch = {
|
|
|
37
36
|
batch: string;
|
|
38
37
|
count: number;
|
|
39
38
|
};
|
|
40
|
-
export declare class FileSplitActivity extends AsyncActivity<readonly [
|
|
41
|
-
binary: Binary,
|
|
42
|
-
workflow: Workflow<any, any>,
|
|
43
|
-
options: FileSplitOptions
|
|
44
|
-
], FileSplitActivityInput, FileSplitBatch, WorkflowBatchCollectionRef, FileSplitActivityInput, typeof workflowBatchSchema> {
|
|
39
|
+
export declare class FileSplitActivity extends AsyncActivity<readonly [binary: Binary, workflow: AnyWorkflow, options: FileSplitOptions], FileSplitActivityInput, FileSplitBatch, WorkflowBatchCollectionRef, FileSplitActivityInput, typeof workflowBatchSchema> {
|
|
45
40
|
private readonly claims;
|
|
46
|
-
toInput(binary: Binary, workflow:
|
|
47
|
-
bootstrap({ binary, workflow, options, }: FileSplitActivityInput): Promise<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}>> | import("@t4h.framework/core").AsyncActivityResultFulfilled<FileSplitBatch | undefined>>;
|
|
51
|
-
private toFilter;
|
|
41
|
+
toInput(binary: Binary, workflow: AnyWorkflow, options: FileSplitOptions): FileSplitActivityInput;
|
|
42
|
+
bootstrap({ binary, workflow, options, }: FileSplitActivityInput): Promise<AsyncActivityResult<FileSplitActivityInput, typeof workflowBatchSchema, FileSplitBatch>>;
|
|
43
|
+
private slices;
|
|
44
|
+
private filter;
|
|
52
45
|
advance(payload: FileSplitBatch): import("@t4h.framework/core").AsyncActivityResultFulfilled<FileSplitBatch | undefined>;
|
|
53
46
|
toOutput(output: FileSplitBatch): WorkflowBatchCollectionRef;
|
|
54
47
|
}
|
|
55
|
-
export declare function split(binary: Binary, workflow:
|
|
48
|
+
export declare function split(binary: Binary, workflow: AnyWorkflow, options: FileSplitOptions): Promise<WorkflowBatchCollectionRef>;
|
|
56
49
|
export declare namespace Split {
|
|
57
50
|
const line: (value?: string) => FileSplitDelimiter;
|
|
58
51
|
const char: (value: string, keep?: FileSplitDelimiter["keep"]) => FileSplitDelimiter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSplitActivity.d.ts","sourceRoot":"","sources":["../../src/activities/FileSplitActivity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileSplitActivity.d.ts","sourceRoot":"","sources":["../../src/activities/FileSplitActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,MAAM,EAGX,KAAK,WAAW,EAChB,0BAA0B,EAG1B,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,kBAAkB,EAExB,MAAM,6BAA6B,CAAA;AAIpC,KAAK,uBAAuB,GAAG;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,CAAC,uBAAuB,GAAG;IACzB,IAAI,CAAC,EAAE,cAAc,EAAE,CAAA;IACvB,GAAG,CAAC,EAAE,cAAc,EAAE,CAAA;IACtB,IAAI,CAAC,EAAE,cAAc,EAAE,CAAA;CACxB,CAAC,CAAA;AAEN,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,kBAAkB,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,qBAAa,iBAAkB,SAAQ,aAAa,CAClD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAC3E,sBAAsB,EACtB,cAAc,EACd,0BAA0B,EAC1B,sBAAsB,EACtB,OAAO,mBAAmB,CAC3B;IACC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAErB;IAEK,OAAO,CACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,gBAAgB,GACxB,sBAAsB;IAsBZ,SAAS,CAAC,EACrB,MAAM,EACN,QAAQ,EACR,OAAO,GACR,EAAE,sBAAsB,GAAG,OAAO,CACjC,mBAAmB,CACjB,sBAAsB,EACtB,OAAO,mBAAmB,EAC1B,cAAc,CACf,CACF;YAgBc,MAAM;YA4BN,MAAM;IAad,OAAO,CAAC,OAAO,EAAE,cAAc;IAI/B,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,0BAA0B;CAGpE;AAED,wBAAsB,KAAK,CACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,0BAA0B,CAAC,CASrC;AAED,yBAAiB,KAAK,CAAC;IACd,MAAM,IAAI,GAAI,cAAY,KAAG,kBAAiC,CAAA;IAE9D,MAAM,IAAI,GACf,OAAO,MAAM,EACb,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAChC,kBAAuC,CAAA;CAC3C"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import { pipeline } from 'node:stream';
|
|
2
1
|
import { AsyncActivity, Claim, History, WorkflowBatchCollectionRef, WorkflowBatchQuery, WorkflowClaim, workflowBatchSchema, } from '@t4h.framework/core';
|
|
3
2
|
import sift from 'sift';
|
|
4
3
|
import { STRING_OPERATIONS } from '../constants/operations.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { ByteRecordFilter } from '../helpers/ByteRecordFilter.js';
|
|
4
|
+
import { groupRecords } from '../helpers/group-records.js';
|
|
5
|
+
import { splitRecords, } from '../helpers/split-records.js';
|
|
8
6
|
const { createQueryTester } = sift;
|
|
9
7
|
export class FileSplitActivity extends AsyncActivity {
|
|
10
8
|
claims = new Claim({
|
|
11
|
-
fs: FileSystemClaim,
|
|
12
9
|
workflow: WorkflowClaim,
|
|
13
10
|
});
|
|
14
11
|
toInput(binary, workflow, options) {
|
|
@@ -23,25 +20,7 @@ export class FileSplitActivity extends AsyncActivity {
|
|
|
23
20
|
return { binary, workflow: workflow.id, options };
|
|
24
21
|
}
|
|
25
22
|
async bootstrap({ binary, workflow, options, }) {
|
|
26
|
-
const
|
|
27
|
-
const filter = this.toFilter(options.where, options);
|
|
28
|
-
const scanner = new ByteDelimiterScanner({
|
|
29
|
-
delimiter: options.delimiter,
|
|
30
|
-
every: options.every,
|
|
31
|
-
trim: filter ? undefined : options.trim,
|
|
32
|
-
skipEmpty: options.skipEmpty,
|
|
33
|
-
encoding,
|
|
34
|
-
inlineMaxBytes: options.inlineMaxBytes,
|
|
35
|
-
});
|
|
36
|
-
const source = await binary.stream();
|
|
37
|
-
const durable = await this.claims.fs.write(`split/${this.id}`, filter
|
|
38
|
-
? pipeline(source, filter, scanner, () => { })
|
|
39
|
-
: source.pipe(scanner));
|
|
40
|
-
const kept = filter && filter.accepted === 0 ? [] : scanner.slices;
|
|
41
|
-
const slices = await Promise.all(kept.map(({ start, end, content }) => content
|
|
42
|
-
? content.toString(encoding)
|
|
43
|
-
: this.claims.fs.slice(durable, { start, end }, encoding)));
|
|
44
|
-
const batch = await this.claims.workflow.startMany(workflow, slices);
|
|
23
|
+
const batch = await this.claims.workflow.startMany(workflow, this.slices(binary, options));
|
|
45
24
|
if (batch.count === 0)
|
|
46
25
|
return this.done({ batch: batch.id, count: 0 });
|
|
47
26
|
return this.pending({
|
|
@@ -51,18 +30,25 @@ export class FileSplitActivity extends AsyncActivity {
|
|
|
51
30
|
}),
|
|
52
31
|
});
|
|
53
32
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const matches = createQueryTester(where, {
|
|
58
|
-
operations: STRING_OPERATIONS,
|
|
59
|
-
});
|
|
60
|
-
return new ByteRecordFilter({
|
|
33
|
+
async *slices(binary, { delimiter, every, where, trim, skipEmpty = true, ...options }) {
|
|
34
|
+
const encoding = options.encoding ?? 'utf8';
|
|
35
|
+
const records = splitRecords(await binary.stream(), {
|
|
61
36
|
delimiter,
|
|
62
37
|
trim,
|
|
63
38
|
encoding,
|
|
64
|
-
accept: record => matches(record.toString(encoding)),
|
|
65
39
|
});
|
|
40
|
+
const slices = groupRecords(where === undefined ? records : this.filter(records, where, encoding), { delimiter, every, encoding });
|
|
41
|
+
for await (const { content } of slices)
|
|
42
|
+
if (!skipEmpty || content.length > 0)
|
|
43
|
+
yield content.toString(encoding);
|
|
44
|
+
}
|
|
45
|
+
async *filter(records, where, encoding) {
|
|
46
|
+
const matches = createQueryTester(where, {
|
|
47
|
+
operations: STRING_OPERATIONS,
|
|
48
|
+
});
|
|
49
|
+
for await (const record of records)
|
|
50
|
+
if (matches(Buffer.concat(record.pieces).toString(encoding)))
|
|
51
|
+
yield record;
|
|
66
52
|
}
|
|
67
53
|
advance(payload) {
|
|
68
54
|
return this.done(payload);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSplitActivity.js","sourceRoot":"","sources":["../../src/activities/FileSplitActivity.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"FileSplitActivity.js","sourceRoot":"","sources":["../../src/activities/FileSplitActivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/constants/operations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAoBxD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/constants/operations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAoBxD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAgBvE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/constants/operations.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,MAAM,EACJ,IAAI,EACJ,GAAG,EACH,OAAO,EACP,GAAG,EACH,IAAI,EACJ,GAAG,EACH,GAAG,EACH,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,MAAM,GACP,GAAG,IAAI,CAAA;AAER,MAAM,CAAC,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/constants/operations.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,MAAM,EACJ,IAAI,EACJ,GAAG,EACH,OAAO,EACP,GAAG,EACH,IAAI,EACJ,GAAG,EACH,GAAG,EACH,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,MAAM,GACP,GAAG,IAAI,CAAA;AAER,MAAM,CAAC,MAAM,iBAAiB,GAA8C;IAC1E,IAAI;IACJ,GAAG;IACH,OAAO;IACP,GAAG;IACH,IAAI;IACJ,GAAG;IACH,GAAG;IACH,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,GAAG;IACH,MAAM;CACP,CAAA"}
|
package/dist/fs.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ export * from './activities/FileJoinActivity.js';
|
|
|
4
4
|
export * from './activities/FileReadActivity.js';
|
|
5
5
|
export * from './activities/FileSplitActivity.js';
|
|
6
6
|
export * from './activities/FileWriteActivity.js';
|
|
7
|
-
export
|
|
7
|
+
export type { ByteTrim, FileSplitDelimiter } from './helpers/split-records.js';
|
|
8
8
|
//# sourceMappingURL=fs.d.ts.map
|
package/dist/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,kCAAkC,CAAA;AAChD,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA;AACjD,
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,kCAAkC,CAAA;AAChD,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA;AACjD,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA"}
|
package/dist/fs.js
CHANGED
|
@@ -4,5 +4,4 @@ export * from './activities/FileJoinActivity.js';
|
|
|
4
4
|
export * from './activities/FileReadActivity.js';
|
|
5
5
|
export * from './activities/FileSplitActivity.js';
|
|
6
6
|
export * from './activities/FileWriteActivity.js';
|
|
7
|
-
export * from './helpers/ByteDelimiterScanner.js';
|
|
8
7
|
//# sourceMappingURL=fs.js.map
|
package/dist/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,kCAAkC,CAAA;AAChD,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,kCAAkC,CAAA;AAChD,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CSV.d.ts","sourceRoot":"","sources":["../../src/helpers/CSV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"CSV.d.ts","sourceRoot":"","sources":["../../src/helpers/CSV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAUvD,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,yBAAiB,GAAG,CAAC;IACnB,KAAY,MAAM,GAAG,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IA4B9D,SAAgB,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,UAatE;IAED,SAAgB,MAAM,CACpB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,EACrB,OAAO,CAAC,EAAE,aAAa,UAiBxB;CACF"}
|
package/dist/helpers/CSV.js
CHANGED
|
@@ -3,7 +3,9 @@ export var CSV;
|
|
|
3
3
|
function escape(value, delimiter) {
|
|
4
4
|
if (value === null || typeof value === 'undefined')
|
|
5
5
|
return '';
|
|
6
|
-
const text = typeof value === 'object'
|
|
6
|
+
const text = typeof value === 'object'
|
|
7
|
+
? JSON.stringify(value)
|
|
8
|
+
: String(value);
|
|
7
9
|
const includeQuotes = [delimiter, '"', '\n', '\r'];
|
|
8
10
|
if (includeQuotes.some(test => text.includes(test)))
|
|
9
11
|
return `"${text.replaceAll('"', '""')}"`;
|
package/dist/helpers/CSV.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CSV.js","sourceRoot":"","sources":["../../src/helpers/CSV.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CSV.js","sourceRoot":"","sources":["../../src/helpers/CSV.ts"],"names":[],"mappings":"AAcA,MAAM,KAAW,GAAG,CAiEnB;AAjED,WAAiB,GAAG;IAGlB,SAAS,MAAM,CAAC,KAAc,EAAE,SAAiB;QAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,WAAW;YAAE,OAAO,EAAE,CAAA;QAE7D,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ;YACvB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,KAAkB,CAAC,CAAA;QAEhC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAElD,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAA;QAE1C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,SAAS,cAAc,CAAC,MAA+B,EAAE,GAAW;QAClE,IAAI,GAAG,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;QAErC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YACtD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAA;YAE/D,OAAQ,IAAgC,CAAC,OAAO,CAAC,CAAA;QACnD,CAAC,EAAE,MAAM,CAAC,CAAA;IACZ,CAAC;IAED,SAAgB,QAAQ,CAAC,OAAqB,EAAE,OAAuB;QACrE,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,GAAG,CAAA;QAE3C,OAAO,CACL,OAAO;aACJ,GAAG,CAAC,MAAM,CAAC,EAAE;YACZ,MAAM,MAAM,GACV,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;YAErE,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAClC,CAAC,CAAC;aACD,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAC1B,CAAA;IACH,CAAC;IAbe,YAAQ,WAavB,CAAA;IAED,SAAgB,MAAM,CACpB,KAAmB,EACnB,OAAqB,EACrB,OAAuB;QAEvB,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,GAAG,CAAA;QAE3C,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAA;QAEvD,OAAO,CACL,OAAO;aACJ,GAAG,CAAC,MAAM,CAAC,EAAE;YACZ,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;YAE5D,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;YAEzC,OAAO,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACjC,CAAC,CAAC;aACD,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAC1B,CAAA;IACH,CAAC;IApBe,UAAM,SAoBrB,CAAA;AACH,CAAC,EAjEgB,GAAG,KAAH,GAAG,QAiEnB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ByteRecord, type FileSplitDelimiter } from './split-records.js';
|
|
2
|
+
export type ByteSlice = {
|
|
3
|
+
start: number;
|
|
4
|
+
content: Buffer;
|
|
5
|
+
};
|
|
6
|
+
export type GroupRecordsOptions = {
|
|
7
|
+
delimiter: FileSplitDelimiter;
|
|
8
|
+
every?: number;
|
|
9
|
+
encoding?: BufferEncoding;
|
|
10
|
+
};
|
|
11
|
+
export declare function groupRecords(source: AsyncIterable<ByteRecord>, { delimiter, every, encoding }: GroupRecordsOptions): AsyncGenerator<ByteSlice>;
|
|
12
|
+
//# sourceMappingURL=group-records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-records.d.ts","sourceRoot":"","sources":["../../src/helpers/group-records.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EAIxB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,kBAAkB,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,EAAE,SAAS,EAAE,KAAS,EAAE,QAAiB,EAAE,EAAE,mBAAmB,GAC/D,cAAc,CAAC,SAAS,CAAC,CAW3B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { MAX_SLICE_BYTES, sliceTooLarge, toDelimiter, } from './split-records.js';
|
|
2
|
+
export function groupRecords(source, { delimiter, every = 1, encoding = 'utf8' }) {
|
|
3
|
+
const { bytes, keepPrevious, keepNext } = toDelimiter(delimiter, encoding);
|
|
4
|
+
if (!Number.isInteger(every) || every < 1)
|
|
5
|
+
throw new TypeError('Split every must be a positive integer');
|
|
6
|
+
return groups(source, bytes.subarray(keepPrevious, bytes.length - keepNext), every);
|
|
7
|
+
}
|
|
8
|
+
async function* groups(source, joint, every) {
|
|
9
|
+
let parts = [];
|
|
10
|
+
let sizeInBytes = 0;
|
|
11
|
+
let count = 0;
|
|
12
|
+
let start = 0;
|
|
13
|
+
for await (const record of source) {
|
|
14
|
+
if (count === 0)
|
|
15
|
+
start = record.start;
|
|
16
|
+
else {
|
|
17
|
+
parts.push(joint);
|
|
18
|
+
sizeInBytes += joint.length;
|
|
19
|
+
}
|
|
20
|
+
for (const piece of record.pieces) {
|
|
21
|
+
parts.push(piece);
|
|
22
|
+
sizeInBytes += piece.length;
|
|
23
|
+
}
|
|
24
|
+
if (sizeInBytes > MAX_SLICE_BYTES)
|
|
25
|
+
throw sliceTooLarge(start, sizeInBytes);
|
|
26
|
+
if (++count < every)
|
|
27
|
+
continue;
|
|
28
|
+
yield { start, content: Buffer.concat(parts, sizeInBytes) };
|
|
29
|
+
parts = [];
|
|
30
|
+
sizeInBytes = 0;
|
|
31
|
+
count = 0;
|
|
32
|
+
}
|
|
33
|
+
if (count > 0)
|
|
34
|
+
yield { start, content: Buffer.concat(parts, sizeInBytes) };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=group-records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-records.js","sourceRoot":"","sources":["../../src/helpers/group-records.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EACf,aAAa,EACb,WAAW,GACZ,MAAM,oBAAoB,CAAA;AAa3B,MAAM,UAAU,YAAY,CAC1B,MAAiC,EACjC,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,MAAM,EAAuB;IAEhE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAE1E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QACvC,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAA;IAE/D,OAAO,MAAM,CACX,MAAM,EACN,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,EACrD,KAAK,CACN,CAAA;AACH,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,MAAM,CACpB,MAAiC,EACjC,KAAa,EACb,KAAa;IAEb,IAAI,KAAK,GAAa,EAAE,CAAA;IACxB,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,KAAK,GAAG,CAAC,CAAA;IAEb,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAClC,IAAI,KAAK,KAAK,CAAC;YAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;aAChC,CAAC;YACJ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAEjB,WAAW,IAAI,KAAK,CAAC,MAAM,CAAA;QAC7B,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAEjB,WAAW,IAAI,KAAK,CAAC,MAAM,CAAA;QAC7B,CAAC;QAED,IAAI,WAAW,GAAG,eAAe;YAAE,MAAM,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QAE1E,IAAI,EAAE,KAAK,GAAG,KAAK;YAAE,SAAQ;QAE7B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAA;QAE3D,KAAK,GAAG,EAAE,CAAA;QACV,WAAW,GAAG,CAAC,CAAA;QACf,KAAK,GAAG,CAAC,CAAA;IACX,CAAC;IAED,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAA;AAC5E,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type FileSplitDelimiter = {
|
|
2
|
+
value: string;
|
|
3
|
+
keep?: {
|
|
4
|
+
previous?: number;
|
|
5
|
+
next?: number;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export type ByteTrim = {
|
|
9
|
+
start?: number;
|
|
10
|
+
end?: number;
|
|
11
|
+
};
|
|
12
|
+
export type ByteRecord = {
|
|
13
|
+
start: number;
|
|
14
|
+
pieces: Buffer[];
|
|
15
|
+
};
|
|
16
|
+
export type SplitRecordsOptions = {
|
|
17
|
+
delimiter: FileSplitDelimiter;
|
|
18
|
+
trim?: ByteTrim;
|
|
19
|
+
encoding?: BufferEncoding;
|
|
20
|
+
};
|
|
21
|
+
export declare const MAX_SLICE_BYTES: number;
|
|
22
|
+
export type ByteDelimiter = {
|
|
23
|
+
bytes: Buffer;
|
|
24
|
+
keepPrevious: number;
|
|
25
|
+
keepNext: number;
|
|
26
|
+
};
|
|
27
|
+
export declare function toDelimiter({ value, keep }: FileSplitDelimiter, encoding: BufferEncoding): ByteDelimiter;
|
|
28
|
+
export declare function sliceTooLarge(start: number, sizeInBytes: number): RangeError;
|
|
29
|
+
export declare function splitRecords(source: AsyncIterable<Buffer>, { delimiter, trim, encoding }: SplitRecordsOptions): AsyncGenerator<ByteRecord>;
|
|
30
|
+
//# sourceMappingURL=split-records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-records.d.ts","sourceRoot":"","sources":["../../src/helpers/split-records.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,kBAAkB,CAAA;IAC7B,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,eAAe,QAAkB,CAAA;AAE9C,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,wBAAgB,WAAW,CACzB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,kBAAkB,EACnC,QAAQ,EAAE,cAAc,GACvB,aAAa,CAiBf;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAI/D;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,EAAE,SAAS,EAAE,IAAI,EAAE,QAAiB,EAAE,EAAE,mBAAmB,GAC1D,cAAc,CAAC,UAAU,CAAC,CAkB5B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
export const MAX_SLICE_BYTES = 3 * 1024 * 1024;
|
|
2
|
+
export function toDelimiter({ value, keep }, encoding) {
|
|
3
|
+
const bytes = Buffer.from(value, encoding);
|
|
4
|
+
const keepPrevious = keep?.previous ?? 0;
|
|
5
|
+
const keepNext = keep?.next ?? 0;
|
|
6
|
+
if (bytes.length === 0)
|
|
7
|
+
throw new TypeError('Split delimiter must not be empty');
|
|
8
|
+
if (keepPrevious < 0 || keepNext < 0)
|
|
9
|
+
throw new TypeError('Split delimiter keep sizes must not be negative');
|
|
10
|
+
if (keepPrevious + keepNext > bytes.length)
|
|
11
|
+
throw new TypeError('Split delimiter keep sizes must not exceed the delimiter length');
|
|
12
|
+
return { bytes, keepPrevious, keepNext };
|
|
13
|
+
}
|
|
14
|
+
export function sliceTooLarge(start, sizeInBytes) {
|
|
15
|
+
return new RangeError(`Split slice starting at byte ${String(start)} is larger than ${String(MAX_SLICE_BYTES)} bytes (${String(sizeInBytes)} so far): lower every or check the delimiter`);
|
|
16
|
+
}
|
|
17
|
+
export function splitRecords(source, { delimiter, trim, encoding = 'utf8' }) {
|
|
18
|
+
const cut = toDelimiter(delimiter, encoding);
|
|
19
|
+
const trimStart = trim?.start ?? 0;
|
|
20
|
+
const trimEnd = trim?.end ?? 0;
|
|
21
|
+
if (!Number.isInteger(trimStart) ||
|
|
22
|
+
!Number.isInteger(trimEnd) ||
|
|
23
|
+
trimStart < 0 ||
|
|
24
|
+
trimEnd < 0)
|
|
25
|
+
throw new TypeError('Split trim sizes must be non-negative integers');
|
|
26
|
+
return records(skipLast(skipFirst(source, trimStart), trimEnd), cut, trimStart);
|
|
27
|
+
}
|
|
28
|
+
async function* records(source, { bytes, keepPrevious, keepNext }, offset) {
|
|
29
|
+
let pieces = [];
|
|
30
|
+
let start = offset;
|
|
31
|
+
let consumed = offset;
|
|
32
|
+
let searchAt = offset;
|
|
33
|
+
let tail = Buffer.alloc(0);
|
|
34
|
+
const take = (end) => {
|
|
35
|
+
const taken = [];
|
|
36
|
+
let remaining = end - start;
|
|
37
|
+
while (remaining > 0) {
|
|
38
|
+
const piece = pieces[0];
|
|
39
|
+
if (piece === undefined)
|
|
40
|
+
throw new RangeError('Split ran out of buffered bytes to take');
|
|
41
|
+
if (piece.length <= remaining) {
|
|
42
|
+
taken.push(piece);
|
|
43
|
+
pieces.shift();
|
|
44
|
+
remaining -= piece.length;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
taken.push(piece.subarray(0, remaining));
|
|
48
|
+
pieces[0] = piece.subarray(remaining);
|
|
49
|
+
remaining = 0;
|
|
50
|
+
}
|
|
51
|
+
start = end;
|
|
52
|
+
return taken;
|
|
53
|
+
};
|
|
54
|
+
for await (const chunk of source) {
|
|
55
|
+
if (chunk.length === 0)
|
|
56
|
+
continue;
|
|
57
|
+
const chunkAt = consumed;
|
|
58
|
+
pieces.push(chunk);
|
|
59
|
+
consumed += chunk.length;
|
|
60
|
+
const matches = [];
|
|
61
|
+
const straddling = straddlingMatch(tail, chunk, chunkAt, bytes, searchAt);
|
|
62
|
+
if (straddling !== -1) {
|
|
63
|
+
matches.push(straddling);
|
|
64
|
+
searchAt = straddling + bytes.length;
|
|
65
|
+
}
|
|
66
|
+
let index;
|
|
67
|
+
while ((index = chunk.indexOf(bytes, Math.max(0, searchAt - chunkAt))) !== -1) {
|
|
68
|
+
matches.push(chunkAt + index);
|
|
69
|
+
searchAt = chunkAt + index + bytes.length;
|
|
70
|
+
}
|
|
71
|
+
for (const at of matches) {
|
|
72
|
+
const record = { start, pieces: take(at + keepPrevious) };
|
|
73
|
+
take(at + bytes.length - keepNext);
|
|
74
|
+
yield record;
|
|
75
|
+
}
|
|
76
|
+
if (consumed - start > MAX_SLICE_BYTES)
|
|
77
|
+
throw sliceTooLarge(start, consumed - start);
|
|
78
|
+
tail =
|
|
79
|
+
chunk.length >= bytes.length - 1
|
|
80
|
+
? Buffer.from(chunk.subarray(chunk.length - (bytes.length - 1)))
|
|
81
|
+
: Buffer.concat([tail, chunk]).subarray(-(bytes.length - 1));
|
|
82
|
+
}
|
|
83
|
+
const last = { start, pieces };
|
|
84
|
+
pieces = [];
|
|
85
|
+
yield last;
|
|
86
|
+
}
|
|
87
|
+
async function* skipFirst(source, count) {
|
|
88
|
+
let remaining = count;
|
|
89
|
+
for await (const chunk of source) {
|
|
90
|
+
if (remaining >= chunk.length) {
|
|
91
|
+
remaining -= chunk.length;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
yield chunk.subarray(remaining);
|
|
95
|
+
remaining = 0;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async function* skipLast(source, count) {
|
|
99
|
+
if (count === 0) {
|
|
100
|
+
yield* source;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
let tail = Buffer.alloc(0);
|
|
104
|
+
for await (const chunk of source) {
|
|
105
|
+
const buffer = Buffer.concat([tail, chunk]);
|
|
106
|
+
const end = Math.max(0, buffer.length - count);
|
|
107
|
+
if (end > 0)
|
|
108
|
+
yield buffer.subarray(0, end);
|
|
109
|
+
tail = buffer.subarray(end);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function straddlingMatch(tail, chunk, chunkAt, bytes, searchAt) {
|
|
113
|
+
if (tail.length === 0)
|
|
114
|
+
return -1;
|
|
115
|
+
const probe = Buffer.concat([tail, chunk.subarray(0, bytes.length - 1)]);
|
|
116
|
+
const probeAt = chunkAt - tail.length;
|
|
117
|
+
const index = probe.indexOf(bytes, Math.max(0, searchAt - probeAt));
|
|
118
|
+
if (index === -1 || probeAt + index >= chunkAt)
|
|
119
|
+
return -1;
|
|
120
|
+
return probeAt + index;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=split-records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-records.js","sourceRoot":"","sources":["../../src/helpers/split-records.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.13.1",
|
|
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",
|
|
@@ -26,13 +26,14 @@
|
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "tsc --project tsconfig.build.json",
|
|
28
28
|
"check-types": "tsc --noEmit",
|
|
29
|
-
"
|
|
29
|
+
"check-package": "publint --strict && attw --pack . --profile esm-only",
|
|
30
|
+
"lint": "eslint . --max-warnings 0",
|
|
30
31
|
"prepublishOnly": "yarn build",
|
|
31
32
|
"test": "vitest run",
|
|
32
33
|
"test:watch": "vitest"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"@t4h.framework/core": "^0.
|
|
36
|
+
"@t4h.framework/core": "^0.20.0",
|
|
36
37
|
"typescript": "^5.9.3",
|
|
37
38
|
"vitest": "^4.0.18"
|
|
38
39
|
},
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { Transform, type TransformCallback } from 'node:stream';
|
|
2
|
-
export type ByteRange = {
|
|
3
|
-
start: number;
|
|
4
|
-
end: number;
|
|
5
|
-
};
|
|
6
|
-
export type ByteSlice = ByteRange & {
|
|
7
|
-
content?: Buffer;
|
|
8
|
-
};
|
|
9
|
-
export type FileSplitDelimiter = {
|
|
10
|
-
value: string;
|
|
11
|
-
keep?: {
|
|
12
|
-
previous?: number;
|
|
13
|
-
next?: number;
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
export type ByteTrim = {
|
|
17
|
-
start?: number;
|
|
18
|
-
end?: number;
|
|
19
|
-
};
|
|
20
|
-
export type ByteDelimiterScannerOptions = {
|
|
21
|
-
delimiter: FileSplitDelimiter;
|
|
22
|
-
every?: number;
|
|
23
|
-
trim?: ByteTrim;
|
|
24
|
-
skipEmpty?: boolean;
|
|
25
|
-
encoding?: BufferEncoding;
|
|
26
|
-
inlineMaxBytes?: number;
|
|
27
|
-
};
|
|
28
|
-
export declare const DEFAULT_INLINE_MAX_BYTES: number;
|
|
29
|
-
export declare class ByteDelimiterScanner extends Transform {
|
|
30
|
-
readonly slices: ByteSlice[];
|
|
31
|
-
private readonly delimiter;
|
|
32
|
-
private readonly keepPrevious;
|
|
33
|
-
private readonly keepNext;
|
|
34
|
-
private readonly cutEvery;
|
|
35
|
-
private readonly trimStart;
|
|
36
|
-
private readonly trimEnd;
|
|
37
|
-
private readonly skipEmpty;
|
|
38
|
-
private readonly inlineMaxBytes;
|
|
39
|
-
private pending;
|
|
40
|
-
private pendingAt;
|
|
41
|
-
private searchAt;
|
|
42
|
-
private sliceStart;
|
|
43
|
-
private matches;
|
|
44
|
-
constructor({ delimiter, every, trim, skipEmpty, encoding, inlineMaxBytes, }: ByteDelimiterScannerOptions);
|
|
45
|
-
_transform(chunk: Buffer, _encoding: BufferEncoding, callback: TransformCallback): void;
|
|
46
|
-
_flush(callback: TransformCallback): void;
|
|
47
|
-
private scan;
|
|
48
|
-
private cut;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=ByteDelimiterScanner.d.ts.map
|