@origints/markdown 0.1.1 → 0.3.2

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.
@@ -1,3 +1,4 @@
1
+ import { TYPE_LABEL } from '@origints/core';
1
2
  import { Root, Content } from 'mdast';
2
3
  import { MarkdownResult, MarkdownPath, SourcePosition } from './markdown-result';
3
4
  import { HeadingData, CodeBlockData, InlineCodeData, LinkData, ImageData, ListData, TableData, BlockquoteData, ParagraphData, DefinitionData } from './typed-extractors';
@@ -18,6 +19,7 @@ export declare class MarkdownNode {
18
19
  private readonly node;
19
20
  private readonly _path;
20
21
  private readonly root;
22
+ get [TYPE_LABEL](): string;
21
23
  private constructor();
22
24
  /**
23
25
  * Creates a MarkdownNode from a parsed mdast tree.
@@ -0,0 +1,36 @@
1
+ import { ExtractSpec, ArraySpec, Spec } from '@origints/core';
2
+ import { MarkdownStep } from './markdown-spec';
3
+ /**
4
+ * Spec builder for a Markdown node — navigation and extraction.
5
+ */
6
+ export declare class MarkdownNodeSB {
7
+ private readonly steps;
8
+ /** @internal */
9
+ constructor(steps: readonly MarkdownStep[]);
10
+ /** Select a single node matching a CSS-like selector */
11
+ select(selector: string): MarkdownNodeSB;
12
+ /** Select the nth node matching a CSS-like selector */
13
+ selectAt(selector: string, index: number): MarkdownNodeSB;
14
+ /** Navigate to a child by index */
15
+ child(index: number): MarkdownNodeSB;
16
+ /** Navigate to the first child */
17
+ first(): MarkdownNodeSB;
18
+ /** Navigate to the last child */
19
+ last(): MarkdownNodeSB;
20
+ /** Extract text content */
21
+ text(): ExtractSpec<MarkdownStep, 'text'>;
22
+ /** Select all matching nodes, mapping each to a spec */
23
+ selectAll<T extends Spec>(selector: string, itemMapper: (node: MarkdownNodeSB) => T): ArraySpec<T>;
24
+ /** Iterate over direct children, mapping each to a spec */
25
+ children<T extends Spec>(itemMapper: (node: MarkdownNodeSB) => T): ArraySpec<T>;
26
+ }
27
+ /**
28
+ * Spec builder for Markdown — the entry point for Markdown navigation specs.
29
+ *
30
+ * Used as `$` in `emit()` after `.mapIn(parseMarkdown())`.
31
+ */
32
+ export declare class MarkdownSpecBuilder extends MarkdownNodeSB {
33
+ private constructor();
34
+ /** Create a root spec builder */
35
+ static root(): MarkdownSpecBuilder;
36
+ }
@@ -0,0 +1,6 @@
1
+ import { ExtractionResult } from '@origints/core';
2
+ import { MarkdownSpec } from './markdown-spec';
3
+ /**
4
+ * Execute a MarkdownSpec against data (expected to be a MarkdownNode).
5
+ */
6
+ export declare function executeMarkdownSpec(spec: MarkdownSpec, data: unknown): ExtractionResult<unknown>;
@@ -0,0 +1,32 @@
1
+ import { ExtractSpec } from '@origints/core';
2
+ /**
3
+ * A single navigation step through a Markdown document.
4
+ */
5
+ export type MarkdownStep = {
6
+ readonly kind: 'select';
7
+ readonly selector: string;
8
+ } | {
9
+ readonly kind: 'selectAll';
10
+ readonly selector: string;
11
+ readonly index: number;
12
+ } | {
13
+ readonly kind: 'child';
14
+ readonly index: number;
15
+ } | {
16
+ readonly kind: 'first';
17
+ } | {
18
+ readonly kind: 'last';
19
+ };
20
+ /**
21
+ * The terminal extraction type for a Markdown value.
22
+ */
23
+ export type MarkdownExtract = 'text' | {
24
+ readonly kind: 'selectAll';
25
+ readonly selector: string;
26
+ } | {
27
+ readonly kind: 'children';
28
+ };
29
+ /**
30
+ * A complete Markdown extraction spec.
31
+ */
32
+ export type MarkdownSpec = ExtractSpec<MarkdownStep, MarkdownExtract>;
package/dist/parse.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { TransformAst, TransformImpl } from '@origints/core';
1
+ import { TransformImpl, TypedTransformAst } from '@origints/core';
2
+ import { MarkdownSpecBuilder } from './markdown-spec-builder';
2
3
  /**
3
4
  * Options for parsing Markdown.
4
5
  */
@@ -23,14 +24,17 @@ export interface MarkdownParseOptions {
23
24
  * Create a parseMarkdown transform AST.
24
25
  *
25
26
  * @example
26
- * ```typescript
27
- * const plan = Planner.in(loadFile('README.md'))
27
+ * ```ts
28
+ * const plan = new Planner()
29
+ * .in(loadFile('README.md'))
28
30
  * .mapIn(parseMarkdown())
29
- * .inject((node) => node.select('heading[depth=1]').value.asHeading().value.text)
31
+ * .emit((out, $) => out
32
+ * .add('title', $.get('heading').string())
33
+ * )
30
34
  * .compile()
31
35
  * ```
32
36
  */
33
- export declare function parseMarkdown(options?: MarkdownParseOptions): TransformAst;
37
+ export declare function parseMarkdown(options?: MarkdownParseOptions): TypedTransformAst<MarkdownSpecBuilder>;
34
38
  /**
35
39
  * Transform implementation for parseMarkdown.
36
40
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@origints/markdown",
3
- "version": "0.1.1",
3
+ "version": "0.3.2",
4
4
  "description": "Markdown parsing and manipulation for Origins with full lineage tracking",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -33,7 +33,7 @@
33
33
  "yaml": "^2.7.0"
34
34
  },
35
35
  "peerDependencies": {
36
- "@origints/core": "^0.1.0"
36
+ "@origints/core": "^0.3.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@origints/core": "workspace:*",
@@ -58,5 +58,19 @@
58
58
  "url": "https://github.com/fponticelli/origints.git",
59
59
  "directory": "packages/markdown"
60
60
  },
61
+ "homepage": "https://origints.dev",
62
+ "bugs": "https://github.com/fponticelli/origints/issues",
63
+ "keywords": [
64
+ "origints",
65
+ "data-extraction",
66
+ "lineage",
67
+ "provenance",
68
+ "markdown",
69
+ "gfm",
70
+ "frontmatter"
71
+ ],
72
+ "engines": {
73
+ "node": ">=18"
74
+ },
61
75
  "license": "MIT"
62
76
  }