@markitdownjs/chunking 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chunker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/chunker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { DocumentChunker } from '../chunker.js';
3
+ import { createNode } from '@markitdownjs/shared';
4
+ describe('DocumentChunker', () => {
5
+ const chunker = new DocumentChunker();
6
+ const ast = createNode({
7
+ type: 'document',
8
+ children: [
9
+ createNode({
10
+ type: 'heading',
11
+ level: 1,
12
+ children: [createNode({ type: 'text', value: 'Introduction' })],
13
+ }),
14
+ createNode({
15
+ type: 'paragraph',
16
+ children: [createNode({ type: 'text', value: 'This is the introduction paragraph.' })],
17
+ }),
18
+ createNode({
19
+ type: 'heading',
20
+ level: 1,
21
+ children: [createNode({ type: 'text', value: 'Main Content' })],
22
+ }),
23
+ createNode({
24
+ type: 'paragraph',
25
+ children: [createNode({ type: 'text', value: 'This is the main content.' })],
26
+ }),
27
+ ],
28
+ });
29
+ it('should chunk by heading', () => {
30
+ const chunks = chunker.chunk(ast, { strategy: 'heading' });
31
+ expect(chunks.length).toBeGreaterThanOrEqual(2);
32
+ expect(chunks[0].metadata.headingPath).toContain('Introduction');
33
+ });
34
+ it('should chunk by fixed size', () => {
35
+ const chunks = chunker.chunk(ast, { strategy: 'fixed', maxTokens: 5, overlap: 2 });
36
+ expect(chunks.length).toBeGreaterThanOrEqual(1);
37
+ });
38
+ it('should generate chunk IDs', () => {
39
+ const chunks = chunker.chunk(ast, { strategy: 'heading' });
40
+ for (const chunk of chunks) {
41
+ expect(chunk.id).toBeDefined();
42
+ expect(chunk.id.length).toBeGreaterThan(0);
43
+ }
44
+ });
45
+ });
46
+ //# sourceMappingURL=chunker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.test.js","sourceRoot":"","sources":["../../src/__tests__/chunker.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;IAEtC,MAAM,GAAG,GAAG,UAAU,CAAe;QACnC,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,UAAU,CAAc;gBACtB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,CAAC,UAAU,CAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;aAC1E,CAAC;YACF,UAAU,CAAgB;gBACxB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,CAAC,UAAU,CAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAC;aACjG,CAAC;YACF,UAAU,CAAc;gBACtB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,CAAC,UAAU,CAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;aAC1E,CAAC;YACF,UAAU,CAAgB;gBACxB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,CAAC,UAAU,CAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;aACvF,CAAC;SACH;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACnF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { AnyNode, DocumentChunk, ChunkingOptions } from "@markitdownjs/shared";
2
+ /** Interface for chunking strategy implementations */
3
+ export interface ChunkingStrategy {
4
+ /** Strategy name identifier */
5
+ name: string;
6
+ /** Split an AST into document chunks */
7
+ chunk(ast: AnyNode, options: ChunkingOptions): DocumentChunk[];
8
+ }
9
+ /** Creates a document chunk from collected nodes and metadata */
10
+ export declare function createChunk(nodes: AnyNode[], headingPath: string[], options: ChunkingOptions, startIndex: number, endIndex: number, page?: number): DocumentChunk | null;
11
+ /** Main document chunker that delegates to registered strategies */
12
+ export declare class DocumentChunker {
13
+ private strategies;
14
+ constructor();
15
+ /** Register a custom chunking strategy */
16
+ registerStrategy(strategy: ChunkingStrategy): void;
17
+ /** Get a registered strategy by name */
18
+ getStrategy(name: string): ChunkingStrategy | undefined;
19
+ /** List all registered strategy names */
20
+ listStrategies(): string[];
21
+ /** Chunk an AST using the specified strategy */
22
+ chunk(ast: AnyNode, options: ChunkingOptions): DocumentChunk[];
23
+ }
24
+ //# sourceMappingURL=chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EAEb,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAO9B,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE,CAAC;CAChE;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EAAE,EAChB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,GACZ,aAAa,GAAG,IAAI,CAsBtB;AAED,oEAAoE;AACpE,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAgC;;IAUlD,0CAA0C;IAC1C,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIlD,wCAAwC;IACxC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIvD,yCAAyC;IACzC,cAAc,IAAI,MAAM,EAAE;IAI1B,gDAAgD;IAChD,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE;CAQ/D"}
@@ -0,0 +1,58 @@
1
+ import { getNodeText, generateId } from "@markitdownjs/shared";
2
+ import { HeadingChunkingStrategy } from "./strategies/heading-strategy.js";
3
+ import { PageChunkingStrategy } from "./strategies/page-strategy.js";
4
+ import { SemanticChunkingStrategy } from "./strategies/semantic-strategy.js";
5
+ import { FixedChunkingStrategy } from "./strategies/fixed-strategy.js";
6
+ /** Creates a document chunk from collected nodes and metadata */
7
+ export function createChunk(nodes, headingPath, options, startIndex, endIndex, page) {
8
+ if (nodes.length === 0)
9
+ return null;
10
+ const content = nodes.map((n) => getNodeText(n)).join("\n\n");
11
+ const tokenCount = content.split(/\s+/).filter(Boolean).length;
12
+ const root = nodes.length === 1
13
+ ? nodes[0]
14
+ : { type: "document", children: nodes };
15
+ const metadata = {
16
+ chunkId: generateId(),
17
+ headingPath,
18
+ tokenCount,
19
+ sourceFile: options.sourceFile,
20
+ startIndex,
21
+ endIndex,
22
+ page,
23
+ };
24
+ return { id: metadata.chunkId, content, metadata, ast: root };
25
+ }
26
+ /** Main document chunker that delegates to registered strategies */
27
+ export class DocumentChunker {
28
+ strategies;
29
+ constructor() {
30
+ this.strategies = new Map();
31
+ this.registerStrategy(new HeadingChunkingStrategy());
32
+ this.registerStrategy(new PageChunkingStrategy());
33
+ this.registerStrategy(new SemanticChunkingStrategy());
34
+ this.registerStrategy(new FixedChunkingStrategy());
35
+ }
36
+ /** Register a custom chunking strategy */
37
+ registerStrategy(strategy) {
38
+ this.strategies.set(strategy.name, strategy);
39
+ }
40
+ /** Get a registered strategy by name */
41
+ getStrategy(name) {
42
+ return this.strategies.get(name);
43
+ }
44
+ /** List all registered strategy names */
45
+ listStrategies() {
46
+ return Array.from(this.strategies.keys());
47
+ }
48
+ /** Chunk an AST using the specified strategy */
49
+ chunk(ast, options) {
50
+ const strategyName = options.strategy ?? "heading";
51
+ const strategy = this.strategies.get(strategyName);
52
+ if (!strategy) {
53
+ throw new Error(`Unknown chunking strategy: ${strategyName}`);
54
+ }
55
+ return strategy.chunk(ast, options);
56
+ }
57
+ }
58
+ //# sourceMappingURL=chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.js","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAUvE,iEAAiE;AACjE,MAAM,UAAU,WAAW,CACzB,KAAgB,EAChB,WAAqB,EACrB,OAAwB,EACxB,UAAkB,EAClB,QAAgB,EAChB,IAAa;IAEb,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAE/D,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE;QACX,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE5C,MAAM,QAAQ,GAAkB;QAC9B,OAAO,EAAE,UAAU,EAAE;QACrB,WAAW;QACX,UAAU;QACV,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU;QACV,QAAQ;QACR,IAAI;KACL,CAAC;IAEF,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAChE,CAAC;AAED,oEAAoE;AACpE,MAAM,OAAO,eAAe;IAClB,UAAU,CAAgC;IAElD;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,IAAI,wBAAwB,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,gBAAgB,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,0CAA0C;IAC1C,gBAAgB,CAAC,QAA0B;QACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,wCAAwC;IACxC,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,yCAAyC;IACzC,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,GAAY,EAAE,OAAwB;QAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export { DocumentChunker, createChunk } from "./chunker.js";
2
+ export type { ChunkingStrategy } from "./chunker.js";
3
+ export { HeadingChunkingStrategy } from "./strategies/heading-strategy.js";
4
+ export { PageChunkingStrategy } from "./strategies/page-strategy.js";
5
+ export { SemanticChunkingStrategy } from "./strategies/semantic-strategy.js";
6
+ export { FixedChunkingStrategy } from "./strategies/fixed-strategy.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { DocumentChunker, createChunk } from "./chunker.js";
2
+ export { HeadingChunkingStrategy } from "./strategies/heading-strategy.js";
3
+ export { PageChunkingStrategy } from "./strategies/page-strategy.js";
4
+ export { SemanticChunkingStrategy } from "./strategies/semantic-strategy.js";
5
+ export { FixedChunkingStrategy } from "./strategies/fixed-strategy.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AnyNode, DocumentChunk, ChunkingOptions } from "@markitdownjs/shared";
2
+ import type { ChunkingStrategy } from "../chunker.js";
3
+ /** Splits a document into fixed-size chunks with overlap */
4
+ export declare class FixedChunkingStrategy implements ChunkingStrategy {
5
+ name: string;
6
+ chunk(ast: AnyNode, options: ChunkingOptions): DocumentChunk[];
7
+ }
8
+ //# sourceMappingURL=fixed-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixed-strategy.d.ts","sourceRoot":"","sources":["../../src/strategies/fixed-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKtD,4DAA4D;AAC5D,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,IAAI,SAAW;IAEf,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE;CA+C/D"}
@@ -0,0 +1,55 @@
1
+ import { getNodeText } from "@markitdownjs/shared";
2
+ const DEFAULT_MAX_TOKENS = 512;
3
+ const DEFAULT_OVERLAP = 50;
4
+ /** Splits a document into fixed-size chunks with overlap */
5
+ export class FixedChunkingStrategy {
6
+ name = "fixed";
7
+ chunk(ast, options) {
8
+ const maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
9
+ const overlap = options.overlap ?? DEFAULT_OVERLAP;
10
+ const text = getNodeText(ast);
11
+ const words = text.split(/\s+/).filter(Boolean);
12
+ if (words.length === 0)
13
+ return [];
14
+ const chunks = [];
15
+ let startIdx = 0;
16
+ let globalOffset = 0;
17
+ while (startIdx < words.length) {
18
+ const endIdx = Math.min(startIdx + maxTokens, words.length);
19
+ const chunkWords = words.slice(startIdx, endIdx);
20
+ const content = chunkWords.join(" ");
21
+ const tokenCount = chunkWords.length;
22
+ const astNode = buildChunkAst(content);
23
+ const chunk = {
24
+ id: crypto.randomUUID(),
25
+ content,
26
+ metadata: {
27
+ chunkId: crypto.randomUUID(),
28
+ headingPath: [],
29
+ tokenCount,
30
+ sourceFile: options.sourceFile,
31
+ startIndex: globalOffset,
32
+ endIndex: globalOffset + tokenCount,
33
+ },
34
+ ast: astNode,
35
+ };
36
+ chunks.push(chunk);
37
+ globalOffset += tokenCount;
38
+ startIdx = endIdx - overlap;
39
+ if (startIdx >= endIdx)
40
+ break;
41
+ if (startIdx >= words.length)
42
+ break;
43
+ if (endIdx >= words.length)
44
+ break;
45
+ }
46
+ return chunks;
47
+ }
48
+ }
49
+ function buildChunkAst(text) {
50
+ return {
51
+ type: "paragraph",
52
+ children: [{ type: "text", value: text }],
53
+ };
54
+ }
55
+ //# sourceMappingURL=fixed-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixed-strategy.js","sourceRoot":"","sources":["../../src/strategies/fixed-strategy.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,4DAA4D;AAC5D,MAAM,OAAO,qBAAqB;IAChC,IAAI,GAAG,OAAO,CAAC;IAEf,KAAK,CAAC,GAAY,EAAE,OAAwB;QAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;QAEnD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,OAAO,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;YAErC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAEvC,MAAM,KAAK,GAAkB;gBAC3B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;gBACvB,OAAO;gBACP,QAAQ,EAAE;oBACR,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE;oBAC5B,WAAW,EAAE,EAAE;oBACf,UAAU;oBACV,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,UAAU,EAAE,YAAY;oBACxB,QAAQ,EAAE,YAAY,GAAG,UAAU;iBACpC;gBACD,GAAG,EAAE,OAAO;aACb,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEnB,YAAY,IAAI,UAAU,CAAC;YAC3B,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;YAE5B,IAAI,QAAQ,IAAI,MAAM;gBAAE,MAAM;YAC9B,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM;gBAAE,MAAM;YACpC,IAAI,MAAM,IAAI,KAAK,CAAC,MAAM;gBAAE,MAAM;QACpC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAc,CAAC;KACrC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AnyNode, DocumentChunk, ChunkingOptions } from "@markitdownjs/shared";
2
+ import type { ChunkingStrategy } from "../chunker.js";
3
+ /** Splits a document by heading boundaries */
4
+ export declare class HeadingChunkingStrategy implements ChunkingStrategy {
5
+ name: string;
6
+ chunk(ast: AnyNode, options: ChunkingOptions): DocumentChunk[];
7
+ }
8
+ //# sourceMappingURL=heading-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading-strategy.d.ts","sourceRoot":"","sources":["../../src/strategies/heading-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKtD,8CAA8C;AAC9C,qBAAa,uBAAwB,YAAW,gBAAgB;IAC9D,IAAI,SAAa;IAEjB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE;CA+D/D"}
@@ -0,0 +1,117 @@
1
+ import { getNodeText, isNodeOfType, countTokens, } from "@markitdownjs/shared";
2
+ import { createChunk } from "../chunker.js";
3
+ const DEFAULT_MAX_TOKENS = 512;
4
+ /** Splits a document by heading boundaries */
5
+ export class HeadingChunkingStrategy {
6
+ name = "heading";
7
+ chunk(ast, options) {
8
+ const maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
9
+ const headingPath = [];
10
+ const chunks = [];
11
+ let currentNodes = [];
12
+ let startIndex = 0;
13
+ let globalOffset = 0;
14
+ const flushChunk = () => {
15
+ if (currentNodes.length === 0)
16
+ return;
17
+ const chunk = createChunk([...currentNodes], [...headingPath], options, startIndex, globalOffset);
18
+ if (chunk) {
19
+ if (countTokens(chunk.ast) > maxTokens) {
20
+ const split = splitLargeChunk(currentNodes, headingPath, options, maxTokens, startIndex);
21
+ chunks.push(...split);
22
+ }
23
+ else {
24
+ chunks.push(chunk);
25
+ }
26
+ }
27
+ currentNodes = [];
28
+ startIndex = globalOffset;
29
+ };
30
+ walk(ast, null);
31
+ flushChunk();
32
+ return chunks;
33
+ function walk(node, parent) {
34
+ if (isNodeOfType(node, "heading")) {
35
+ flushChunk();
36
+ headingPath.length = node.level - 1;
37
+ headingPath[node.level - 1] = getNodeText(node);
38
+ }
39
+ if ("children" in node && Array.isArray(node.children)) {
40
+ for (const child of node.children) {
41
+ walk(child, node);
42
+ }
43
+ }
44
+ const nodeTokens = countTokens(node);
45
+ if (node.type !== "heading" &&
46
+ node.type !== "document" &&
47
+ !(parent && isNodeOfType(parent, "heading"))) {
48
+ currentNodes.push(node);
49
+ globalOffset += nodeTokens;
50
+ }
51
+ if (nodeTokens > 0 && countTokensArray(currentNodes) >= maxTokens) {
52
+ flushChunk();
53
+ }
54
+ }
55
+ }
56
+ }
57
+ function countTokensArray(nodes) {
58
+ return nodes.reduce((sum, n) => sum + countTokens(n), 0);
59
+ }
60
+ function splitLargeChunk(nodes, headingPath, options, maxTokens, startIndex) {
61
+ const chunks = [];
62
+ let buffer = [];
63
+ let offset = startIndex;
64
+ for (const node of nodes) {
65
+ const nodeTokens = countTokens(node);
66
+ const bufferTokens = countTokensArray(buffer);
67
+ if (bufferTokens + nodeTokens > maxTokens && buffer.length > 0) {
68
+ const chunk = createChunk(buffer, headingPath, options, offset, offset + bufferTokens);
69
+ if (chunk)
70
+ chunks.push(chunk);
71
+ offset += bufferTokens;
72
+ buffer = [];
73
+ }
74
+ if (nodeTokens > maxTokens && node.type === "paragraph" && "children" in node) {
75
+ const subChunks = splitParagraph(node, headingPath, options, maxTokens, offset);
76
+ chunks.push(...subChunks);
77
+ offset += nodeTokens;
78
+ }
79
+ else {
80
+ buffer.push(node);
81
+ }
82
+ }
83
+ if (buffer.length > 0) {
84
+ const bufferTokens = countTokensArray(buffer);
85
+ const chunk = createChunk(buffer, headingPath, options, offset, offset + bufferTokens);
86
+ if (chunk)
87
+ chunks.push(chunk);
88
+ }
89
+ return chunks;
90
+ }
91
+ function splitParagraph(node, headingPath, options, maxTokens, startIndex) {
92
+ const text = getNodeText(node);
93
+ const words = text.split(/\s+/).filter(Boolean);
94
+ const chunks = [];
95
+ let offset = startIndex;
96
+ for (let i = 0; i < words.length; i += maxTokens) {
97
+ const slice = words.slice(i, i + maxTokens);
98
+ const value = slice.join(" ");
99
+ const tokenCount = slice.length;
100
+ chunks.push({
101
+ id: crypto.randomUUID(),
102
+ content: value,
103
+ metadata: {
104
+ chunkId: crypto.randomUUID(),
105
+ headingPath: [...headingPath],
106
+ tokenCount,
107
+ sourceFile: options.sourceFile,
108
+ startIndex: offset,
109
+ endIndex: offset + tokenCount,
110
+ },
111
+ ast: { type: "paragraph", children: [{ type: "text", value }] },
112
+ });
113
+ offset += tokenCount;
114
+ }
115
+ return chunks;
116
+ }
117
+ //# sourceMappingURL=heading-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading-strategy.js","sourceRoot":"","sources":["../../src/strategies/heading-strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { AnyNode, DocumentChunk, ChunkingOptions } from "@markitdownjs/shared";
2
+ import type { ChunkingStrategy } from "../chunker.js";
3
+ /** Splits a document by page break boundaries */
4
+ export declare class PageChunkingStrategy implements ChunkingStrategy {
5
+ name: string;
6
+ chunk(ast: AnyNode, options: ChunkingOptions): DocumentChunk[];
7
+ }
8
+ //# sourceMappingURL=page-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-strategy.d.ts","sourceRoot":"","sources":["../../src/strategies/page-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKtD,iDAAiD;AACjD,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,IAAI,SAAU;IAEd,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE;CAsE/D"}
@@ -0,0 +1,88 @@
1
+ import { walkAst, isNodeOfType, countTokens, } from "@markitdownjs/shared";
2
+ import { createChunk } from "../chunker.js";
3
+ const DEFAULT_MAX_TOKENS = 512;
4
+ /** Splits a document by page break boundaries */
5
+ export class PageChunkingStrategy {
6
+ name = "page";
7
+ chunk(ast, options) {
8
+ const maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
9
+ const chunks = [];
10
+ let currentNodes = [];
11
+ let currentPage;
12
+ let startIndex = 0;
13
+ let globalOffset = 0;
14
+ let hasPageBreaks = false;
15
+ const flushChunk = (page) => {
16
+ if (currentNodes.length === 0)
17
+ return;
18
+ const chunk = createChunk([...currentNodes], [], options, startIndex, globalOffset, page);
19
+ if (chunk) {
20
+ if (countTokens(chunk.ast) > maxTokens) {
21
+ const split = splitLargeChunk(currentNodes, options, maxTokens, startIndex, page);
22
+ chunks.push(...split);
23
+ }
24
+ else {
25
+ chunks.push(chunk);
26
+ }
27
+ }
28
+ currentNodes = [];
29
+ startIndex = globalOffset;
30
+ };
31
+ walkAst(ast, (node, _parent) => {
32
+ if (isNodeOfType(node, "page-break")) {
33
+ hasPageBreaks = true;
34
+ flushChunk(currentPage);
35
+ currentPage = node.pageNumber;
36
+ return;
37
+ }
38
+ currentNodes.push(node);
39
+ const tokens = countTokens(node);
40
+ globalOffset += tokens;
41
+ if (tokens > 0 && countTokensArray(currentNodes) >= maxTokens) {
42
+ flushChunk(currentPage);
43
+ }
44
+ });
45
+ flushChunk(currentPage);
46
+ if (!hasPageBreaks) {
47
+ if (chunks.length === 0)
48
+ return [];
49
+ if (chunks.length === 1) {
50
+ const single = chunks[0];
51
+ const totalTokens = countTokens(single.ast);
52
+ if (totalTokens > maxTokens) {
53
+ return splitLargeChunk([single.ast], options, maxTokens, single.metadata.startIndex, single.metadata.page);
54
+ }
55
+ return chunks;
56
+ }
57
+ }
58
+ return chunks;
59
+ }
60
+ }
61
+ function countTokensArray(nodes) {
62
+ return nodes.reduce((sum, n) => sum + countTokens(n), 0);
63
+ }
64
+ function splitLargeChunk(nodes, options, maxTokens, startIndex, page) {
65
+ const chunks = [];
66
+ let buffer = [];
67
+ let offset = startIndex;
68
+ for (const node of nodes) {
69
+ const nodeTokens = countTokens(node);
70
+ const bufferTokens = countTokensArray(buffer);
71
+ if (bufferTokens + nodeTokens > maxTokens && buffer.length > 0) {
72
+ const chunk = createChunk(buffer, [], options, offset, offset + bufferTokens, page);
73
+ if (chunk)
74
+ chunks.push(chunk);
75
+ offset += bufferTokens;
76
+ buffer = [];
77
+ }
78
+ buffer.push(node);
79
+ }
80
+ if (buffer.length > 0) {
81
+ const bufferTokens = countTokensArray(buffer);
82
+ const chunk = createChunk(buffer, [], options, offset, offset + bufferTokens, page);
83
+ if (chunk)
84
+ chunks.push(chunk);
85
+ }
86
+ return chunks;
87
+ }
88
+ //# sourceMappingURL=page-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-strategy.js","sourceRoot":"","sources":["../../src/strategies/page-strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { AnyNode, DocumentChunk, ChunkingOptions } from "@markitdownjs/shared";
2
+ import type { ChunkingStrategy } from "../chunker.js";
3
+ /** Splits a document by semantic boundaries with configurable overlap */
4
+ export declare class SemanticChunkingStrategy implements ChunkingStrategy {
5
+ name: string;
6
+ chunk(ast: AnyNode, options: ChunkingOptions): DocumentChunk[];
7
+ }
8
+ //# sourceMappingURL=semantic-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-strategy.d.ts","sourceRoot":"","sources":["../../src/strategies/semantic-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,yEAAyE;AACzE,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,IAAI,SAAc;IAElB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE;CA2D/D"}
@@ -0,0 +1,132 @@
1
+ import { walkAst, getNodeText, isNodeOfType, countTokens, } from "@markitdownjs/shared";
2
+ import { createChunk } from "../chunker.js";
3
+ const DEFAULT_MAX_TOKENS = 512;
4
+ const DEFAULT_OVERLAP = 50;
5
+ /** Splits a document by semantic boundaries with configurable overlap */
6
+ export class SemanticChunkingStrategy {
7
+ name = "semantic";
8
+ chunk(ast, options) {
9
+ const maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
10
+ const overlap = options.overlap ?? DEFAULT_OVERLAP;
11
+ const nodes = [];
12
+ walkAst(ast, (node, _parent) => {
13
+ if (node.type === "paragraph" ||
14
+ node.type === "heading" ||
15
+ node.type === "list" ||
16
+ node.type === "table" ||
17
+ node.type === "code" ||
18
+ node.type === "blockquote" ||
19
+ node.type === "thematic-break" ||
20
+ node.type === "horizontal-rule") {
21
+ nodes.push(node);
22
+ }
23
+ });
24
+ if (nodes.length === 0)
25
+ return [];
26
+ const semanticGroups = groupBySemanticBoundary(nodes);
27
+ const chunks = [];
28
+ let overlapText = "";
29
+ for (const group of semanticGroups) {
30
+ const groupTokens = group.reduce((sum, n) => sum + countTokens(n), 0);
31
+ if (overlapText && overlap > 0) {
32
+ const overlapWords = overlapText.split(/\s+/).filter(Boolean).slice(-overlap);
33
+ const overlapToken = overlapWords.join(" ");
34
+ if (overlapToken) {
35
+ group.unshift({
36
+ type: "paragraph",
37
+ children: [{ type: "text", value: overlapToken }],
38
+ });
39
+ }
40
+ }
41
+ if (groupTokens <= maxTokens) {
42
+ const chunk = createChunk(group, extractHeadingPath(group), options, 0, groupTokens);
43
+ if (chunk)
44
+ chunks.push(chunk);
45
+ const lastText = getNodeText(group[group.length - 1]);
46
+ const words = lastText.split(/\s+/).filter(Boolean);
47
+ overlapText = words.slice(-overlap).join(" ");
48
+ }
49
+ else {
50
+ const subChunks = splitGroupByTokens(group, maxTokens, overlap, options);
51
+ chunks.push(...subChunks);
52
+ if (subChunks.length > 0) {
53
+ const lastChunk = subChunks[subChunks.length - 1];
54
+ const words = lastChunk.content.split(/\s+/).filter(Boolean);
55
+ overlapText = words.slice(-overlap).join(" ");
56
+ }
57
+ }
58
+ }
59
+ return chunks;
60
+ }
61
+ }
62
+ function groupBySemanticBoundary(nodes) {
63
+ const groups = [];
64
+ let currentGroup = [];
65
+ for (const node of nodes) {
66
+ if (isNodeOfType(node, "heading")) {
67
+ if (currentGroup.length > 0) {
68
+ groups.push(currentGroup);
69
+ currentGroup = [];
70
+ }
71
+ currentGroup.push(node);
72
+ }
73
+ else if (node.type === "thematic-break" ||
74
+ node.type === "horizontal-rule") {
75
+ if (currentGroup.length > 0) {
76
+ groups.push(currentGroup);
77
+ currentGroup = [];
78
+ }
79
+ }
80
+ else {
81
+ currentGroup.push(node);
82
+ }
83
+ }
84
+ if (currentGroup.length > 0) {
85
+ groups.push(currentGroup);
86
+ }
87
+ return groups;
88
+ }
89
+ function extractHeadingPath(nodes) {
90
+ const path = [];
91
+ for (const node of nodes) {
92
+ if (isNodeOfType(node, "heading")) {
93
+ path.length = node.level - 1;
94
+ path[node.level - 1] = getNodeText(node);
95
+ }
96
+ }
97
+ return path;
98
+ }
99
+ function splitGroupByTokens(nodes, maxTokens, overlap, options) {
100
+ const chunks = [];
101
+ let buffer = [];
102
+ let bufferTokens = 0;
103
+ for (const node of nodes) {
104
+ const nodeTokens = countTokens(node);
105
+ if (bufferTokens + nodeTokens > maxTokens && buffer.length > 0) {
106
+ const chunk = createChunk(buffer, extractHeadingPath(buffer), options, 0, bufferTokens);
107
+ if (chunk)
108
+ chunks.push(chunk);
109
+ const lastText = getNodeText(buffer[buffer.length - 1]);
110
+ const overlapWords = lastText.split(/\s+/).filter(Boolean).slice(-overlap);
111
+ const overlapToken = overlapWords.join(" ");
112
+ buffer = [];
113
+ bufferTokens = 0;
114
+ if (overlapToken && overlap > 0) {
115
+ buffer.push({
116
+ type: "paragraph",
117
+ children: [{ type: "text", value: overlapToken }],
118
+ });
119
+ bufferTokens = overlap;
120
+ }
121
+ }
122
+ buffer.push(node);
123
+ bufferTokens += nodeTokens;
124
+ }
125
+ if (buffer.length > 0) {
126
+ const chunk = createChunk(buffer, extractHeadingPath(buffer), options, 0, bufferTokens);
127
+ if (chunk)
128
+ chunks.push(chunk);
129
+ }
130
+ return chunks;
131
+ }
132
+ //# sourceMappingURL=semantic-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-strategy.js","sourceRoot":"","sources":["../../src/strategies/semantic-strategy.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@markitdownjs/chunking",
3
+ "version": "0.1.0",
4
+ "description": "AI-ready document chunking strategies for MarkItDownJS",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "dependencies": {
20
+ "@markitdownjs/shared": "0.1.0"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.5.0"
24
+ },
25
+ "scripts": {
26
+ "build": "tsc --project tsconfig.json",
27
+ "dev": "tsc --watch --project tsconfig.json",
28
+ "typecheck": "tsc --noEmit",
29
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
30
+ }
31
+ }