@mzebley/mark-down 1.2.0 → 1.2.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,37 +1,38 @@
1
- import { parse as parseYaml } from "yaml";
2
- import { ManifestLoadError } from "./errors";
3
- import type { SnippetMeta } from "./types";
4
-
5
- export interface FrontMatterResult {
6
- content: string;
7
- meta: Partial<SnippetMeta>;
8
- extra: Record<string, unknown>;
9
- slug?: string;
10
- hasFrontMatter: boolean;
11
- }
12
-
13
- const FRONT_MATTER_PATTERN = /^(?:\uFEFF)?[ \t\r\n]*---\s*\r?\n([\s\S]*?)\r?\n---\s*\r?\n?/;
1
+ // src/errors.ts
2
+ var SnippetNotFoundError = class extends Error {
3
+ constructor(slug) {
4
+ super(`Snippet with slug '${slug}' was not found in the manifest.`);
5
+ this.name = "SnippetNotFoundError";
6
+ this.slug = slug;
7
+ }
8
+ };
9
+ var ManifestLoadError = class extends Error {
10
+ constructor(message, cause) {
11
+ super(message);
12
+ this.name = "ManifestLoadError";
13
+ this.cause = cause instanceof Error ? cause : cause ? new Error(String(cause)) : void 0;
14
+ }
15
+ };
14
16
 
