@t4h.framework/fs 0.13.0 → 0.14.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 +87 -186
- package/.ai/skills/framework-fs-split/SKILL.md +134 -314
- package/.ai/skills/framework-fs-write/SKILL.md +54 -214
- package/CHANGELOG.md +56 -0
- package/README.md +20 -351
- package/dist/activities/FileJoinActivity.d.ts +4 -5
- package/dist/activities/FileJoinActivity.d.ts.map +1 -1
- package/dist/activities/FileJoinActivity.js +38 -43
- 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 +34 -26
- package/dist/activities/FileReadActivity.js.map +1 -1
- package/dist/activities/FileSplitActivity.d.ts +23 -43
- package/dist/activities/FileSplitActivity.d.ts.map +1 -1
- package/dist/activities/FileSplitActivity.js +23 -38
- 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 +3 -14
- package/dist/constants/operations.js.map +1 -1
- package/dist/fs.d.ts +5 -1
- package/dist/fs.d.ts.map +1 -1
- package/dist/helpers/CSV.d.ts +2 -2
- package/dist/helpers/CSV.d.ts.map +1 -1
- package/dist/helpers/CSV.js +20 -22
- package/dist/helpers/CSV.js.map +1 -1
- package/dist/helpers/group-by-key.d.ts +8 -0
- package/dist/helpers/group-by-key.d.ts.map +1 -0
- package/dist/helpers/group-by-key.js +35 -0
- package/dist/helpers/group-by-key.js.map +1 -0
- package/dist/helpers/group-records.d.ts +2 -2
- package/dist/helpers/group-records.d.ts.map +1 -1
- package/dist/helpers/group-records.js +3 -3
- package/dist/helpers/group-records.js.map +1 -1
- package/dist/helpers/in-chunks.d.ts +5 -0
- package/dist/helpers/in-chunks.d.ts.map +1 -0
- package/dist/helpers/in-chunks.js +17 -0
- package/dist/helpers/in-chunks.js.map +1 -0
- package/dist/helpers/split-records.d.ts +4 -3
- package/dist/helpers/split-records.d.ts.map +1 -1
- package/dist/helpers/split-records.js +75 -46
- package/dist/helpers/split-records.js.map +1 -1
- package/dist/helpers/where-matcher.d.ts +21 -0
- package/dist/helpers/where-matcher.d.ts.map +1 -0
- package/dist/helpers/where-matcher.js +11 -0
- package/dist/helpers/where-matcher.js.map +1 -0
- package/dist/models/BinaryRecordKey.d.ts +27 -0
- package/dist/models/BinaryRecordKey.d.ts.map +1 -0
- package/dist/models/BinaryRecordKey.js +52 -0
- package/dist/models/BinaryRecordKey.js.map +1 -0
- package/dist/models/BinarySource.d.ts +45 -0
- package/dist/models/BinarySource.d.ts.map +1 -0
- package/dist/models/BinarySource.js +58 -0
- package/dist/models/BinarySource.js.map +1 -0
- package/dist/models/BinarySplit.d.ts +45 -0
- package/dist/models/BinarySplit.d.ts.map +1 -0
- package/dist/models/BinarySplit.js +81 -0
- package/dist/models/BinarySplit.js.map +1 -0
- package/dist/models/BinarySplitInput.d.ts +21 -0
- package/dist/models/BinarySplitInput.d.ts.map +1 -0
- package/dist/models/BinarySplitInput.js +85 -0
- package/dist/models/BinarySplitInput.js.map +1 -0
- package/dist/models/Database.d.ts +15 -0
- package/dist/models/Database.d.ts.map +1 -0
- package/dist/models/Database.js +57 -0
- package/dist/models/Database.js.map +1 -0
- package/dist/models/OpenKeyGroup.d.ts +23 -0
- package/dist/models/OpenKeyGroup.d.ts.map +1 -0
- package/dist/models/OpenKeyGroup.js +42 -0
- package/dist/models/OpenKeyGroup.js.map +1 -0
- package/dist/models/SplitDatabaseWorker.d.ts +12 -0
- package/dist/models/SplitDatabaseWorker.d.ts.map +1 -0
- package/dist/models/SplitDatabaseWorker.js +65 -0
- package/dist/models/SplitDatabaseWorker.js.map +1 -0
- package/dist/workers/split-database.d.ts +10 -0
- package/dist/workers/split-database.d.ts.map +1 -0
- package/dist/workers/split-database.js +43 -0
- package/dist/workers/split-database.js.map +1 -0
- package/package.json +5 -4
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"FileReadActivity.js","sourceRoot":"","sources":["../../src/activities/FileReadActivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +1,41 @@
|
|
|
1
|
-
import { AsyncActivity, type Binary, type
|
|
2
|
-
import
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
$regex?: string;
|
|
13
|
-
$options?: string;
|
|
14
|
-
$not?: FileSplitWhere;
|
|
1
|
+
import { AsyncActivity, type AsyncActivityResult, type Binary, type AnyWorkflow, type Serializable, WorkflowBatchCollectionRef, workflowBatchSchema, type WorkflowInput } from '@t4h.framework/core';
|
|
2
|
+
import type { BinaryDelimiter } from '../helpers/split-records.js';
|
|
3
|
+
import type { BinaryWhere } from '../helpers/where-matcher.js';
|
|
4
|
+
import { type BinarySplitOptions, type BinarySplitOptionsJSON } from '../models/BinarySplit.js';
|
|
5
|
+
/** @deprecated Use `BinaryDelimiter`. */
|
|
6
|
+
export type FileSplitDelimiter = BinaryDelimiter;
|
|
7
|
+
/** @deprecated Use `BinaryWhere`. */
|
|
8
|
+
export type FileSplitWhere = BinaryWhere;
|
|
9
|
+
export type FileSplitOptions<TWorkflow extends AnyWorkflow = AnyWorkflow> = BinarySplitOptions & {
|
|
10
|
+
timeoutInMs?: number;
|
|
11
|
+
input?: WorkflowInput<TWorkflow>;
|
|
15
12
|
};
|
|
16
|
-
export type
|
|
17
|
-
$and?: FileSplitWhere[];
|
|
18
|
-
$or?: FileSplitWhere[];
|
|
19
|
-
$nor?: FileSplitWhere[];
|
|
20
|
-
});
|
|
21
|
-
export type FileSplitOptions = {
|
|
22
|
-
delimiter: FileSplitDelimiter;
|
|
23
|
-
every?: number;
|
|
24
|
-
where?: FileSplitWhere;
|
|
25
|
-
trim?: ByteTrim;
|
|
26
|
-
skipEmpty?: boolean;
|
|
27
|
-
encoding?: BufferEncoding;
|
|
13
|
+
export type FileSplitActivityOptions = BinarySplitOptionsJSON & {
|
|
28
14
|
timeoutInMs?: number;
|
|
29
15
|
};
|
|
30
16
|
export type FileSplitActivityInput = {
|
|
31
17
|
binary: Binary;
|
|
32
18
|
workflow: string;
|
|
33
|
-
options:
|
|
19
|
+
options: FileSplitActivityOptions;
|
|
20
|
+
input?: Serializable;
|
|
34
21
|
};
|
|
35
22
|
export type FileSplitBatch = {
|
|
36
23
|
batch: string;
|
|
37
24
|
count: number;
|
|
38
25
|
};
|
|
39
|
-
export declare class FileSplitActivity extends AsyncActivity<readonly [
|
|
40
|
-
binary: Binary,
|
|
41
|
-
workflow: Workflow<any, any>,
|
|
42
|
-
options: FileSplitOptions
|
|
43
|
-
], FileSplitActivityInput, FileSplitBatch, WorkflowBatchCollectionRef, FileSplitActivityInput, typeof workflowBatchSchema> {
|
|
26
|
+
export declare class FileSplitActivity extends AsyncActivity<readonly [binary: Binary, workflow: AnyWorkflow, options: FileSplitOptions], FileSplitActivityInput, FileSplitBatch, WorkflowBatchCollectionRef, FileSplitActivityInput, typeof workflowBatchSchema> {
|
|
44
27
|
private readonly claims;
|
|
45
|
-
toInput(binary: Binary, workflow:
|
|
46
|
-
bootstrap(
|
|
47
|
-
batch: import("typebox").TString;
|
|
48
|
-
count: import("typebox").TNumber;
|
|
49
|
-
}>> | import("@t4h.framework/core").AsyncActivityResultFulfilled<FileSplitBatch | undefined>>;
|
|
50
|
-
private slices;
|
|
51
|
-
private filter;
|
|
28
|
+
toInput(binary: Binary, workflow: AnyWorkflow, options: FileSplitOptions): FileSplitActivityInput;
|
|
29
|
+
bootstrap(input: FileSplitActivityInput): Promise<AsyncActivityResult<FileSplitActivityInput, typeof workflowBatchSchema, FileSplitBatch>>;
|
|
52
30
|
advance(payload: FileSplitBatch): import("@t4h.framework/core").AsyncActivityResultFulfilled<FileSplitBatch | undefined>;
|
|
53
31
|
toOutput(output: FileSplitBatch): WorkflowBatchCollectionRef;
|
|
54
32
|
}
|
|
55
|
-
export declare function split(binary: Binary, workflow:
|
|
33
|
+
export declare function split<TWorkflow extends AnyWorkflow>(binary: Binary, workflow: TWorkflow, options: FileSplitOptions<TWorkflow>): Promise<WorkflowBatchCollectionRef>;
|
|
56
34
|
export declare namespace Split {
|
|
57
|
-
const line: (value?: string) =>
|
|
58
|
-
const char: (value: string, keep?:
|
|
35
|
+
const line: (value?: string) => BinaryDelimiter;
|
|
36
|
+
const char: (value: string, keep?: BinaryDelimiter["keep"]) => BinaryDelimiter;
|
|
37
|
+
const slice: string;
|
|
38
|
+
const key: string;
|
|
39
|
+
const rows: (name: string) => string;
|
|
59
40
|
}
|
|
60
|
-
export {};
|
|
61
41
|
//# sourceMappingURL=FileSplitActivity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSplitActivity.d.ts","sourceRoot":"","sources":["../../src/activities/FileSplitActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,
|
|
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,KAAK,YAAY,EACjB,0BAA0B,EAE1B,mBAAmB,EACnB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAA;AAOjC,yCAAyC;AACzC,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAA;AAEhD,qCAAqC;AACrC,MAAM,MAAM,cAAc,GAAG,WAAW,CAAA;AAExC,MAAM,MAAM,gBAAgB,CAAC,SAAS,SAAS,WAAW,GAAG,WAAW,IACtE,kBAAkB,GAAG;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;CACjC,CAAA;AAEH,MAAM,MAAM,wBAAwB,GAAG,sBAAsB,GAAG;IAC9D,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,wBAAwB,CAAA;IACjC,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB,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;IAoBZ,SAAS,CACpB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CACR,mBAAmB,CACjB,sBAAsB,EACtB,OAAO,mBAAmB,EAC1B,cAAc,CACf,CACF;IAiBM,OAAO,CAAC,OAAO,EAAE,cAAc;IAI/B,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,0BAA0B;CAGpE;AAED,wBAAsB,KAAK,CAAC,SAAS,SAAS,WAAW,EACvD,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,GACnC,OAAO,CAAC,0BAA0B,CAAC,CASrC;AAED,yBAAiB,KAAK,CAAC;IACd,MAAM,IAAI,GAAI,cAAY,KAAG,eAA8B,CAAA;IAE3D,MAAM,IAAI,GACf,OAAO,MAAM,EACb,OAAO,eAAe,CAAC,MAAM,CAAC,KAC7B,eAAoC,CAAA;IAEhC,MAAM,KAAK,EAAE,MAAqB,CAAA;IAElC,MAAM,GAAG,EAAE,MAAmB,CAAA;IAE9B,MAAM,IAAI,GAAI,MAAM,MAAM,KAAG,MAA4B,CAAA;CACjE"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { AsyncActivity, Claim, History, WorkflowBatchCollectionRef,
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { groupRecords } from '../helpers/group-records.js';
|
|
5
|
-
import { splitRecords, } from '../helpers/split-records.js';
|
|
6
|
-
const { createQueryTester } = sift;
|
|
1
|
+
import { AsyncActivity, Claim, History, WorkflowBatchCollectionRef, WorkflowClaim, workflowBatchSchema, } from '@t4h.framework/core';
|
|
2
|
+
import { BinarySplit, } from '../models/BinarySplit.js';
|
|
3
|
+
import { KEY_MARKER, ROWS_MARKER, SLICE_MARKER, } from '../models/BinarySplitInput.js';
|
|
7
4
|
export class FileSplitActivity extends AsyncActivity {
|
|
8
5
|
claims = new Claim({
|
|
9
6
|
workflow: WorkflowClaim,
|
|
@@ -11,45 +8,30 @@ export class FileSplitActivity extends AsyncActivity {
|
|
|
11
8
|
toInput(binary, workflow, options) {
|
|
12
9
|
if (!workflow.id)
|
|
13
10
|
throw new TypeError('Could not split a file into a workflow without an id');
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
11
|
+
const { timeoutInMs, input, ...split } = options;
|
|
12
|
+
const stored = BinarySplit.from({
|
|
13
|
+
binary,
|
|
14
|
+
options: split,
|
|
15
|
+
input: input,
|
|
16
|
+
}).toJSON();
|
|
17
|
+
return {
|
|
18
|
+
...stored,
|
|
19
|
+
workflow: workflow.id,
|
|
20
|
+
options: { ...stored.options, timeoutInMs },
|
|
21
|
+
};
|
|
21
22
|
}
|
|
22
|
-
async bootstrap(
|
|
23
|
-
const
|
|
23
|
+
async bootstrap(input) {
|
|
24
|
+
const { workflow, options } = input;
|
|
25
|
+
const batch = await this.claims.workflow.startMany(workflow, BinarySplit.from(input).inputs());
|
|
24
26
|
if (batch.count === 0)
|
|
25
27
|
return this.done({ batch: batch.id, count: 0 });
|
|
26
28
|
return this.pending({
|
|
27
29
|
schema: workflowBatchSchema,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
timeoutAt: options.timeoutInMs
|
|
31
|
+
? new Date(Date.now() + options.timeoutInMs)
|
|
32
|
+
: undefined,
|
|
31
33
|
});
|
|
32
34
|
}
|
|
33
|
-
async *slices(binary, { delimiter, every, where, trim, skipEmpty = true, ...options }) {
|
|
34
|
-
const encoding = options.encoding ?? 'utf8';
|
|
35
|
-
const records = splitRecords(await binary.stream(), {
|
|
36
|
-
delimiter,
|
|
37
|
-
trim,
|
|
38
|
-
encoding,
|
|
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;
|
|
52
|
-
}
|
|
53
35
|
advance(payload) {
|
|
54
36
|
return this.done(payload);
|
|
55
37
|
}
|
|
@@ -65,5 +47,8 @@ export var Split;
|
|
|
65
47
|
(function (Split) {
|
|
66
48
|
Split.line = (value = '\n') => ({ value });
|
|
67
49
|
Split.char = (value, keep) => ({ value, keep });
|
|
50
|
+
Split.slice = SLICE_MARKER;
|
|
51
|
+
Split.key = KEY_MARKER;
|
|
52
|
+
Split.rows = (name) => ROWS_MARKER + name;
|
|
68
53
|
})(Split || (Split = {}));
|
|
69
54
|
//# sourceMappingURL=FileSplitActivity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSplitActivity.js","sourceRoot":"","sources":["../../src/activities/FileSplitActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,
|
|
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":"
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/constants/operations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAIxD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAIvE,CAAA"}
|
|
@@ -1,20 +1,9 @@
|
|
|
1
|
+
import { WorkflowBatchQuery } from '@t4h.framework/core';
|
|
1
2
|
import sift from 'sift';
|
|
2
|
-
const { $
|
|
3
|
+
const { $options, $regex } = sift;
|
|
3
4
|
export const STRING_OPERATIONS = {
|
|
4
|
-
|
|
5
|
-
$eq,
|
|
6
|
-
$exists,
|
|
7
|
-
$gt,
|
|
8
|
-
$gte,
|
|
9
|
-
$in,
|
|
10
|
-
$lt,
|
|
11
|
-
$lte,
|
|
12
|
-
$ne,
|
|
13
|
-
$nin,
|
|
14
|
-
$nor,
|
|
15
|
-
$not,
|
|
5
|
+
...WorkflowBatchQuery.OPERATIONS,
|
|
16
6
|
$options,
|
|
17
|
-
$or,
|
|
18
7
|
$regex,
|
|
19
8
|
};
|
|
20
9
|
//# sourceMappingURL=operations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/constants/operations.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/constants/operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AAEjC,MAAM,CAAC,MAAM,iBAAiB,GAA8C;IAC1E,GAAG,kBAAkB,CAAC,UAAU;IAChC,QAAQ;IACR,MAAM;CACP,CAAA"}
|
package/dist/fs.d.ts
CHANGED
|
@@ -4,5 +4,9 @@ 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 type {
|
|
7
|
+
export type { BinaryDelimiter, ByteTrim } from './helpers/split-records.js';
|
|
8
|
+
export type { BinaryWhere } from './helpers/where-matcher.js';
|
|
9
|
+
export type { BinaryRecordKeyJSON, BinaryRecordKeyOptions, BinaryReplace, } from './models/BinaryRecordKey.js';
|
|
10
|
+
export type { BinarySourceJSON, BinarySourceOptions, } from './models/BinarySource.js';
|
|
11
|
+
export type { BinarySplitOptions, BinarySplitOptionsJSON, } from './models/BinarySplit.js';
|
|
8
12
|
//# 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,YAAY,EAAE,QAAQ,EAAE,
|
|
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,eAAe,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,GACd,MAAM,6BAA6B,CAAA;AACpC,YAAY,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EACV,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,yBAAyB,CAAA"}
|
package/dist/helpers/CSV.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export declare namespace CSV {
|
|
|
7
7
|
key: string;
|
|
8
8
|
header?: string;
|
|
9
9
|
};
|
|
10
|
-
function toHeader(columns:
|
|
11
|
-
function toLine(value: Serializable, columns:
|
|
10
|
+
function toHeader(columns: Column[], options?: ToLineOptions): string;
|
|
11
|
+
function toLine(value: Serializable, columns: Column[], options?: ToLineOptions): string;
|
|
12
12
|
}
|
|
13
13
|
export {};
|
|
14
14
|
//# sourceMappingURL=CSV.d.ts.map
|
|
@@ -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;AAEvD,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;
|
|
1
|
+
{"version":3,"file":"CSV.d.ts","sourceRoot":"","sources":["../../src/helpers/CSV.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID,yBAAiB,GAAG,CAAC;IACnB,KAAY,MAAM,GAAG,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAqC9D,SAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,UAOlE;IAED,SAAgB,MAAM,CACpB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,aAAa,UAaxB;CACF"}
|
package/dist/helpers/CSV.js
CHANGED
|
@@ -1,13 +1,24 @@
|
|
|
1
|
+
const QUOTED_CHARACTERS = ['"', '\n', '\r'];
|
|
1
2
|
export var CSV;
|
|
2
3
|
(function (CSV) {
|
|
3
|
-
function
|
|
4
|
-
if (value === null ||
|
|
4
|
+
function toText(value) {
|
|
5
|
+
if (value === null || value === undefined)
|
|
5
6
|
return '';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
if (
|
|
9
|
-
return
|
|
10
|
-
return
|
|
7
|
+
if (typeof value === 'string')
|
|
8
|
+
return value;
|
|
9
|
+
if (typeof value === 'object')
|
|
10
|
+
return JSON.stringify(value);
|
|
11
|
+
return String(value);
|
|
12
|
+
}
|
|
13
|
+
function escape(value, delimiter) {
|
|
14
|
+
const text = toText(value);
|
|
15
|
+
if (![delimiter, ...QUOTED_CHARACTERS].some(test => text.includes(test)))
|
|
16
|
+
return text;
|
|
17
|
+
return `"${text.replaceAll('"', '""')}"`;
|
|
18
|
+
}
|
|
19
|
+
function toRow(cells, options) {
|
|
20
|
+
const delimiter = options?.delimiter ?? ',';
|
|
21
|
+
return cells.map(cell => escape(cell, delimiter)).join(delimiter) + '\n';
|
|
11
22
|
}
|
|
12
23
|
function getColumnValue(output, key) {
|
|
13
24
|
if (key in output)
|
|
@@ -19,25 +30,12 @@ export var CSV;
|
|
|
19
30
|
}, output);
|
|
20
31
|
}
|
|
21
32
|
function toHeader(columns, options) {
|
|
22
|
-
|
|
23
|
-
return (columns
|
|
24
|
-
.map(column => {
|
|
25
|
-
const header = typeof column === 'string' ? column : (column.header ?? column.key);
|
|
26
|
-
return escape(header, delimiter);
|
|
27
|
-
})
|
|
28
|
-
.join(delimiter) + '\n');
|
|
33
|
+
return toRow(columns.map(column => typeof column === 'string' ? column : (column.header ?? column.key)), options);
|
|
29
34
|
}
|
|
30
35
|
CSV.toHeader = toHeader;
|
|
31
36
|
function toLine(value, columns, options) {
|
|
32
|
-
const delimiter = options?.delimiter ?? ',';
|
|
33
37
|
const output = (value ?? {});
|
|
34
|
-
return (columns
|
|
35
|
-
.map(column => {
|
|
36
|
-
const key = typeof column === 'string' ? column : column.key;
|
|
37
|
-
const value = getColumnValue(output, key);
|
|
38
|
-
return escape(value, delimiter);
|
|
39
|
-
})
|
|
40
|
-
.join(delimiter) + '\n');
|
|
38
|
+
return toRow(columns.map(column => getColumnValue(output, typeof column === 'string' ? column : column.key)), options);
|
|
41
39
|
}
|
|
42
40
|
CSV.toLine = toLine;
|
|
43
41
|
})(CSV || (CSV = {}));
|
package/dist/helpers/CSV.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CSV.js","sourceRoot":"","sources":["../../src/helpers/CSV.ts"],"names":[],"mappings":"AAMA,MAAM,KAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"CSV.js","sourceRoot":"","sources":["../../src/helpers/CSV.ts"],"names":[],"mappings":"AAMA,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE3C,MAAM,KAAW,GAAG,CAgEnB;AAhED,WAAiB,GAAG;IAGlB,SAAS,MAAM,CAAC,KAAc;QAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAA;QAEpD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QAE3C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAE3D,OAAO,MAAM,CAAC,KAAkC,CAAC,CAAA;IACnD,CAAC;IAED,SAAS,MAAM,CAAC,KAAc,EAAE,SAAiB;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAE1B,IAAI,CAAC,CAAC,SAAS,EAAE,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtE,OAAO,IAAI,CAAA;QAEb,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAA;IAC1C,CAAC;IAED,SAAS,KAAK,CAAC,KAAgB,EAAE,OAAuB;QACtD,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,GAAG,CAAA;QAE3C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IAC1E,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,OAAiB,EAAE,OAAuB;QACjE,OAAO,KAAK,CACV,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACnB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CACpE,EACD,OAAO,CACR,CAAA;IACH,CAAC;IAPe,YAAQ,WAOvB,CAAA;IAED,SAAgB,MAAM,CACpB,KAAmB,EACnB,OAAiB,EACjB,OAAuB;QAEvB,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAA;QAEvD,OAAO,KAAK,CACV,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACnB,cAAc,CACZ,MAAM,EACN,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,CACF,EACD,OAAO,CACR,CAAA;IACH,CAAC;IAhBe,UAAM,SAgBrB,CAAA;AACH,CAAC,EAhEgB,GAAG,KAAH,GAAG,QAgEnB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BinarySource, OrderedRecord } from '../models/BinarySource.js';
|
|
2
|
+
import { type GroupJoints, type KeyGroup } from '../models/OpenKeyGroup.js';
|
|
3
|
+
export type GroupByKeyOptions = {
|
|
4
|
+
directory?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function toGroups(records: AsyncIterable<OrderedRecord> | Iterable<OrderedRecord>, joints: GroupJoints): AsyncGenerator<KeyGroup>;
|
|
7
|
+
export declare function groupByKey(main: BinarySource, withSources: Record<string, BinarySource>, { directory }?: GroupByKeyOptions): AsyncGenerator<KeyGroup>;
|
|
8
|
+
//# sourceMappingURL=group-by-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-by-key.d.ts","sourceRoot":"","sources":["../../src/helpers/group-by-key.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC5E,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAEd,MAAM,2BAA2B,CAAA;AAGlC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAID,wBAAuB,QAAQ,CAC7B,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,EAC/D,MAAM,EAAE,WAAW,GAClB,cAAc,CAAC,QAAQ,CAAC,CAY1B;AAED,wBAAuB,UAAU,CAC/B,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACzC,EAAE,SAAoB,EAAE,GAAE,iBAAsB,GAC/C,cAAc,CAAC,QAAQ,CAAC,CAiC1B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { tmpdir } from 'node:os';
|
|
2
|
+
import { OpenKeyGroup, } from '../models/OpenKeyGroup.js';
|
|
3
|
+
import { SplitDatabaseWorker } from '../models/SplitDatabaseWorker.js';
|
|
4
|
+
const MAX_GROUP_BY_BYTES = 1024 ** 3;
|
|
5
|
+
export async function* toGroups(records, joints) {
|
|
6
|
+
let group;
|
|
7
|
+
for await (const record of records) {
|
|
8
|
+
if (group && !group.accepts(record))
|
|
9
|
+
yield group.build();
|
|
10
|
+
if (!group?.accepts(record))
|
|
11
|
+
group = new OpenKeyGroup(record.key, joints);
|
|
12
|
+
group.add(record);
|
|
13
|
+
}
|
|
14
|
+
if (group)
|
|
15
|
+
yield group.build();
|
|
16
|
+
}
|
|
17
|
+
export async function* groupByKey(main, withSources, { directory = tmpdir() } = {}) {
|
|
18
|
+
const sources = Object.entries(withSources);
|
|
19
|
+
const total = [main, ...Object.values(withSources)].reduce((sum, source) => sum + source.size, 0);
|
|
20
|
+
if (total > MAX_GROUP_BY_BYTES)
|
|
21
|
+
throw new RangeError(`Split groupBy reads at most ${String(MAX_GROUP_BY_BYTES)} bytes of files, and the files have ${String(total)}`);
|
|
22
|
+
const joints = {
|
|
23
|
+
main: main.joint,
|
|
24
|
+
with: Object.fromEntries(sources.map(([name, source]) => [name, source.joint])),
|
|
25
|
+
};
|
|
26
|
+
const database = await SplitDatabaseWorker.open(directory);
|
|
27
|
+
try {
|
|
28
|
+
const records = database.recordsByKey(main.entries(), Object.fromEntries(sources.map(([name, source]) => [name, source.entries()])));
|
|
29
|
+
yield* toGroups(records, joints);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
await database.close();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=group-by-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-by-key.js","sourceRoot":"","sources":["../../src/helpers/group-by-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAGhC,OAAO,EAGL,YAAY,GACb,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAMtE,MAAM,kBAAkB,GAAG,IAAI,IAAI,CAAC,CAAA;AAEpC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAC7B,OAA+D,EAC/D,MAAmB;IAEnB,IAAI,KAA+B,CAAA;IAEnC,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QACnC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QAExD,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;YAAE,KAAK,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAEzE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,KAAK;QAAE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,UAAU,CAC/B,IAAkB,EAClB,WAAyC,EACzC,EAAE,SAAS,GAAG,MAAM,EAAE,KAAwB,EAAE;IAEhD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CACxD,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,EAClC,CAAC,CACF,CAAA;IAED,IAAI,KAAK,GAAG,kBAAkB;QAC5B,MAAM,IAAI,UAAU,CAClB,+BAA+B,MAAM,CAAC,kBAAkB,CAAC,uCAAuC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChH,CAAA;IAEH,MAAM,MAAM,GAAgB;QAC1B,IAAI,EAAE,IAAI,CAAC,KAAK;QAChB,IAAI,EAAE,MAAM,CAAC,WAAW,CACtB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CACtD;KACF,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAE1D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CACnC,IAAI,CAAC,OAAO,EAAE,EACd,MAAM,CAAC,WAAW,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAC1D,CACF,CAAA;QAED,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { type ByteRecord, type
|
|
1
|
+
import { type ByteRecord, type BinaryDelimiter } from './split-records.js';
|
|
2
2
|
export type ByteSlice = {
|
|
3
3
|
start: number;
|
|
4
4
|
content: Buffer;
|
|
5
5
|
};
|
|
6
6
|
export type GroupRecordsOptions = {
|
|
7
|
-
delimiter:
|
|
7
|
+
delimiter: BinaryDelimiter;
|
|
8
8
|
every?: number;
|
|
9
9
|
encoding?: BufferEncoding;
|
|
10
10
|
};
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"group-records.d.ts","sourceRoot":"","sources":["../../src/helpers/group-records.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EAIrB,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,eAAe,CAAA;IAC1B,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,CAO3B"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { MAX_SLICE_BYTES, sliceTooLarge,
|
|
1
|
+
import { MAX_SLICE_BYTES, sliceTooLarge, toJoint, } from './split-records.js';
|
|
2
2
|
export function groupRecords(source, { delimiter, every = 1, encoding = 'utf8' }) {
|
|
3
|
-
const
|
|
3
|
+
const joint = toJoint(delimiter, encoding);
|
|
4
4
|
if (!Number.isInteger(every) || every < 1)
|
|
5
5
|
throw new TypeError('Split every must be a positive integer');
|
|
6
|
-
return groups(source,
|
|
6
|
+
return groups(source, joint, every);
|
|
7
7
|
}
|
|
8
8
|
async function* groups(source, joint, every) {
|
|
9
9
|
let parts = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-records.js","sourceRoot":"","sources":["../../src/helpers/group-records.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EACf,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"group-records.js","sourceRoot":"","sources":["../../src/helpers/group-records.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EACf,aAAa,EACb,OAAO,GACR,MAAM,oBAAoB,CAAA;AAa3B,MAAM,UAAU,YAAY,CAC1B,MAAiC,EACjC,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,MAAM,EAAuB;IAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAE1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QACvC,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAA;IAE/D,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AACrC,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 @@
|
|
|
1
|
+
{"version":3,"file":"in-chunks.d.ts","sourceRoot":"","sources":["../../src/helpers/in-chunks.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,QAAY,CAAA;AAErC,wBAAuB,QAAQ,CAAC,GAAG,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1D,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GACvC,cAAc,CAAC,GAAG,EAAE,CAAC,CAiBvB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const CHUNK_LENGTH = 64 * 1024;
|
|
2
|
+
export async function* inChunks(rows) {
|
|
3
|
+
let chunk = [];
|
|
4
|
+
let length = 0;
|
|
5
|
+
for await (const row of rows) {
|
|
6
|
+
chunk.push(row);
|
|
7
|
+
length += row.text.length;
|
|
8
|
+
if (length < CHUNK_LENGTH)
|
|
9
|
+
continue;
|
|
10
|
+
yield chunk;
|
|
11
|
+
chunk = [];
|
|
12
|
+
length = 0;
|
|
13
|
+
}
|
|
14
|
+
if (chunk.length > 0)
|
|
15
|
+
yield chunk;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=in-chunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-chunks.js","sourceRoot":"","sources":["../../src/helpers/in-chunks.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAA;AAErC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAC7B,IAAwC;IAExC,IAAI,KAAK,GAAU,EAAE,CAAA;IACrB,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACf,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAA;QAEzB,IAAI,MAAM,GAAG,YAAY;YAAE,SAAQ;QAEnC,MAAM,KAAK,CAAA;QAEX,KAAK,GAAG,EAAE,CAAA;QACV,MAAM,GAAG,CAAC,CAAA;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,KAAK,CAAA;AACnC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type BinaryDelimiter = {
|
|
2
2
|
value: string;
|
|
3
3
|
keep?: {
|
|
4
4
|
previous?: number;
|
|
@@ -14,7 +14,7 @@ export type ByteRecord = {
|
|
|
14
14
|
pieces: Buffer[];
|
|
15
15
|
};
|
|
16
16
|
export type SplitRecordsOptions = {
|
|
17
|
-
delimiter:
|
|
17
|
+
delimiter: BinaryDelimiter;
|
|
18
18
|
trim?: ByteTrim;
|
|
19
19
|
encoding?: BufferEncoding;
|
|
20
20
|
};
|
|
@@ -24,7 +24,8 @@ export type ByteDelimiter = {
|
|
|
24
24
|
keepPrevious: number;
|
|
25
25
|
keepNext: number;
|
|
26
26
|
};
|
|
27
|
-
export declare function toDelimiter({ value, keep }:
|
|
27
|
+
export declare function toDelimiter({ value, keep }: BinaryDelimiter, encoding: BufferEncoding): ByteDelimiter;
|
|
28
|
+
export declare function toJoint(delimiter: BinaryDelimiter, encoding: BufferEncoding): Buffer;
|
|
28
29
|
export declare function sliceTooLarge(start: number, sizeInBytes: number): RangeError;
|
|
29
30
|
export declare function splitRecords(source: AsyncIterable<Buffer>, { delimiter, trim, encoding }: SplitRecordsOptions): AsyncGenerator<ByteRecord>;
|
|
30
31
|
//# sourceMappingURL=split-records.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-records.d.ts","sourceRoot":"","sources":["../../src/helpers/split-records.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"split-records.d.ts","sourceRoot":"","sources":["../../src/helpers/split-records.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,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,eAAe,CAAA;IAC1B,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,eAAe,EAChC,QAAQ,EAAE,cAAc,GACvB,aAAa,CAiBf;AAED,wBAAgB,OAAO,CACrB,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,cAAc,GACvB,MAAM,CAIR;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"}
|