nx-md-parser 2.0.2 → 2.2.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/README.md +27 -2
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/markdown-transformer/parsers/bullet-parser.d.ts.map +1 -1
- package/dist/src/lib/markdown-transformer/parsers/bullet-parser.js +3 -9
- package/dist/src/lib/markdown-transformer/parsers/bullet-parser.js.map +1 -1
- package/dist/src/lib/markdown-transformer/parsers/colon-parser.d.ts.map +1 -1
- package/dist/src/lib/markdown-transformer/parsers/colon-parser.js +2 -4
- package/dist/src/lib/markdown-transformer/parsers/colon-parser.js.map +1 -1
- package/dist/src/lib/markdown-transformer/parsers/format-detector.d.ts +26 -0
- package/dist/src/lib/markdown-transformer/parsers/format-detector.d.ts.map +1 -1
- package/dist/src/lib/markdown-transformer/parsers/format-detector.js +130 -0
- package/dist/src/lib/markdown-transformer/parsers/format-detector.js.map +1 -1
- package/dist/src/lib/markdown-transformer/parsers/index.d.ts +1 -0
- package/dist/src/lib/markdown-transformer/parsers/index.d.ts.map +1 -1
- package/dist/src/lib/markdown-transformer/parsers/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -240,7 +240,7 @@ console.log(colonResult.result); // Same structured JSON
|
|
|
240
240
|
### Format Selection & Auto-Detection
|
|
241
241
|
|
|
242
242
|
```typescript
|
|
243
|
-
import { JSONTransformer, Schema, MarkdownFormat } from 'nx-md-parser';
|
|
243
|
+
import { JSONTransformer, Schema, MarkdownFormat, analyzeMarkdownFormat } from 'nx-md-parser';
|
|
244
244
|
|
|
245
245
|
// Auto-detect format (recommended)
|
|
246
246
|
const transformer = new JSONTransformer(schema); // Automatically chooses best parser
|
|
@@ -254,6 +254,12 @@ const bulletTransformer = new JSONTransformer(schema, {
|
|
|
254
254
|
parserOptions: { format: MarkdownFormat.BULLET }
|
|
255
255
|
});
|
|
256
256
|
|
|
257
|
+
// Analyze what formats your markdown supports
|
|
258
|
+
const analysis = analyzeMarkdownFormat(yourMarkdown);
|
|
259
|
+
console.log('Primary format:', analysis.primaryFormat);
|
|
260
|
+
console.log('Confidence:', analysis.allMatches[0]?.confidence);
|
|
261
|
+
console.log('Section ranges:', analysis.allMatches[0]?.sectionRanges);
|
|
262
|
+
|
|
257
263
|
// Works with any registered format - the system is extensible!
|
|
258
264
|
```
|
|
259
265
|
|
|
@@ -491,11 +497,16 @@ const parser = new ColonParser();
|
|
|
491
497
|
|
|
492
498
|
**FormatDetector** - Auto-detects and selects appropriate parsers
|
|
493
499
|
```typescript
|
|
494
|
-
import { FormatDetector, getFormatDetector } from 'nx-md-parser';
|
|
500
|
+
import { FormatDetector, getFormatDetector, analyzeMarkdownFormat } from 'nx-md-parser';
|
|
495
501
|
|
|
496
502
|
const detector = getFormatDetector();
|
|
497
503
|
const format = detector.detect(markdown); // MarkdownFormat
|
|
498
504
|
const parser = detector.getParser(format, markdown);
|
|
505
|
+
|
|
506
|
+
// Advanced format analysis with confidence scores and line ranges
|
|
507
|
+
const analysis = analyzeMarkdownFormat(markdown);
|
|
508
|
+
console.log(analysis.primaryFormat); // 'heading' | 'bullet' | 'colon'
|
|
509
|
+
console.log(analysis.allMatches[0]); // { format, confidence, sections, sectionRanges }
|
|
499
510
|
```
|
|
500
511
|
|
|
501
512
|
#### Schema Builders
|
|
@@ -515,6 +526,13 @@ mergeTransformResults(...results: TransformResult[]): TransformResult
|
|
|
515
526
|
jsonToMarkdown(data: any, level?: number): string
|
|
516
527
|
```
|
|
517
528
|
|
|
529
|
+
#### Format Analysis
|
|
530
|
+
```typescript
|
|
531
|
+
analyzeMarkdownFormat(markdown: string): FormatAnalysisResult
|
|
532
|
+
// Returns detailed analysis of what formats the markdown supports
|
|
533
|
+
// with confidence scores, section counts, and line ranges
|
|
534
|
+
```
|
|
535
|
+
|
|
518
536
|
#### Schema Management
|
|
519
537
|
```typescript
|
|
520
538
|
loadSchemaFromFile(filePath: string): SchemaType
|
|
@@ -630,6 +648,13 @@ ISC License - see [LICENSE](LICENSE) file for details.
|
|
|
630
648
|
|
|
631
649
|
---
|
|
632
650
|
|
|
651
|
+
## 📋 What's New in v2.1
|
|
652
|
+
|
|
653
|
+
- **Format Analysis API**: New `analyzeMarkdownFormat()` function provides detailed format detection with confidence scores and line ranges
|
|
654
|
+
- **Multi-Format Detection**: Detects all supported formats in a document with ranking by confidence
|
|
655
|
+
- **Section Range Analysis**: Get exact line numbers for each section in your markdown
|
|
656
|
+
- **Mixed Content Detection**: Identifies documents that contain multiple format types
|
|
657
|
+
|
|
633
658
|
## 📋 What's New in v2.0
|
|
634
659
|
|
|
635
660
|
- **Extensible Multi-Format Architecture**: Support for any markdown variant through custom parsers, not just headings and bullets
|
package/dist/src/index.d.ts
CHANGED
|
@@ -12,5 +12,8 @@ export { mergeTransformResults, jsonToMarkdown, loadSchemaFromFile, createTransf
|
|
|
12
12
|
export type { SchemaType, ValidationStatus, TransformResult, MarkdownSection, ParserOptions, } from './lib/markdown-transformer/core/types';
|
|
13
13
|
export { MarkdownFormat } from './lib/markdown-transformer/core/types';
|
|
14
14
|
export { BaseMarkdownParser, HeadingParser, BulletParser, ColonParser, FormatDetector, getFormatDetector, resetFormatDetector } from './lib/markdown-transformer/parsers';
|
|
15
|
+
export type { FormatAnalysisResult, FormatMatch, SectionRange } from './lib/markdown-transformer/parsers/format-detector';
|
|
16
|
+
import type { FormatAnalysisResult } from './lib/markdown-transformer/parsers/format-detector';
|
|
17
|
+
export declare function analyzeMarkdownFormat(markdown: string): FormatAnalysisResult;
|
|
15
18
|
export { mergeNoRedundancy, mergeMultiple, mergeWithRoles, loadJson, toCamelCase, fromCamelToTitle, toTitleCase, anyToMarkdownString, string as nxString, number as nxNumber, boolean as nxBoolean, array as nxArray, object as nxObject, bestMatchOneToMany, defaultMatcherConfig, JSONTransformer as NxHelpersJSONTransformer } from 'nx-helpers';
|
|
16
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAC;AAGrE,OAAO,EACL,cAAc,GACf,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,+BAA+B,EAC/B,0BAA0B,EAC1B,+BAA+B,EAChC,MAAM,wCAAwC,CAAC;AAGhD,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,aAAa,GACd,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAGvE,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAC;AAGrE,OAAO,EACL,cAAc,GACf,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,+BAA+B,EAC/B,0BAA0B,EAC1B,+BAA+B,EAChC,MAAM,wCAAwC,CAAC;AAGhD,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,aAAa,GACd,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAGvE,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,YAAY,EACb,MAAM,oDAAoD,CAAC;AAI5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE/F,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CAG5E;AAGD,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EAEnB,MAAM,IAAI,QAAQ,EAClB,MAAM,IAAI,QAAQ,EAClB,OAAO,IAAI,SAAS,EACpB,KAAK,IAAI,OAAO,EAChB,MAAM,IAAI,QAAQ,EAElB,kBAAkB,EAClB,oBAAoB,EAEpB,eAAe,IAAI,wBAAwB,EAC5C,MAAM,YAAY,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.NxHelpersJSONTransformer = exports.defaultMatcherConfig = exports.bestMatchOneToMany = exports.nxObject = exports.nxArray = exports.nxBoolean = exports.nxNumber = exports.nxString = exports.anyToMarkdownString = exports.toTitleCase = exports.fromCamelToTitle = exports.toCamelCase = exports.loadJson = exports.mergeWithRoles = exports.mergeMultiple = exports.mergeNoRedundancy = exports.resetFormatDetector = exports.getFormatDetector = exports.FormatDetector = exports.ColonParser = exports.BulletParser = exports.HeadingParser = exports.BaseMarkdownParser = exports.MarkdownFormat = exports.learnAliasesFromTransformations = exports.createNxHelpersTransformer = exports.createTransformerFromSchemaFile = exports.loadSchemaFromFile = exports.jsonToMarkdown = exports.mergeTransformResults = exports.MarkdownParser = exports.Schema = exports.LearningTransformer = exports.JSONTransformer = void 0;
|
|
10
|
+
exports.analyzeMarkdownFormat = analyzeMarkdownFormat;
|
|
10
11
|
// Core functionality - what most users need
|
|
11
12
|
var transformer_1 = require("./lib/markdown-transformer/core/transformer");
|
|
12
13
|
Object.defineProperty(exports, "JSONTransformer", { enumerable: true, get: function () { return transformer_1.JSONTransformer; } });
|
|
@@ -35,6 +36,12 @@ Object.defineProperty(exports, "ColonParser", { enumerable: true, get: function
|
|
|
35
36
|
Object.defineProperty(exports, "FormatDetector", { enumerable: true, get: function () { return parsers_1.FormatDetector; } });
|
|
36
37
|
Object.defineProperty(exports, "getFormatDetector", { enumerable: true, get: function () { return parsers_1.getFormatDetector; } });
|
|
37
38
|
Object.defineProperty(exports, "resetFormatDetector", { enumerable: true, get: function () { return parsers_1.resetFormatDetector; } });
|
|
39
|
+
// Convenience function for format analysis
|
|
40
|
+
const parsers_2 = require("./lib/markdown-transformer/parsers");
|
|
41
|
+
function analyzeMarkdownFormat(markdown) {
|
|
42
|
+
const detector = (0, parsers_2.getFormatDetector)();
|
|
43
|
+
return detector.analyzeFormat(markdown);
|
|
44
|
+
}
|
|
38
45
|
// Essential nx-helpers re-exports (for advanced usage)
|
|
39
46
|
var nx_helpers_1 = require("nx-helpers");
|
|
40
47
|
Object.defineProperty(exports, "mergeNoRedundancy", { enumerable: true, get: function () { return nx_helpers_1.mergeNoRedundancy; } });
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAkDH,sDAGC;AAnDD,4CAA4C;AAC5C,2EAA8E;AAArE,8GAAA,eAAe,OAAA;AACxB,4EAAmF;AAA1E,kHAAA,mBAAmB,OAAA;AAC5B,2EAAqE;AAA5D,qGAAA,MAAM,OAAA;AAEf,8CAA8C;AAC9C,2EAEqD;AADnD,6GAAA,cAAc,OAAA;AAEhB,gEAOgD;AAN9C,8GAAA,qBAAqB,OAAA;AACrB,uGAAA,cAAc,OAAA;AACd,2GAAA,kBAAkB,OAAA;AAClB,wHAAA,+BAA+B,OAAA;AAC/B,mHAAA,0BAA0B,OAAA;AAC1B,wHAAA,+BAA+B,OAAA;AAWjC,+DAAuE;AAA9D,uGAAA,cAAc,OAAA;AAEvB,iDAAiD;AACjD,8DAQ4C;AAP1C,6GAAA,kBAAkB,OAAA;AAClB,wGAAA,aAAa,OAAA;AACb,uGAAA,YAAY,OAAA;AACZ,sGAAA,WAAW,OAAA;AACX,yGAAA,cAAc,OAAA;AACd,4GAAA,iBAAiB,OAAA;AACjB,8GAAA,mBAAmB,OAAA;AAQrB,2CAA2C;AAC3C,gEAAuE;AAGvE,SAAgB,qBAAqB,CAAC,QAAgB;IACpD,MAAM,QAAQ,GAAG,IAAA,2BAAiB,GAAE,CAAC;IACrC,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,uDAAuD;AACvD,yCAoBoB;AAnBlB,+GAAA,iBAAiB,OAAA;AACjB,2GAAA,aAAa,OAAA;AACb,4GAAA,cAAc,OAAA;AACd,sGAAA,QAAQ,OAAA;AACR,yGAAA,WAAW,OAAA;AACX,8GAAA,gBAAgB,OAAA;AAChB,yGAAA,WAAW,OAAA;AACX,iHAAA,mBAAmB,OAAA;AACnB,kBAAkB;AAClB,sGAAA,MAAM,OAAY;AAClB,sGAAA,MAAM,OAAY;AAClB,uGAAA,OAAO,OAAa;AACpB,qGAAA,KAAK,OAAW;AAChB,sGAAA,MAAM,OAAY;AAClB,oBAAoB;AACpB,gHAAA,kBAAkB,OAAA;AAClB,kHAAA,oBAAoB,OAAA;AACpB,mBAAmB;AACnB,sHAAA,eAAe,OAA4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bullet-parser.d.ts","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/bullet-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhE,qBAAa,YAAa,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"bullet-parser.d.ts","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/bullet-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhE,qBAAa,YAAa,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQnC,aAAa,IAAI,cAAc;IAI/B,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IA8DlD,OAAO,CAAC,eAAe;CA0BxB"}
|
|
@@ -5,16 +5,10 @@ const base_parser_1 = require("./base-parser");
|
|
|
5
5
|
const types_1 = require("../core/types");
|
|
6
6
|
class BulletParser extends base_parser_1.BaseMarkdownParser {
|
|
7
7
|
canParse(markdown) {
|
|
8
|
-
// Must have bullets at column 0
|
|
8
|
+
// Must have bullets at column 0
|
|
9
9
|
const lines = markdown.split('\n');
|
|
10
|
-
const bulletLines = lines.filter(l =>
|
|
11
|
-
|
|
12
|
-
return false;
|
|
13
|
-
// Check if any bullets look like section headers (contain keywords)
|
|
14
|
-
return bulletLines.some(line => {
|
|
15
|
-
const text = line.replace(/^-\s+/, '').toLowerCase();
|
|
16
|
-
return this.options.sectionKeywords.some(kw => text.includes(kw));
|
|
17
|
-
});
|
|
10
|
+
const bulletLines = lines.filter(l => l.trim().startsWith('- '));
|
|
11
|
+
return bulletLines.length >= 2; // Need at least 2 bullet lines to be considered bullet format
|
|
18
12
|
}
|
|
19
13
|
getFormatName() {
|
|
20
14
|
return types_1.MarkdownFormat.BULLET;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bullet-parser.js","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/bullet-parser.ts"],"names":[],"mappings":";;;AAAA,+CAAmD;AACnD,yCAAgE;AAEhE,MAAa,YAAa,SAAQ,gCAAkB;IAClD,QAAQ,CAAC,QAAgB;QACvB,
|
|
1
|
+
{"version":3,"file":"bullet-parser.js","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/bullet-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colon-parser.d.ts","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/colon-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,qBAAa,WAAY,SAAQ,kBAAkB;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"colon-parser.d.ts","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/colon-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,qBAAa,WAAY,SAAQ,kBAAkB;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IASnC,aAAa,IAAI,cAAc;IAI/B,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IA6BlD,OAAO,CAAC,aAAa;CAoBtB"}
|
|
@@ -7,10 +7,8 @@ class ColonParser extends base_parser_1.BaseMarkdownParser {
|
|
|
7
7
|
canParse(markdown) {
|
|
8
8
|
const lines = markdown.split('\n').filter(l => l.trim());
|
|
9
9
|
// Must have at least some lines that look like key: value
|
|
10
|
-
const colonLines = lines.filter(line => line
|
|
11
|
-
|
|
12
|
-
// If more than 50% of lines contain colons, likely colon format
|
|
13
|
-
return colonLines.length > totalLines * 0.3 && colonLines.length >= 2;
|
|
10
|
+
const colonLines = lines.filter(line => /^\s*[^:]+:\s*.+/.test(line));
|
|
11
|
+
return colonLines.length >= 2; // Need at least 2 colon-separated lines
|
|
14
12
|
}
|
|
15
13
|
getFormatName() {
|
|
16
14
|
return types_1.MarkdownFormat.COLON;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colon-parser.js","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/colon-parser.ts"],"names":[],"mappings":";;;AAAA,+CAAmD;AAEnD,yCAA+C;AAE/C,MAAa,WAAY,SAAQ,gCAAkB;IACjD,QAAQ,CAAC,QAAgB;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEzD,0DAA0D;QAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"colon-parser.js","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/colon-parser.ts"],"names":[],"mappings":";;;AAAA,+CAAmD;AAEnD,yCAA+C;AAE/C,MAAa,WAAY,SAAQ,gCAAkB;IACjD,QAAQ,CAAC,QAAgB;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEzD,0DAA0D;QAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,wCAAwC;IACzE,CAAC;IAED,aAAa;QACX,OAAO,sBAAc,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAsB,EAAE,CAAC;QAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,wCAAwC;YACxC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAEvD,gFAAgF;gBAChF,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;oBACrC,QAAQ,CAAC,IAAI,CAAC;wBACZ,OAAO,EAAE,GAAG;wBACZ,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,OAAO;qBAChB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,aAAa,CAAC,GAAW;QAC/B,wBAAwB;QACxB,+BAA+B;QAC/B,+CAA+C;QAC/C,qCAAqC;QACrC,oBAAoB;QAEpB,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAEjC,2CAA2C;QAC3C,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAEjE,2CAA2C;QAC3C,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/G,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAElD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA/DD,kCA+DC"}
|
|
@@ -6,5 +6,31 @@ export declare class FormatDetector {
|
|
|
6
6
|
detect(markdown: string): MarkdownFormat;
|
|
7
7
|
getParser(format: MarkdownFormat, markdown?: string): BaseMarkdownParser;
|
|
8
8
|
registerParser(parser: BaseMarkdownParser): void;
|
|
9
|
+
/**
|
|
10
|
+
* Analyze markdown and return detailed format detection results
|
|
11
|
+
*/
|
|
12
|
+
analyzeFormat(markdown: string): FormatAnalysisResult;
|
|
13
|
+
private calculateSectionRanges;
|
|
14
|
+
private isSectionHeaderLine;
|
|
15
|
+
private calculateConfidence;
|
|
16
|
+
private isSubsection;
|
|
17
|
+
}
|
|
18
|
+
export interface FormatAnalysisResult {
|
|
19
|
+
primaryFormat: MarkdownFormat | 'unknown';
|
|
20
|
+
allMatches: FormatMatch[];
|
|
21
|
+
lineCount: number;
|
|
22
|
+
hasMixedContent: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface FormatMatch {
|
|
25
|
+
format: MarkdownFormat;
|
|
26
|
+
confidence: number;
|
|
27
|
+
sections: number;
|
|
28
|
+
sectionRanges: SectionRange[];
|
|
29
|
+
}
|
|
30
|
+
export interface SectionRange {
|
|
31
|
+
section: string;
|
|
32
|
+
startLine: number;
|
|
33
|
+
endLine: number;
|
|
34
|
+
lineCount: number;
|
|
9
35
|
}
|
|
10
36
|
//# sourceMappingURL=format-detector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-detector.d.ts","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/format-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD,OAAO,EAAE,cAAc,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"format-detector.d.ts","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/format-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAmB,MAAM,eAAe,CAAC;AAE/E,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,OAAO,GAAE,aAAkB;IAQvC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAYxC,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,kBAAkB;IA2BxE,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAIhD;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB;IAsCrD,OAAO,CAAC,sBAAsB;IA4C9B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;IAkD3B,OAAO,CAAC,YAAY;CAIrB;AAGD,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,cAAc,GAAG,SAAS,CAAC;IAC1C,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -49,6 +49,136 @@ class FormatDetector {
|
|
|
49
49
|
registerParser(parser) {
|
|
50
50
|
this.parsers.push(parser);
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Analyze markdown and return detailed format detection results
|
|
54
|
+
*/
|
|
55
|
+
analyzeFormat(markdown) {
|
|
56
|
+
const lines = markdown.split('\n');
|
|
57
|
+
const results = [];
|
|
58
|
+
// Try each parser
|
|
59
|
+
for (const parser of this.parsers) {
|
|
60
|
+
if (parser.canParse(markdown)) {
|
|
61
|
+
try {
|
|
62
|
+
const sections = parser.parseSections(markdown);
|
|
63
|
+
const format = parser.getFormatName();
|
|
64
|
+
// Calculate line ranges for each section
|
|
65
|
+
const sectionRanges = this.calculateSectionRanges(lines, sections);
|
|
66
|
+
results.push({
|
|
67
|
+
format,
|
|
68
|
+
confidence: this.calculateConfidence(markdown, format, sections),
|
|
69
|
+
sections: sections.length,
|
|
70
|
+
sectionRanges
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
// Parser failed, skip it
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Sort by confidence (highest first)
|
|
80
|
+
results.sort((a, b) => b.confidence - a.confidence);
|
|
81
|
+
return {
|
|
82
|
+
primaryFormat: results[0]?.format || 'unknown',
|
|
83
|
+
allMatches: results,
|
|
84
|
+
lineCount: lines.length,
|
|
85
|
+
hasMixedContent: results.length > 1
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
calculateSectionRanges(lines, sections) {
|
|
89
|
+
const ranges = [];
|
|
90
|
+
let currentLine = 0;
|
|
91
|
+
for (const section of sections) {
|
|
92
|
+
// Find where this section starts in the lines
|
|
93
|
+
let sectionStart = -1;
|
|
94
|
+
let sectionEnd = -1;
|
|
95
|
+
// Look for the section header
|
|
96
|
+
for (let i = currentLine; i < lines.length; i++) {
|
|
97
|
+
const line = lines[i].trim();
|
|
98
|
+
if (this.isSectionHeaderLine(line, section.heading)) {
|
|
99
|
+
sectionStart = i;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (sectionStart !== -1) {
|
|
104
|
+
// Find where this section ends (next section or end of document)
|
|
105
|
+
sectionEnd = lines.length - 1;
|
|
106
|
+
for (let i = sectionStart + 1; i < lines.length; i++) {
|
|
107
|
+
const line = lines[i].trim();
|
|
108
|
+
// Check if this line starts a new section
|
|
109
|
+
if (sections.some(s => s !== section && this.isSectionHeaderLine(line, s.heading))) {
|
|
110
|
+
sectionEnd = i - 1;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
ranges.push({
|
|
115
|
+
section: section.heading,
|
|
116
|
+
startLine: sectionStart + 1, // 1-indexed
|
|
117
|
+
endLine: sectionEnd + 1,
|
|
118
|
+
lineCount: sectionEnd - sectionStart + 1
|
|
119
|
+
});
|
|
120
|
+
currentLine = sectionEnd + 1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return ranges;
|
|
124
|
+
}
|
|
125
|
+
isSectionHeaderLine(line, heading) {
|
|
126
|
+
// Check different formats
|
|
127
|
+
return line === `### ${heading}` ||
|
|
128
|
+
line === `- ${heading}` ||
|
|
129
|
+
line === `${heading}:` ||
|
|
130
|
+
line === heading; // fallback
|
|
131
|
+
}
|
|
132
|
+
calculateConfidence(markdown, format, sections) {
|
|
133
|
+
if (sections.length === 0)
|
|
134
|
+
return 0;
|
|
135
|
+
const lines = markdown.split('\n');
|
|
136
|
+
const totalLines = lines.length;
|
|
137
|
+
const contentLines = lines.filter(l => l.trim()).length;
|
|
138
|
+
let score = 0;
|
|
139
|
+
// Base score from successful parsing
|
|
140
|
+
if (sections.length > 0)
|
|
141
|
+
score += 40; // Successfully parsed some sections
|
|
142
|
+
// Score based on section quality
|
|
143
|
+
const avgContentLength = sections.reduce((sum, s) => sum + s.content.length, 0) / sections.length;
|
|
144
|
+
if (avgContentLength > 10)
|
|
145
|
+
score += 20; // Good content extraction
|
|
146
|
+
// Score based on format-specific patterns
|
|
147
|
+
switch (format) {
|
|
148
|
+
case types_1.MarkdownFormat.HEADING:
|
|
149
|
+
// Check for proper heading hierarchy
|
|
150
|
+
const headingLevels = sections.map(s => s.level).filter(l => l >= 1 && l <= 6);
|
|
151
|
+
if (headingLevels.length === sections.length)
|
|
152
|
+
score += 20; // All valid heading levels
|
|
153
|
+
break;
|
|
154
|
+
case types_1.MarkdownFormat.BULLET:
|
|
155
|
+
// Check for reasonable number of top-level sections
|
|
156
|
+
const topLevelBullets = sections.filter(s => !this.isSubsection(s.heading, sections)).length;
|
|
157
|
+
if (topLevelBullets >= 2 && topLevelBullets <= 10)
|
|
158
|
+
score += 20; // Reasonable structure
|
|
159
|
+
break;
|
|
160
|
+
case types_1.MarkdownFormat.COLON:
|
|
161
|
+
// Check for key-value structure
|
|
162
|
+
const validKeys = sections.filter(s => s.heading.length > 0 &&
|
|
163
|
+
s.heading.length < 50 &&
|
|
164
|
+
!s.heading.includes('\n') &&
|
|
165
|
+
/^[A-Za-z]/.test(s.heading) // Starts with letter
|
|
166
|
+
).length;
|
|
167
|
+
if (validKeys === sections.length)
|
|
168
|
+
score += 20; // All valid key names
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
// Bonus for high content coverage
|
|
172
|
+
const parsedContentLines = sections.reduce((sum, s) => sum + s.content.split('\n').length, 0);
|
|
173
|
+
const coverageRatio = parsedContentLines / contentLines;
|
|
174
|
+
if (coverageRatio > 0.7)
|
|
175
|
+
score += 20; // Good content coverage
|
|
176
|
+
return Math.min(100, Math.max(0, score));
|
|
177
|
+
}
|
|
178
|
+
isSubsection(heading, allSections) {
|
|
179
|
+
// Simple heuristic: subsections often have longer, more specific names
|
|
180
|
+
return heading.length > 20 || heading.split(' ').length > 4;
|
|
181
|
+
}
|
|
52
182
|
}
|
|
53
183
|
exports.FormatDetector = FormatDetector;
|
|
54
184
|
//# sourceMappingURL=format-detector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-detector.js","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/format-detector.ts"],"names":[],"mappings":";;;AACA,qDAAiD;AACjD,mDAA+C;AAC/C,iDAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"format-detector.js","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/format-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ export { HeadingParser } from './heading-parser';
|
|
|
3
3
|
export { BulletParser } from './bullet-parser';
|
|
4
4
|
export { ColonParser } from './colon-parser';
|
|
5
5
|
export { FormatDetector } from './format-detector';
|
|
6
|
+
export type { FormatAnalysisResult, FormatMatch, SectionRange } from './format-detector';
|
|
6
7
|
import { FormatDetector } from './format-detector';
|
|
7
8
|
import { ParserOptions } from '../core/types';
|
|
8
9
|
export declare function getFormatDetector(options?: ParserOptions): FormatDetector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAK9C,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAKzE;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/markdown-transformer/parsers/index.ts"],"names":[],"mappings":";;;AAaA,8CAKC;AAED,kDAEC;AAtBD,6CAAmD;AAA1C,iHAAA,kBAAkB,OAAA;AAC3B,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAGvB,uDAAmD;AAGnD,8BAA8B;AAC9B,IAAI,eAAe,GAA0B,IAAI,CAAC;AAElD,SAAgB,iBAAiB,CAAC,OAAuB;IACvD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,gCAAc,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAgB,mBAAmB;IACjC,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nx-md-parser",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Extensible Multi-Format AI-Powered Markdown to JSON Transformer with support for any markdown variant through custom parsers, intelligent schema validation, auto-fixing, table parsing, and optional persistent machine learning",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|