15
- export function parseFrontMatter(raw: string): FrontMatterResult {
17
+ // src/front-matter.ts
18
+ import { parse as parseYaml } from "yaml";
19
+ var FRONT_MATTER_PATTERN = /^(?:\uFEFF)?[ \t\r\n]*---\s*\r?\n([\s\S]*?)\r?\n---\s*\r?\n?/;
20
+ function parseFrontMatter(raw) {
16
21
  const match = FRONT_MATTER_PATTERN.exec(raw);
17
22
  if (!match) {
18
23
  return { content: raw, meta: {}, extra: {}, hasFrontMatter: false };
19
24
  }
20
-
21
25
  const yamlSection = match[1];
22
- let data: unknown;
26
+ let data;
23
27
  try {
24
28
  data = parseYaml(yamlSection) ?? {};
25
29
  } catch (error) {
26
30
  throw new ManifestLoadError("Failed to parse snippet front-matter.", error);
27
31
  }
28
-
29
32
  if (!isRecord(data)) {
30
33
  return { content: raw.slice(match[0].length), meta: {}, extra: {}, hasFrontMatter: true };
31
34
  }
32
-
33
35
  const { known, extra } = splitFrontMatter(data);
34
-
35
36
  return {
36
37
  content: raw.slice(match[0].length),
37
38
  meta: known.meta,
@@ -40,18 +41,14 @@ export function parseFrontMatter(raw: string): FrontMatterResult {
40
41
  hasFrontMatter: true
41
42
  };
42
43
  }
43
-
44
- function splitFrontMatter(
45
- data: Record<string, unknown>
46
- ): { known: { meta: Partial<SnippetMeta>; slug?: string }; extra: Record<string, unknown> } {
47
- const meta: Partial<SnippetMeta> = {};
48
- const extra: Record<string, unknown> = {};
49
- let slug: string | undefined;
50
-
44
+ function splitFrontMatter(data) {
45
+ const meta = {};
46
+ const extra = {};
47
+ let slug;
51
48
  for (const [key, value] of Object.entries(data)) {
52
49
  switch (key) {
53
50
  case "slug":
54
- slug = typeof value === "string" ? value : undefined;
51
+ slug = typeof value === "string" ? value : void 0;
55
52
  break;
56
53
  case "title":
57
54
  if (typeof value === "string") {
@@ -86,26 +83,38 @@ function splitFrontMatter(
86
83
  break;
87
84
  }
88
85
  }
89
-
90
86
  return { known: { meta, slug }, extra };
91
87
  }
92
-
93
- function normalizeTags(value: unknown): string[] | undefined {
88
+ function normalizeTags(value) {
94
89
  if (!value) {
95
- return undefined;
90
+ return void 0;
96
91
  }
97
92
  if (Array.isArray(value)) {
98
93
  return value.map((item) => String(item));
99
94
  }
100
95
  if (typeof value === "string") {
101
- return value
102
- .split(",")
103
- .map((tag) => tag.trim())
104
- .filter(Boolean);
96
+ return value.split(",").map((tag) => tag.trim()).filter(Boolean);
105
97
  }
106
- return undefined;
98
+ return void 0;
107
99
  }
108
-
109
- function isRecord(candidate: unknown): candidate is Record<string, unknown> {
100
+ function isRecord(candidate) {
110
101
  return Boolean(candidate) && typeof candidate === "object" && !Array.isArray(candidate);
111
102
  }
103
+
104
+ // src/markdown.ts
105
+ import { marked } from "marked";
106
+ function renderMarkdown(markdown) {
107
+ const html = marked.parse(markdown);
108
+ if (typeof html === "string") {
109
+ return html;
110
+ }
111
+ throw new Error("renderMarkdown unexpectedly returned a Promise");
112
+ }
113
+
114
+ export {
115
+ SnippetNotFoundError,
116
+ ManifestLoadError,
117
+ parseFrontMatter,
118
+ renderMarkdown
119
+ };
120
+ //# sourceMappingURL=chunk-MWZFQXNW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/front-matter.ts","../src/markdown.ts"],"sourcesContent":["export class SnippetNotFoundError extends Error {\n readonly slug: string;\n\n constructor(slug: string) {\n super(`Snippet with slug '${slug}' was not found in the manifest.`);\n this.name = \"SnippetNotFoundError\";\n this.slug = slug;\n }\n}\n\nexport class ManifestLoadError extends Error {\n readonly cause?: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = \"ManifestLoadError\";\n this.cause = cause instanceof Error ? cause : cause ? new Error(String(cause)) : undefined;\n }\n}\n","import { parse as parseYaml } from \"yaml\";\nimport { ManifestLoadError } from \"./errors\";\nimport type { SnippetMeta } from \"./types\";\n\nexport interface FrontMatterResult {\n content: string;\n meta: Partial<SnippetMeta>;\n extra: Record<string, unknown>;\n slug?: string;\n hasFrontMatter: boolean;\n}\n\nconst FRONT_MATTER_PATTERN = /^(?:\\uFEFF)?[ \\t\\r\\n]*---\\s*\\r?\\n([\\s\\S]*?)\\r?\\n---\\s*\\r?\\n?/;\n\nexport function parseFrontMatter(raw: string): FrontMatterResult {\n const match = FRONT_MATTER_PATTERN.exec(raw);\n if (!match) {\n return { content: raw, meta: {}, extra: {}, hasFrontMatter: false };\n }\n\n const yamlSection = match[1];\n let data: unknown;\n try {\n data = parseYaml(yamlSection) ?? {};\n } catch (error) {\n throw new ManifestLoadError(\"Failed to parse snippet front-matter.\", error);\n }\n\n if (!isRecord(data)) {\n return { content: raw.slice(match[0].length), meta: {}, extra: {}, hasFrontMatter: true };\n }\n\n const { known, extra } = splitFrontMatter(data);\n\n return {\n content: raw.slice(match[0].length),\n meta: known.meta,\n extra,\n slug: known.slug,\n hasFrontMatter: true\n };\n}\n\nfunction splitFrontMatter(\n data: Record<string, unknown>\n): { known: { meta: Partial<SnippetMeta>; slug?: string }; extra: Record<string, unknown> } {\n const meta: Partial<SnippetMeta> = {};\n const extra: Record<string, unknown> = {};\n let slug: string | undefined;\n\n for (const [key, value] of Object.entries(data)) {\n switch (key) {\n case \"slug\":\n slug = typeof value === \"string\" ? value : undefined;\n break;\n case \"title\":\n if (typeof value === \"string\") {\n meta.title = value;\n }\n break;\n case \"type\":\n if (typeof value === \"string\") {\n meta.type = value;\n }\n break;\n case \"order\":\n if (typeof value === \"number\") {\n meta.order = value;\n }\n break;\n case \"tags\":\n meta.tags = normalizeTags(value);\n break;\n case \"group\":\n if (typeof value === \"string\" || value === null) {\n meta.group = value;\n }\n break;\n case \"draft\":\n if (typeof value === \"boolean\") {\n meta.draft = value;\n }\n break;\n default:\n extra[key] = value;\n break;\n }\n }\n\n return { known: { meta, slug }, extra };\n}\n\nfunction normalizeTags(value: unknown): string[] | undefined {\n if (!value) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n if (typeof value === \"string\") {\n return value\n .split(\",\")\n .map((tag) => tag.trim())\n .filter(Boolean);\n }\n return undefined;\n}\n\nfunction isRecord(candidate: unknown): candidate is Record<string, unknown> {\n return Boolean(candidate) && typeof candidate === \"object\" && !Array.isArray(candidate);\n}\n","import { marked } from \"marked\";\n\nexport function renderMarkdown(markdown: string): string {\n const html = marked.parse(markdown);\n\n if (typeof html === \"string\") {\n return html;\n }\n\n throw new Error(\"renderMarkdown unexpectedly returned a Promise\");\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,25 @@
1
+ import { S as SnippetMeta } from './snippet-client-CiQX2Zcn.js';
2
+ export { M as ManifestSource, R as ResponseLike, a as Snippet, f as SnippetClient, e as SnippetClientOptions, d as SnippetFetcher, c as SnippetFetcherResult, b as SnippetSearchFilter } from './snippet-client-CiQX2Zcn.js';
3
+ export { normalizeSlug } from './slug.js';
4
+
5
+ declare class SnippetNotFoundError extends Error {
6
+ readonly slug: string;
7
+ constructor(slug: string);
8
+ }
9
+ declare class ManifestLoadError extends Error {
10
+ readonly cause?: unknown;
11
+ constructor(message: string, cause?: unknown);
12
+ }
13
+
14
+ interface FrontMatterResult {
15
+ content: string;
16
+ meta: Partial<SnippetMeta>;
17
+ extra: Record<string, unknown>;
18
+ slug?: string;
19
+ hasFrontMatter: boolean;
20
+ }
21
+ declare function parseFrontMatter(raw: string): FrontMatterResult;
22
+
23
+ declare function renderMarkdown(markdown: string): string;
24
+
25
+ export { ManifestLoadError, SnippetMeta, SnippetNotFoundError, parseFrontMatter, renderMarkdown };
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ import {
2
+ SnippetClient
3
+ } from "./chunk-35YHML5Z.js";
4
+ import {
5
+ normalizeSlug
6
+ } from "./chunk-GWLMADTU.js";
7
+ import {
8
+ ManifestLoadError,
9
+ SnippetNotFoundError,
10
+ parseFrontMatter,
11
+ renderMarkdown
12
+ } from "./chunk-MWZFQXNW.js";
13
+ import "./chunk-BRKEJJFQ.js";
14
+ export {
15
+ ManifestLoadError,
16
+ SnippetClient,
17
+ SnippetNotFoundError,
18
+ normalizeSlug,
19
+ parseFrontMatter,
20
+ renderMarkdown
21
+ };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,8 @@
1
+ interface InlineMarkdownOptions {
2
+ selector?: string;
3
+ processFrontMatter?: boolean;
4
+ applyMetaToDom?: boolean;
5
+ }
6
+ declare function enhanceInlineMarkdown(options?: InlineMarkdownOptions): void;
7
+
8
+ export { type InlineMarkdownOptions, enhanceInlineMarkdown };
@@ -1,24 +1,19 @@
1
- import { parseFrontMatter, type FrontMatterResult } from "./front-matter";
2
- import { renderMarkdown } from "./markdown";
3
-
4
- export interface InlineMarkdownOptions {
5
- selector?: string;
6
- processFrontMatter?: boolean;
7
- applyMetaToDom?: boolean;
8
- }
9
-
10
- const DEFAULT_SELECTOR = "[data-markdown]";
11
-
12
- export function enhanceInlineMarkdown(options: InlineMarkdownOptions = {}): void {
1
+ import {
2
+ parseFrontMatter,
3
+ renderMarkdown
4
+ } from "./chunk-MWZFQXNW.js";
5
+ import "./chunk-BRKEJJFQ.js";
6
+
7
+ // src/inline.ts
8
+ var DEFAULT_SELECTOR = "[data-markdown]";
9
+ function enhanceInlineMarkdown(options = {}) {
13
10
  if (typeof document === "undefined") {
14
11
  return;
15
12
  }
16
-
17
13
  const selector = options.selector ?? DEFAULT_SELECTOR;
18
14
  const processFrontMatter = options.processFrontMatter !== false;
19
15
  const applyMetaToDom = options.applyMetaToDom !== false;
20
-
21
- const elements = Array.from(document.querySelectorAll<HTMLElement>(selector));
16
+ const elements = Array.from(document.querySelectorAll(selector));
22
17
  for (const element of elements) {
23
18
  if (element.dataset.markdownProcessed === "true") {
24
19
  continue;
@@ -26,55 +21,45 @@ export function enhanceInlineMarkdown(options: InlineMarkdownOptions = {}): void
26
21
  processElement(element, { processFrontMatter, applyMetaToDom });
27
22
  }
28
23
  }
29
-
30
- function processElement(
31
- element: HTMLElement,
32
- options: { processFrontMatter: boolean; applyMetaToDom: boolean }
33
- ): void {
24
+ function processElement(element, options) {
34
25
  const raw = element.textContent ?? "";
35
- let frontMatter: FrontMatterResult | undefined;
36
-
26
+ let frontMatter;
37
27
  if (options.processFrontMatter) {
38
28
  try {
39
29
  frontMatter = parseFrontMatter(raw);
40
30
  } catch (error) {
41
- console.warn("[mark inline] Failed to parse front matter for element:", error);
42
- frontMatter = undefined;
31
+ console.warn("[mark\u2193 inline] Failed to parse front matter for element:", error);
32
+ frontMatter = void 0;
43
33
  }
44
34
  }
45
-
46
35
  const body = frontMatter?.content ?? raw;
47
36
  const html = renderMarkdown(body);
48
-
49
37
  element.innerHTML = html;
50
38
  element.dataset.markdownProcessed = "true";
51
-
52
39
  if (options.applyMetaToDom && frontMatter?.hasFrontMatter) {
53
40
  applyMetaAttributes(element, frontMatter);
54
41
  }
55
42
  }
56
-
57
- function applyMetaAttributes(element: HTMLElement, frontMatter: FrontMatterResult): void {
43
+ function applyMetaAttributes(element, frontMatter) {
58
44
  const { slug, meta, extra } = frontMatter;
59
-
60
45
  if (slug) {
61
46
  if (!element.id) {
62
47
  element.id = slug;
63
48
  }
64
49
  element.dataset.slug = slug;
65
50
  }
66
-
67
51
  if (meta.title) {
68
52
  element.dataset.title = meta.title;
69
53
  }
70
-
71
54
  if (meta.tags?.length) {
72
55
  element.dataset.tags = meta.tags.join(",");
73
56
  }
74
-
75
57
  const variant = typeof extra.variant === "string" ? extra.variant.trim() : "";
76
58
  if (variant) {
77
59
  element.classList.add(`md-block--${variant}`);
78
60
  }
79
-
80
61
  }
62
+ export {
63
+ enhanceInlineMarkdown
64
+ };
65
+ //# sourceMappingURL=inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/inline.ts"],"sourcesContent":["import { parseFrontMatter, type FrontMatterResult } from \"./front-matter\";\nimport { renderMarkdown } from \"./markdown\";\n\nexport interface InlineMarkdownOptions {\n selector?: string;\n processFrontMatter?: boolean;\n applyMetaToDom?: boolean;\n}\n\nconst DEFAULT_SELECTOR = \"[data-markdown]\";\n\nexport function enhanceInlineMarkdown(options: InlineMarkdownOptions = {}): void {\n if (typeof document === \"undefined\") {\n return;\n }\n\n const selector = options.selector ?? DEFAULT_SELECTOR;\n const processFrontMatter = options.processFrontMatter !== false;\n const applyMetaToDom = options.applyMetaToDom !== false;\n\n const elements = Array.from(document.querySelectorAll<HTMLElement>(selector));\n for (const element of elements) {\n if (element.dataset.markdownProcessed === \"true\") {\n continue;\n }\n processElement(element, { processFrontMatter, applyMetaToDom });\n }\n}\n\nfunction processElement(\n element: HTMLElement,\n options: { processFrontMatter: boolean; applyMetaToDom: boolean }\n): void {\n const raw = element.textContent ?? \"\";\n let frontMatter: FrontMatterResult | undefined;\n\n if (options.processFrontMatter) {\n try {\n frontMatter = parseFrontMatter(raw);\n } catch (error) {\n console.warn(\"[mark↓ inline] Failed to parse front matter for element:\", error);\n frontMatter = undefined;\n }\n }\n\n const body = frontMatter?.content ?? raw;\n const html = renderMarkdown(body);\n\n element.innerHTML = html;\n element.dataset.markdownProcessed = \"true\";\n\n if (options.applyMetaToDom && frontMatter?.hasFrontMatter) {\n applyMetaAttributes(element, frontMatter);\n }\n}\n\nfunction applyMetaAttributes(element: HTMLElement, frontMatter: FrontMatterResult): void {\n const { slug, meta, extra } = frontMatter;\n\n if (slug) {\n if (!element.id) {\n element.id = slug;\n }\n element.dataset.slug = slug;\n }\n\n if (meta.title) {\n element.dataset.title = meta.title;\n }\n\n if (meta.tags?.length) {\n element.dataset.tags = meta.tags.join(\",\");\n }\n\n const variant = typeof extra.variant === \"string\" ? extra.variant.trim() : \"\";\n if (variant) {\n element.classList.add(`md-block--${variant}`);\n }\n\n}\n"],"mappings":";;;;;;;AASA,IAAM,mBAAmB;AAElB,SAAS,sBAAsB,UAAiC,CAAC,GAAS;AAC/E,MAAI,OAAO,aAAa,aAAa;AACnC;AAAA,EACF;AAEA,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,qBAAqB,QAAQ,uBAAuB;AAC1D,QAAM,iBAAiB,QAAQ,mBAAmB;AAElD,QAAM,WAAW,MAAM,KAAK,SAAS,iBAA8B,QAAQ,CAAC;AAC5E,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,QAAQ,sBAAsB,QAAQ;AAChD;AAAA,IACF;AACA,mBAAe,SAAS,EAAE,oBAAoB,eAAe,CAAC;AAAA,EAChE;AACF;AAEA,SAAS,eACP,SACA,SACM;AACN,QAAM,MAAM,QAAQ,eAAe;AACnC,MAAI;AAEJ,MAAI,QAAQ,oBAAoB;AAC9B,QAAI;AACF,oBAAc,iBAAiB,GAAG;AAAA,IACpC,SAAS,OAAO;AACd,cAAQ,KAAK,iEAA4D,KAAK;AAC9E,oBAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,OAAO,aAAa,WAAW;AACrC,QAAM,OAAO,eAAe,IAAI;AAEhC,UAAQ,YAAY;AACpB,UAAQ,QAAQ,oBAAoB;AAEpC,MAAI,QAAQ,kBAAkB,aAAa,gBAAgB;AACzD,wBAAoB,SAAS,WAAW;AAAA,EAC1C;AACF;AAEA,SAAS,oBAAoB,SAAsB,aAAsC;AACvF,QAAM,EAAE,MAAM,MAAM,MAAM,IAAI;AAE9B,MAAI,MAAM;AACR,QAAI,CAAC,QAAQ,IAAI;AACf,cAAQ,KAAK;AAAA,IACf;AACA,YAAQ,QAAQ,OAAO;AAAA,EACzB;AAEA,MAAI,KAAK,OAAO;AACd,YAAQ,QAAQ,QAAQ,KAAK;AAAA,EAC/B;AAEA,MAAI,KAAK,MAAM,QAAQ;AACrB,YAAQ,QAAQ,OAAO,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3C;AAEA,QAAM,UAAU,OAAO,MAAM,YAAY,WAAW,MAAM,QAAQ,KAAK,IAAI;AAC3E,MAAI,SAAS;AACX,YAAQ,UAAU,IAAI,aAAa,OAAO,EAAE;AAAA,EAC9C;AAEF;","names":[]}