lens-content-processor 0.25.0 → 0.26.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/dist/flattener/resolve-text-links.d.ts +1 -1
- package/dist/flattener/resolve-text-links.js +61 -32
- package/dist/flattener/resolve-text-links.js.map +1 -1
- package/dist/parser/sections.d.ts +2 -2
- package/dist/parser/sections.js +76 -45
- package/dist/parser/sections.js.map +1 -1
- package/dist/validator/directives.d.ts +3 -3
- package/dist/validator/directives.js +162 -76
- package/dist/validator/directives.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { resolveWikilinkPath, findFileWithExtension, stripMdSuffix } from
|
|
2
|
-
import { parseFrontmatter } from
|
|
1
|
+
import { resolveWikilinkPath, findFileWithExtension, stripMdSuffix, } from "../parser/wikilink.js";
|
|
2
|
+
import { parseFrontmatter } from "../parser/frontmatter.js";
|
|
3
3
|
// The (?<!::card) lookbehind handles only the bare `::card[[..]]` form.
|
|
4
4
|
// `::card{attr}[[..]]` slips past it; safe because CARD_LINK_RE runs first
|
|
5
5
|
// and consumes the full match, but if that order ever changes, this regex
|
|
6
6
|
// would misinterpret the [[..]] portion of a card link as a wikilink.
|
|
7
|
-
const INLINE_WIKILINK_RE = /(?<!!)(?<!::card)(\[\[([^\]|]+)(?:\|([^\]]+))?\]\])/g;
|
|
7
|
+
const INLINE_WIKILINK_RE = /(?<!\\)(?<!!)(?<!::card)(\[\[([^\]|]+)(?:\|([^\]]+))?\]\])/g;
|
|
8
8
|
// Captures both ::card{attr}[[path|alias]] and ::card[[path|alias]]{attr} forms.
|
|
9
9
|
// Group 1: pre-bracket attr (optional)
|
|
10
10
|
// Group 2: target path
|
|
@@ -26,15 +26,15 @@ export function resolveTextLinks(content, sourcePath, files) {
|
|
|
26
26
|
file: sourcePath,
|
|
27
27
|
line: 0,
|
|
28
28
|
message: `Card link target not found: ${path}`,
|
|
29
|
-
severity:
|
|
29
|
+
severity: "warning",
|
|
30
30
|
});
|
|
31
31
|
return fullMatch;
|
|
32
32
|
}
|
|
33
33
|
const fileContent = files.get(filePath);
|
|
34
34
|
const fm = parseFrontmatter(fileContent, filePath);
|
|
35
|
-
const isModule = filePath.toLowerCase().includes(
|
|
35
|
+
const isModule = filePath.toLowerCase().includes("modules/");
|
|
36
36
|
const cardData = {
|
|
37
|
-
targetType: isModule ?
|
|
37
|
+
targetType: isModule ? "module" : "lens",
|
|
38
38
|
title: fm.frontmatter.title || fileNameToTitle(filePath),
|
|
39
39
|
// Original wikilink path the author wrote — kept so validators can
|
|
40
40
|
// echo the directive back in suggestions (e.g. "add {allow-external}
|
|
@@ -42,7 +42,8 @@ export function resolveTextLinks(content, sourcePath, files) {
|
|
|
42
42
|
targetPath: path,
|
|
43
43
|
};
|
|
44
44
|
if (isModule) {
|
|
45
|
-
cardData.slug =
|
|
45
|
+
cardData.slug =
|
|
46
|
+
fm.frontmatter.slug || fileNameToSlug(filePath);
|
|
46
47
|
}
|
|
47
48
|
else {
|
|
48
49
|
cardData.contentId = fm.frontmatter.id || null;
|
|
@@ -50,16 +51,40 @@ export function resolveTextLinks(content, sourcePath, files) {
|
|
|
50
51
|
cardData.moduleSlug = null;
|
|
51
52
|
}
|
|
52
53
|
// Parse attributes from either pre- or post-bracket form
|
|
53
|
-
const attr = (preAttr || postAttr ||
|
|
54
|
-
if (attr ===
|
|
54
|
+
const attr = (preAttr || postAttr || "").trim();
|
|
55
|
+
if (attr === "allow-external") {
|
|
55
56
|
cardData.allowExternal = true;
|
|
56
57
|
}
|
|
57
|
-
const json = JSON.stringify(cardData).replace(/'/g,
|
|
58
|
+
const json = JSON.stringify(cardData).replace(/'/g, "'");
|
|
58
59
|
return `<div data-lens-card='${json}'></div>`;
|
|
59
60
|
});
|
|
60
61
|
// Second pass: resolve inline wikilinks
|
|
61
62
|
const resolved = processed.replace(INLINE_WIKILINK_RE, (fullMatch, _outer, rawPath, pipeDisplay) => {
|
|
62
63
|
const path = rawPath.trim();
|
|
64
|
+
// Obsidian-compatible links to a heading or block marker in this Lens.
|
|
65
|
+
// Keep these as a private scheme: the renderer scrolls inside the current
|
|
66
|
+
// Lens instead of treating the URL hash as module navigation.
|
|
67
|
+
if (path.startsWith("#^")) {
|
|
68
|
+
const blockId = path.slice(2).trim();
|
|
69
|
+
if (!/^[A-Za-z0-9-]+$/.test(blockId)) {
|
|
70
|
+
errors.push({
|
|
71
|
+
file: sourcePath,
|
|
72
|
+
line: 0,
|
|
73
|
+
message: `Invalid block link: ${path}. Use letters, numbers, and dashes.`,
|
|
74
|
+
severity: "warning",
|
|
75
|
+
});
|
|
76
|
+
return fullMatch;
|
|
77
|
+
}
|
|
78
|
+
const display = pipeDisplay?.trim() || blockId;
|
|
79
|
+
return `[${display}](anchor:block:${encodeURIComponent(blockId)})`;
|
|
80
|
+
}
|
|
81
|
+
if (path.startsWith("#")) {
|
|
82
|
+
const heading = path.slice(1).trim();
|
|
83
|
+
if (!heading)
|
|
84
|
+
return fullMatch;
|
|
85
|
+
const display = pipeDisplay?.trim() || heading;
|
|
86
|
+
return `[${display}](anchor:heading:${encodeURIComponent(heading)})`;
|
|
87
|
+
}
|
|
63
88
|
const resolvedPath = resolveWikilinkPath(path, sourcePath);
|
|
64
89
|
const filePath = findFileWithExtension(resolvedPath, files);
|
|
65
90
|
if (!filePath) {
|
|
@@ -67,14 +92,14 @@ export function resolveTextLinks(content, sourcePath, files) {
|
|
|
67
92
|
file: sourcePath,
|
|
68
93
|
line: 0,
|
|
69
94
|
message: `Wikilink target not found: ${path}`,
|
|
70
|
-
severity:
|
|
95
|
+
severity: "warning",
|
|
71
96
|
});
|
|
72
97
|
return fullMatch;
|
|
73
98
|
}
|
|
74
99
|
const fileContent = files.get(filePath);
|
|
75
100
|
const fm = parseFrontmatter(fileContent, filePath);
|
|
76
|
-
const isModule = filePath.toLowerCase().includes(
|
|
77
|
-
const isLens = filePath.toLowerCase().includes(
|
|
101
|
+
const isModule = filePath.toLowerCase().includes("modules/");
|
|
102
|
+
const isLens = filePath.toLowerCase().includes("lenses/");
|
|
78
103
|
if (isModule) {
|
|
79
104
|
const slug = fm.frontmatter.slug || fileNameToSlug(filePath);
|
|
80
105
|
const title = fm.frontmatter.title || fileNameToTitle(filePath);
|
|
@@ -88,7 +113,7 @@ export function resolveTextLinks(content, sourcePath, files) {
|
|
|
88
113
|
file: sourcePath,
|
|
89
114
|
line: 0,
|
|
90
115
|
message: `Lens has no id in frontmatter: ${path}`,
|
|
91
|
-
severity:
|
|
116
|
+
severity: "warning",
|
|
92
117
|
});
|
|
93
118
|
return fullMatch;
|
|
94
119
|
}
|
|
@@ -101,15 +126,15 @@ export function resolveTextLinks(content, sourcePath, files) {
|
|
|
101
126
|
return { content: resolved, errors };
|
|
102
127
|
}
|
|
103
128
|
function fileNameToTitle(filePath) {
|
|
104
|
-
const parts = filePath.split(
|
|
129
|
+
const parts = filePath.split("/");
|
|
105
130
|
const filename = parts[parts.length - 1];
|
|
106
|
-
return filename.replace(/\.md$/,
|
|
131
|
+
return filename.replace(/\.md$/, "");
|
|
107
132
|
}
|
|
108
133
|
function fileNameToSlug(filePath) {
|
|
109
134
|
return fileNameToTitle(filePath)
|
|
110
135
|
.toLowerCase()
|
|
111
|
-
.replace(/[^a-z0-9]+/g,
|
|
112
|
-
.replace(/^-|-$/g,
|
|
136
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
137
|
+
.replace(/^-|-$/g, "");
|
|
113
138
|
}
|
|
114
139
|
const CARD_HTML_RE = /(<div data-lens-card=')([^']+)('><\/div>)/g;
|
|
115
140
|
/**
|
|
@@ -125,21 +150,21 @@ const CARD_HTML_RE = /(<div data-lens-card=')([^']+)('><\/div>)/g;
|
|
|
125
150
|
export function populateCardModuleSlugs(sections, contentIdToModuleSlug) {
|
|
126
151
|
for (const section of sections) {
|
|
127
152
|
for (const seg of section.segments) {
|
|
128
|
-
if (seg.type !==
|
|
153
|
+
if (seg.type !== "text")
|
|
129
154
|
continue;
|
|
130
|
-
if (!seg.content.includes(
|
|
155
|
+
if (!seg.content.includes("data-lens-card="))
|
|
131
156
|
continue;
|
|
132
157
|
seg.content = seg.content.replace(CARD_HTML_RE, (_match, prefix, jsonStr, suffix) => {
|
|
133
158
|
try {
|
|
134
159
|
const data = JSON.parse(jsonStr.replace(/'/g, "'"));
|
|
135
|
-
if (data.targetType !==
|
|
160
|
+
if (data.targetType !== "lens" || !data.contentId) {
|
|
136
161
|
return `${prefix}${jsonStr}${suffix}`;
|
|
137
162
|
}
|
|
138
163
|
const moduleSlug = contentIdToModuleSlug.get(data.contentId);
|
|
139
164
|
if (moduleSlug) {
|
|
140
165
|
data.moduleSlug = moduleSlug;
|
|
141
166
|
}
|
|
142
|
-
const newJson = JSON.stringify(data).replace(/'/g,
|
|
167
|
+
const newJson = JSON.stringify(data).replace(/'/g, "'");
|
|
143
168
|
return `${prefix}${newJson}${suffix}`;
|
|
144
169
|
}
|
|
145
170
|
catch {
|
|
@@ -159,9 +184,9 @@ const INLINE_LENS_RE = /\[([^\]]+)\]\(lens:([a-f0-9-]+)\)/g;
|
|
|
159
184
|
export function resolveInlineLensModuleSlugs(sections, contentIdToModuleSlug) {
|
|
160
185
|
for (const section of sections) {
|
|
161
186
|
for (const seg of section.segments) {
|
|
162
|
-
if (seg.type !==
|
|
187
|
+
if (seg.type !== "text")
|
|
163
188
|
continue;
|
|
164
|
-
if (!seg.content.includes(
|
|
189
|
+
if (!seg.content.includes("lens:"))
|
|
165
190
|
continue;
|
|
166
191
|
seg.content = seg.content.replace(INLINE_LENS_RE, (match, display, contentId) => {
|
|
167
192
|
const moduleSlug = contentIdToModuleSlug.get(contentId);
|
|
@@ -181,8 +206,12 @@ export function enrichCardLinks(sections) {
|
|
|
181
206
|
continue;
|
|
182
207
|
const enrichment = {};
|
|
183
208
|
// Duration from wordCount + videoDurationSeconds
|
|
184
|
-
const readingMin = section.wordCount
|
|
185
|
-
|
|
209
|
+
const readingMin = section.wordCount
|
|
210
|
+
? Math.ceil(section.wordCount / 200)
|
|
211
|
+
: 0;
|
|
212
|
+
const videoMin = section.videoDurationSeconds
|
|
213
|
+
? Math.ceil(section.videoDurationSeconds / 60)
|
|
214
|
+
: 0;
|
|
186
215
|
const totalMin = readingMin + videoMin;
|
|
187
216
|
if (totalMin > 0) {
|
|
188
217
|
enrichment.duration = `${totalMin} min`;
|
|
@@ -191,14 +220,14 @@ export function enrichCardLinks(sections) {
|
|
|
191
220
|
const seen = new Set();
|
|
192
221
|
const names = [];
|
|
193
222
|
for (const seg of section.segments) {
|
|
194
|
-
if (seg.type ===
|
|
223
|
+
if (seg.type === "article" && "author" in seg && seg.author) {
|
|
195
224
|
const name = seg.author;
|
|
196
225
|
if (!seen.has(name)) {
|
|
197
226
|
seen.add(name);
|
|
198
227
|
names.push(name);
|
|
199
228
|
}
|
|
200
229
|
}
|
|
201
|
-
else if (seg.type ===
|
|
230
|
+
else if (seg.type === "video" && "channel" in seg && seg.channel) {
|
|
202
231
|
const name = seg.channel;
|
|
203
232
|
if (!seen.has(name)) {
|
|
204
233
|
seen.add(name);
|
|
@@ -207,7 +236,7 @@ export function enrichCardLinks(sections) {
|
|
|
207
236
|
}
|
|
208
237
|
}
|
|
209
238
|
if (names.length > 0) {
|
|
210
|
-
enrichment.attribution = names.join(
|
|
239
|
+
enrichment.attribution = names.join(" & ");
|
|
211
240
|
}
|
|
212
241
|
// Display type
|
|
213
242
|
if (section.displayType) {
|
|
@@ -218,9 +247,9 @@ export function enrichCardLinks(sections) {
|
|
|
218
247
|
// Enrich card HTML blocks in text segments
|
|
219
248
|
for (const section of sections) {
|
|
220
249
|
for (const seg of section.segments) {
|
|
221
|
-
if (seg.type !==
|
|
250
|
+
if (seg.type !== "text")
|
|
222
251
|
continue;
|
|
223
|
-
if (!seg.content.includes(
|
|
252
|
+
if (!seg.content.includes("data-lens-card="))
|
|
224
253
|
continue;
|
|
225
254
|
seg.content = seg.content.replace(CARD_HTML_RE, (_match, prefix, jsonStr, suffix) => {
|
|
226
255
|
try {
|
|
@@ -238,7 +267,7 @@ export function enrichCardLinks(sections) {
|
|
|
238
267
|
data.attribution = enrichment.attribution;
|
|
239
268
|
if (enrichment.displayType && !data.displayType)
|
|
240
269
|
data.displayType = enrichment.displayType;
|
|
241
|
-
const newJson = JSON.stringify(data).replace(/'/g,
|
|
270
|
+
const newJson = JSON.stringify(data).replace(/'/g, "'");
|
|
242
271
|
return `${prefix}${newJson}${suffix}`;
|
|
243
272
|
}
|
|
244
273
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-text-links.js","sourceRoot":"","sources":["../../src/flattener/resolve-text-links.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"resolve-text-links.js","sourceRoot":"","sources":["../../src/flattener/resolve-text-links.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ContentError } from
|
|
1
|
+
import type { ContentError } from "../index.js";
|
|
2
2
|
export interface ParsedSection {
|
|
3
3
|
type: string;
|
|
4
4
|
title: string;
|
|
@@ -8,7 +8,7 @@ export interface ParsedSection {
|
|
|
8
8
|
line: number;
|
|
9
9
|
level: number;
|
|
10
10
|
children?: ParsedSection[];
|
|
11
|
-
inlineLens?: import(
|
|
11
|
+
inlineLens?: import("./lens.js").ParsedLens;
|
|
12
12
|
}
|
|
13
13
|
export interface SectionsResult {
|
|
14
14
|
sections: ParsedSection[];
|
package/dist/parser/sections.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ALL_KNOWN_FIELDS } from
|
|
2
|
-
import { levenshtein } from
|
|
1
|
+
import { ALL_KNOWN_FIELDS } from "../content-schema.js";
|
|
2
|
+
import { levenshtein } from "../validator/field-typos.js";
|
|
3
3
|
// Valid section types per file type (exported for use by other parsers)
|
|
4
|
-
export const MODULE_SECTION_TYPES = new Set([
|
|
5
|
-
export const LO_SECTION_TYPES = new Set([
|
|
4
|
+
export const MODULE_SECTION_TYPES = new Set(["learning outcome", "lens"]);
|
|
5
|
+
export const LO_SECTION_TYPES = new Set(["lens", "test"]);
|
|
6
6
|
// Legacy: Lens H3 section types (no longer used — lenses are now flat H4 segments)
|
|
7
|
-
export const LENS_SECTION_TYPES = new Set([
|
|
7
|
+
export const LENS_SECTION_TYPES = new Set(["page", "article", "video"]);
|
|
8
8
|
// All known structural header types (sections + segments) for markdown heading detection
|
|
9
9
|
// NOTE: deliberately does NOT include the survey-only segment types
|
|
10
10
|
// (rating/choice). Real survey headers are consumed as section boundaries
|
|
@@ -13,17 +13,30 @@ export const LENS_SECTION_TYPES = new Set(['page', 'article', 'video']);
|
|
|
13
13
|
// headings like "## Rating" inside content:: fields.
|
|
14
14
|
const ALL_STRUCTURAL_TYPES = new Set([
|
|
15
15
|
// Section types
|
|
16
|
-
|
|
16
|
+
"learning outcome",
|
|
17
|
+
"lens",
|
|
18
|
+
"test",
|
|
19
|
+
"module",
|
|
20
|
+
"meeting",
|
|
21
|
+
"article",
|
|
22
|
+
"video",
|
|
17
23
|
// Segment types
|
|
18
|
-
|
|
24
|
+
"text",
|
|
25
|
+
"chat",
|
|
26
|
+
"question",
|
|
27
|
+
"roleplay",
|
|
19
28
|
]);
|
|
20
29
|
// Fields that commonly contain markdown with headings
|
|
21
|
-
const MARKDOWN_CONTENT_FIELDS = new Set([
|
|
30
|
+
const MARKDOWN_CONTENT_FIELDS = new Set([
|
|
31
|
+
"content",
|
|
32
|
+
"instructions",
|
|
33
|
+
"ai-instructions",
|
|
34
|
+
]);
|
|
22
35
|
// Map input section names to output types for Lens files
|
|
23
36
|
export const LENS_OUTPUT_TYPE = {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
37
|
+
page: "page",
|
|
38
|
+
article: "lens-article",
|
|
39
|
+
video: "lens-video",
|
|
27
40
|
};
|
|
28
41
|
/**
|
|
29
42
|
* Parse sections from markdown content based on header hierarchy.
|
|
@@ -35,11 +48,11 @@ export const LENS_OUTPUT_TYPE = {
|
|
|
35
48
|
* @param flat - When true, all matching headers are siblings (for segments).
|
|
36
49
|
* When false, deeper headers nest inside preceding siblings (for sections).
|
|
37
50
|
*/
|
|
38
|
-
export function parseSections(content, parentLevel, validTypes, file =
|
|
51
|
+
export function parseSections(content, parentLevel, validTypes, file = "", flat = false) {
|
|
39
52
|
const minLevel = parentLevel + 1;
|
|
40
53
|
// Match any header from minLevel to 6 with named capture groups
|
|
41
|
-
const HEADER_PATTERN = new RegExp(`^(?<hashes>#{${minLevel},6})\\s+(?<type>[^:]+?)(?:\\:\\s*(?<title>.*?))?\\s*$`,
|
|
42
|
-
const lines = content.split(
|
|
54
|
+
const HEADER_PATTERN = new RegExp(`^(?<hashes>#{${minLevel},6})\\s+(?<type>[^:]+?)(?:\\:\\s*(?<title>.*?))?\\s*$`, "i");
|
|
55
|
+
const lines = content.split("\n");
|
|
43
56
|
const sections = [];
|
|
44
57
|
const errors = [];
|
|
45
58
|
let currentSection = null;
|
|
@@ -49,13 +62,13 @@ export function parseSections(content, parentLevel, validTypes, file = '', flat
|
|
|
49
62
|
function finalizeSection() {
|
|
50
63
|
if (!currentSection)
|
|
51
64
|
return;
|
|
52
|
-
currentSection.body = currentBody.join(
|
|
65
|
+
currentSection.body = currentBody.join("\n");
|
|
53
66
|
const { warnings } = parseFields(currentSection, file);
|
|
54
67
|
errors.push(...warnings);
|
|
55
68
|
// Submodule sections get recursive children parsing
|
|
56
|
-
if (currentSection.type ===
|
|
69
|
+
if (currentSection.type === "submodule") {
|
|
57
70
|
const childValidTypes = new Set([...validTypes]);
|
|
58
|
-
childValidTypes.delete(
|
|
71
|
+
childValidTypes.delete("submodule"); // No nesting
|
|
59
72
|
const childResult = parseSections(currentSection.body, currentSection.level, childValidTypes, file);
|
|
60
73
|
currentSection.children = childResult.sections;
|
|
61
74
|
errors.push(...childResult.errors);
|
|
@@ -71,19 +84,24 @@ export function parseSections(content, parentLevel, validTypes, file = '', flat
|
|
|
71
84
|
const headerLevel = hashes.length;
|
|
72
85
|
const rawType = headerMatch.groups.type.trim();
|
|
73
86
|
const normalizedType = rawType.toLowerCase();
|
|
74
|
-
const title = (headerMatch.groups.title ??
|
|
87
|
+
const title = (headerMatch.groups.title ?? "").trim();
|
|
75
88
|
// Check if this type is valid for the current context
|
|
76
89
|
if (!validTypes.has(normalizedType)) {
|
|
77
90
|
// Only error for unknown types at sibling level (not deeper body content)
|
|
78
|
-
const wouldBeSibling = flat ||
|
|
91
|
+
const wouldBeSibling = flat ||
|
|
92
|
+
currentSiblingLevel === 0 ||
|
|
93
|
+
headerLevel <= currentSiblingLevel;
|
|
79
94
|
if (wouldBeSibling) {
|
|
80
|
-
const capitalized = [...validTypes].map(t => t
|
|
95
|
+
const capitalized = [...validTypes].map((t) => t
|
|
96
|
+
.split(" ")
|
|
97
|
+
.map((w) => w[0].toUpperCase() + w.slice(1))
|
|
98
|
+
.join(" "));
|
|
81
99
|
errors.push({
|
|
82
100
|
file,
|
|
83
101
|
line: lineNum,
|
|
84
102
|
message: `Unknown section type: ${rawType}`,
|
|
85
|
-
suggestion: `Valid types: ${capitalized.join(
|
|
86
|
-
severity:
|
|
103
|
+
suggestion: `Valid types: ${capitalized.join(", ")}`,
|
|
104
|
+
severity: "error",
|
|
87
105
|
});
|
|
88
106
|
}
|
|
89
107
|
// Treat as body content of current section
|
|
@@ -94,7 +112,9 @@ export function parseSections(content, parentLevel, validTypes, file = '', flat
|
|
|
94
112
|
}
|
|
95
113
|
// Sibling boundary rule (hierarchical mode only):
|
|
96
114
|
// Deeper headers go into the preceding sibling's body
|
|
97
|
-
if (!flat &&
|
|
115
|
+
if (!flat &&
|
|
116
|
+
currentSiblingLevel > 0 &&
|
|
117
|
+
headerLevel > currentSiblingLevel) {
|
|
98
118
|
currentBody.push(line);
|
|
99
119
|
continue;
|
|
100
120
|
}
|
|
@@ -102,11 +122,11 @@ export function parseSections(content, parentLevel, validTypes, file = '', flat
|
|
|
102
122
|
finalizeSection();
|
|
103
123
|
currentSiblingLevel = headerLevel;
|
|
104
124
|
currentSection = {
|
|
105
|
-
type: normalizedType.replaceAll(
|
|
125
|
+
type: normalizedType.replaceAll(" ", "-"),
|
|
106
126
|
title,
|
|
107
127
|
rawType,
|
|
108
128
|
fields: {},
|
|
109
|
-
body:
|
|
129
|
+
body: "",
|
|
110
130
|
line: lineNum,
|
|
111
131
|
level: headerLevel,
|
|
112
132
|
};
|
|
@@ -125,9 +145,9 @@ export function parseSections(content, parentLevel, validTypes, file = '', flat
|
|
|
125
145
|
errors.push({
|
|
126
146
|
file,
|
|
127
147
|
line: lineNum,
|
|
128
|
-
message:
|
|
129
|
-
suggestion:
|
|
130
|
-
severity:
|
|
148
|
+
message: "Content found before first section header — this text will be ignored",
|
|
149
|
+
suggestion: "Move this text into a section, or remove it",
|
|
150
|
+
severity: "error",
|
|
131
151
|
});
|
|
132
152
|
}
|
|
133
153
|
}
|
|
@@ -139,7 +159,7 @@ export function parseSections(content, parentLevel, validTypes, file = '', flat
|
|
|
139
159
|
}
|
|
140
160
|
const FIELD_PATTERN = /^([\w-]+)::\s*(.*)$/;
|
|
141
161
|
function parseFields(section, file) {
|
|
142
|
-
const lines = section.body.split(
|
|
162
|
+
const lines = section.body.split("\n");
|
|
143
163
|
const warnings = [];
|
|
144
164
|
const seenFields = new Set();
|
|
145
165
|
let currentField = null;
|
|
@@ -156,23 +176,30 @@ function parseFields(section, file) {
|
|
|
156
176
|
if (currentField && MARKDOWN_CONTENT_FIELDS.has(currentField)) {
|
|
157
177
|
const headingText = headerMatch[2].trim();
|
|
158
178
|
// Extract type word: "Text", "Chat: title", "Article-excerpt" etc.
|
|
159
|
-
const typeWord = headingText.replace(/:.*$/,
|
|
179
|
+
const typeWord = headingText.replace(/:.*$/, "").trim().toLowerCase();
|
|
160
180
|
// Also check if it's a typo of a structural type (levenshtein ≤ 2)
|
|
161
|
-
const isTypoOfStructural = [...ALL_STRUCTURAL_TYPES].some(st => levenshtein(typeWord, st) <= 2);
|
|
181
|
+
const isTypoOfStructural = [...ALL_STRUCTURAL_TYPES].some((st) => levenshtein(typeWord, st) <= 2);
|
|
162
182
|
if (!ALL_STRUCTURAL_TYPES.has(typeWord) && !isTypoOfStructural) {
|
|
183
|
+
if (headerMatch[1].length >= 2) {
|
|
184
|
+
// H2+ Markdown headings belong to the active markdown field. H1
|
|
185
|
+
// remains a document boundary because modules and lenses use it
|
|
186
|
+
// for top-level structure.
|
|
187
|
+
currentValue.push(line);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
163
190
|
const hashes = headerMatch[1];
|
|
164
191
|
warnings.push({
|
|
165
192
|
file,
|
|
166
193
|
line: lineNum,
|
|
167
194
|
message: `'${hashes} ${headingText}' looks like a Markdown heading inside ${currentField}:: field`,
|
|
168
195
|
suggestion: `Escape it as '!${hashes} ${headingText}' so it's treated as content, not a section boundary`,
|
|
169
|
-
severity:
|
|
196
|
+
severity: "warning",
|
|
170
197
|
});
|
|
171
198
|
}
|
|
172
199
|
}
|
|
173
200
|
// Save current field if any
|
|
174
201
|
if (currentField) {
|
|
175
|
-
section.fields[currentField] = currentValue.join(
|
|
202
|
+
section.fields[currentField] = currentValue.join("\n").trim();
|
|
176
203
|
currentField = null;
|
|
177
204
|
currentValue = [];
|
|
178
205
|
}
|
|
@@ -185,7 +212,7 @@ function parseFields(section, file) {
|
|
|
185
212
|
if (match) {
|
|
186
213
|
// Save previous field if any
|
|
187
214
|
if (currentField) {
|
|
188
|
-
section.fields[currentField] = currentValue.join(
|
|
215
|
+
section.fields[currentField] = currentValue.join("\n").trim();
|
|
189
216
|
}
|
|
190
217
|
currentField = match[1];
|
|
191
218
|
const inlineValue = match[2].trim();
|
|
@@ -197,7 +224,7 @@ function parseFields(section, file) {
|
|
|
197
224
|
line: lineNum,
|
|
198
225
|
message: `Duplicate field '${currentField}' (previous value will be overwritten)`,
|
|
199
226
|
suggestion: `Remove the duplicate '${currentField}::' definition`,
|
|
200
|
-
severity:
|
|
227
|
+
severity: "error",
|
|
201
228
|
});
|
|
202
229
|
}
|
|
203
230
|
seenFields.add(currentField);
|
|
@@ -210,38 +237,42 @@ function parseFields(section, file) {
|
|
|
210
237
|
// Not inside a field — check for single-colon that should be double-colon
|
|
211
238
|
// Only suggest field:: if the word is a known field name
|
|
212
239
|
const singleColonMatch = line.match(/^(\w+):\s+(.*)$/);
|
|
213
|
-
if (singleColonMatch &&
|
|
240
|
+
if (singleColonMatch &&
|
|
241
|
+
!line.match(/^https?:/) &&
|
|
242
|
+
ALL_KNOWN_FIELDS.includes(singleColonMatch[1])) {
|
|
214
243
|
warnings.push({
|
|
215
244
|
file,
|
|
216
245
|
line: lineNum,
|
|
217
246
|
message: `Found '${singleColonMatch[1]}:' with single colon — did you mean '${singleColonMatch[1]}::'?`,
|
|
218
247
|
suggestion: `Change '${singleColonMatch[1]}:' to '${singleColonMatch[1]}::' (double colon)`,
|
|
219
|
-
severity:
|
|
248
|
+
severity: "error",
|
|
220
249
|
});
|
|
221
250
|
}
|
|
222
251
|
else if (line.trim() && !freeTextWarned) {
|
|
223
252
|
freeTextWarned = true;
|
|
224
|
-
const preview = line.trim().length > 60
|
|
253
|
+
const preview = line.trim().length > 60
|
|
254
|
+
? line.trim().slice(0, 60) + "..."
|
|
255
|
+
: line.trim();
|
|
225
256
|
warnings.push({
|
|
226
257
|
file,
|
|
227
258
|
line: lineNum,
|
|
228
259
|
message: `Text outside of a field:: definition will be ignored: "${preview}"`,
|
|
229
|
-
suggestion:
|
|
230
|
-
severity:
|
|
260
|
+
suggestion: "Place this text inside a field (e.g., content:: your text), or remove it",
|
|
261
|
+
severity: "error",
|
|
231
262
|
});
|
|
232
263
|
}
|
|
233
264
|
}
|
|
234
265
|
}
|
|
235
266
|
// Save final field
|
|
236
267
|
if (currentField) {
|
|
237
|
-
section.fields[currentField] = currentValue.join(
|
|
268
|
+
section.fields[currentField] = currentValue.join("\n").trim();
|
|
238
269
|
}
|
|
239
|
-
// Unescape \# → # at start of lines in markdown content fields.
|
|
240
|
-
//
|
|
241
|
-
//
|
|
270
|
+
// Unescape \# or !# → # at start of lines in markdown content fields.
|
|
271
|
+
// Both forms prevent structural-header parsing. The validator recommends !#;
|
|
272
|
+
// \# remains supported for existing content.
|
|
242
273
|
for (const field of MARKDOWN_CONTENT_FIELDS) {
|
|
243
274
|
if (section.fields[field]) {
|
|
244
|
-
section.fields[field] = section.fields[field].replace(
|
|
275
|
+
section.fields[field] = section.fields[field].replace(/^[\\!](#+)/gm, "$1");
|
|
245
276
|
}
|
|
246
277
|
}
|
|
247
278
|
return { warnings };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/parser/sections.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAmB1D,wEAAwE;AACxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1D,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAExE,yFAAyF;AACzF,oEAAoE;AACpE,0EAA0E;AAC1E,qEAAqE;AACrE,0EAA0E;AAC1E,qDAAqD;AACrD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,gBAAgB;IAChB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/parser/sections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ContentError } from
|
|
1
|
+
import type { ContentError } from "../index.js";
|
|
2
2
|
/**
|
|
3
3
|
* Main validator for article body content.
|
|
4
4
|
* Checks for unclosed containers, unsupported names, empty containers,
|
|
@@ -6,7 +6,7 @@ import type { ContentError } from '../index.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function validateDirectives(body: string, file: string, bodyStartLine: number): ContentError[];
|
|
8
8
|
/**
|
|
9
|
-
* Lightweight check for directives in
|
|
10
|
-
*
|
|
9
|
+
* Lightweight check for article-only directives in lens-authored text segments.
|
|
10
|
+
* `callout` is intentionally supported by both renderers.
|
|
11
11
|
*/
|
|
12
12
|
export declare function detectDirectivesInNonArticle(content: string, file: string, line: number): ContentError[];
|
|
@@ -1,14 +1,35 @@
|
|
|
1
|
-
import { levenshtein } from
|
|
1
|
+
import { levenshtein } from "./field-typos.js";
|
|
2
2
|
const SUPPORTED_DIRECTIVES = {
|
|
3
3
|
note: { container: true, leaf: true, text: true, open: false },
|
|
4
|
+
hide: { container: true, leaf: false, text: true, open: false },
|
|
5
|
+
// Legacy alias. Keep existing content working, but do not advertise it.
|
|
4
6
|
collapse: { container: true, leaf: false, text: true, open: false },
|
|
5
7
|
footnote: { container: false, leaf: true, text: true, open: false },
|
|
8
|
+
callout: { container: true, leaf: false, text: false, open: false },
|
|
6
9
|
};
|
|
10
|
+
const LEGACY_DIRECTIVE_ALIASES = new Map([["collapse", "hide"]]);
|
|
11
|
+
function supportedDirectiveNames(form) {
|
|
12
|
+
return Object.entries(SUPPORTED_DIRECTIVES)
|
|
13
|
+
.filter(([name, support]) => !LEGACY_DIRECTIVE_ALIASES.has(name) && support[form])
|
|
14
|
+
.map(([name]) => name)
|
|
15
|
+
.join(", ");
|
|
16
|
+
}
|
|
7
17
|
const UNSUPPORTED_NAMES = new Set([
|
|
8
|
-
|
|
9
|
-
|
|
18
|
+
"warning",
|
|
19
|
+
"info",
|
|
20
|
+
"tip",
|
|
21
|
+
"caution",
|
|
22
|
+
"important",
|
|
23
|
+
"danger",
|
|
24
|
+
"details",
|
|
25
|
+
"summary",
|
|
26
|
+
"aside",
|
|
27
|
+
"admonition",
|
|
28
|
+
]);
|
|
29
|
+
const ALL_DIRECTIVE_NAMES = new Set([
|
|
30
|
+
...Object.keys(SUPPORTED_DIRECTIVES),
|
|
31
|
+
...UNSUPPORTED_NAMES,
|
|
10
32
|
]);
|
|
11
|
-
const ALL_DIRECTIVE_NAMES = new Set([...Object.keys(SUPPORTED_DIRECTIVES), ...UNSUPPORTED_NAMES]);
|
|
12
33
|
/**
|
|
13
34
|
* Check if a name is a near-miss typo of a supported directive name.
|
|
14
35
|
* Returns the closest match if levenshtein distance ≤ 2, else undefined.
|
|
@@ -20,15 +41,15 @@ function findNearMissDirective(name) {
|
|
|
20
41
|
const dist = levenshtein(name.toLowerCase(), supported);
|
|
21
42
|
if (dist > 0 && dist <= 2 && dist < bestDist) {
|
|
22
43
|
bestDist = dist;
|
|
23
|
-
bestMatch = supported;
|
|
44
|
+
bestMatch = LEGACY_DIRECTIVE_ALIASES.get(supported) ?? supported;
|
|
24
45
|
}
|
|
25
46
|
}
|
|
26
47
|
return bestMatch;
|
|
27
48
|
}
|
|
28
49
|
// Regex patterns
|
|
29
|
-
const CONTAINER_OPEN =
|
|
30
|
-
const CONTAINER_CLOSE_BARE =
|
|
31
|
-
const CONTAINER_CLOSE_ATTR =
|
|
50
|
+
const CONTAINER_OPEN = /^(:{3,})([\w-]+)(?:\s*\{([^}]*)\})?/;
|
|
51
|
+
const CONTAINER_CLOSE_BARE = /^(:{3,})\s*$/;
|
|
52
|
+
const CONTAINER_CLOSE_ATTR = /^(:{3,})\s*\{([^}]*)\}/;
|
|
32
53
|
const CODE_FENCE = /^(?:```|~~~)/;
|
|
33
54
|
const LEAF_DIRECTIVE_PRE = /^::([\w-]+)(?:\{([^}]*)\})?\[/;
|
|
34
55
|
const LEAF_DIRECTIVE_POST = /^::([\w-]+)\[[^\]]*\]\{([^}]*)\}/;
|
|
@@ -41,21 +62,21 @@ const TEXT_UNCLOSED = /(?:^|[^:]):([\w][\w-]*)(?:\{[^}]*\})?\[[^\]]*$/;
|
|
|
41
62
|
* Check if an attribute value looks like a typo of "open".
|
|
42
63
|
*/
|
|
43
64
|
function isOpenTypo(attr) {
|
|
44
|
-
if (attr ===
|
|
65
|
+
if (attr === "open")
|
|
45
66
|
return false;
|
|
46
67
|
if (!attr)
|
|
47
68
|
return false;
|
|
48
69
|
// Case-insensitive match
|
|
49
|
-
if (attr.toLowerCase() ===
|
|
70
|
+
if (attr.toLowerCase() === "open")
|
|
50
71
|
return true;
|
|
51
72
|
// Contains = (like open=true)
|
|
52
|
-
if (attr.includes(
|
|
53
|
-
const key = attr.split(
|
|
54
|
-
if (key.toLowerCase() ===
|
|
73
|
+
if (attr.includes("=")) {
|
|
74
|
+
const key = attr.split("=")[0];
|
|
75
|
+
if (key.toLowerCase() === "open")
|
|
55
76
|
return true;
|
|
56
77
|
}
|
|
57
78
|
// Levenshtein distance
|
|
58
|
-
if (levenshtein(attr.toLowerCase(),
|
|
79
|
+
if (levenshtein(attr.toLowerCase(), "open") <= 2)
|
|
59
80
|
return true;
|
|
60
81
|
return false;
|
|
61
82
|
}
|
|
@@ -69,17 +90,66 @@ function checkAttribute(name, attr, file, line) {
|
|
|
69
90
|
const info = SUPPORTED_DIRECTIVES[name];
|
|
70
91
|
if (!info)
|
|
71
92
|
return errors;
|
|
72
|
-
if (
|
|
93
|
+
if (name === "callout") {
|
|
94
|
+
const tokens = [...attr.matchAll(/([\w-]+)\s*=\s*"([^"]*)"/g)];
|
|
95
|
+
const consumed = tokens.map((match) => match[0]).join(" ");
|
|
96
|
+
if (consumed.replace(/\s+/g, " ").trim() !== attr.replace(/\s+/g, " ").trim()) {
|
|
97
|
+
errors.push({
|
|
98
|
+
file,
|
|
99
|
+
line,
|
|
100
|
+
message: `Invalid callout attributes '{${attr}}'`,
|
|
101
|
+
suggestion: 'Use key="value" attributes: title, tone, or collapse',
|
|
102
|
+
severity: "error",
|
|
103
|
+
});
|
|
104
|
+
return errors;
|
|
105
|
+
}
|
|
106
|
+
const values = new Map(tokens.map((match) => [match[1], match[2]]));
|
|
107
|
+
const allowed = new Set(["title", "tone", "collapse"]);
|
|
108
|
+
for (const key of values.keys()) {
|
|
109
|
+
if (!allowed.has(key)) {
|
|
110
|
+
errors.push({
|
|
111
|
+
file,
|
|
112
|
+
line,
|
|
113
|
+
message: `Unrecognized callout attribute '${key}'`,
|
|
114
|
+
suggestion: "Use title, tone, or collapse",
|
|
115
|
+
severity: "warning",
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const tone = values.get("tone");
|
|
120
|
+
if (tone &&
|
|
121
|
+
!["neutral", "blue", "green", "amber", "red", "purple"].includes(tone)) {
|
|
122
|
+
errors.push({
|
|
123
|
+
file,
|
|
124
|
+
line,
|
|
125
|
+
message: `Unrecognized callout tone '${tone}'`,
|
|
126
|
+
suggestion: "Use neutral, blue, green, amber, red, or purple",
|
|
127
|
+
severity: "error",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
const collapse = values.get("collapse");
|
|
131
|
+
if (collapse && collapse !== "closed" && collapse !== "open") {
|
|
132
|
+
errors.push({
|
|
133
|
+
file,
|
|
134
|
+
line,
|
|
135
|
+
message: `Invalid callout collapse value '${collapse}'`,
|
|
136
|
+
suggestion: 'Use collapse="closed", collapse="open", or omit collapse',
|
|
137
|
+
severity: "error",
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return errors;
|
|
141
|
+
}
|
|
142
|
+
if (attr === "") {
|
|
73
143
|
errors.push({
|
|
74
144
|
file,
|
|
75
145
|
line,
|
|
76
146
|
message: `Directive '${name}' has an empty attribute '{}'`,
|
|
77
|
-
suggestion:
|
|
78
|
-
severity:
|
|
147
|
+
suggestion: "Remove the empty braces, or use {open} to make the directive open by default",
|
|
148
|
+
severity: "warning",
|
|
79
149
|
});
|
|
80
150
|
return errors;
|
|
81
151
|
}
|
|
82
|
-
if (attr ===
|
|
152
|
+
if (attr === "open") {
|
|
83
153
|
// Valid attribute — but check if this directive supports it
|
|
84
154
|
if (!info.open) {
|
|
85
155
|
errors.push({
|
|
@@ -87,7 +157,7 @@ function checkAttribute(name, attr, file, line) {
|
|
|
87
157
|
line,
|
|
88
158
|
message: `Directive '${name}' does not support {open}`,
|
|
89
159
|
suggestion: `Remove {open} — '${name}' does not support the open attribute`,
|
|
90
|
-
severity:
|
|
160
|
+
severity: "warning",
|
|
91
161
|
});
|
|
92
162
|
}
|
|
93
163
|
}
|
|
@@ -97,7 +167,7 @@ function checkAttribute(name, attr, file, line) {
|
|
|
97
167
|
line,
|
|
98
168
|
message: `Possible attribute typo '{${attr}}' on directive '${name}'`,
|
|
99
169
|
suggestion: `Did you mean {open}?`,
|
|
100
|
-
severity:
|
|
170
|
+
severity: "warning",
|
|
101
171
|
});
|
|
102
172
|
}
|
|
103
173
|
else {
|
|
@@ -106,8 +176,10 @@ function checkAttribute(name, attr, file, line) {
|
|
|
106
176
|
file,
|
|
107
177
|
line,
|
|
108
178
|
message: `Unrecognized attribute '{${attr}}' on directive '${name}'`,
|
|
109
|
-
suggestion: info.open
|
|
110
|
-
|
|
179
|
+
suggestion: info.open
|
|
180
|
+
? `The only supported attribute is {open}`
|
|
181
|
+
: `'${name}' does not support any attributes`,
|
|
182
|
+
severity: "warning",
|
|
111
183
|
});
|
|
112
184
|
}
|
|
113
185
|
return errors;
|
|
@@ -119,7 +191,7 @@ function checkAttribute(name, attr, file, line) {
|
|
|
119
191
|
*/
|
|
120
192
|
export function validateDirectives(body, file, bodyStartLine) {
|
|
121
193
|
const errors = [];
|
|
122
|
-
const lines = body.split(
|
|
194
|
+
const lines = body.split("\n");
|
|
123
195
|
const stack = [];
|
|
124
196
|
let inCodeBlock = false;
|
|
125
197
|
for (let i = 0; i < lines.length; i++) {
|
|
@@ -135,7 +207,7 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
135
207
|
// Check container close with attribute (error: {open} on closing marker)
|
|
136
208
|
const closeAttrMatch = line.match(CONTAINER_CLOSE_ATTR);
|
|
137
209
|
if (closeAttrMatch) {
|
|
138
|
-
const attrOnClose = closeAttrMatch[
|
|
210
|
+
const attrOnClose = closeAttrMatch[2];
|
|
139
211
|
const top = stack.pop();
|
|
140
212
|
if (top) {
|
|
141
213
|
errors.push({
|
|
@@ -143,7 +215,7 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
143
215
|
line: absLine,
|
|
144
216
|
message: `Attribute {${attrOnClose}} on closing ':::' marker has no effect`,
|
|
145
217
|
suggestion: `Move to opening marker: :::${top.name}{${attrOnClose}}`,
|
|
146
|
-
severity:
|
|
218
|
+
severity: "error",
|
|
147
219
|
});
|
|
148
220
|
// Check empty container
|
|
149
221
|
if (!top.hasContent) {
|
|
@@ -151,8 +223,8 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
151
223
|
file,
|
|
152
224
|
line: top.line,
|
|
153
225
|
message: `Empty container directive ':::${top.name}' has no content`,
|
|
154
|
-
suggestion:
|
|
155
|
-
severity:
|
|
226
|
+
suggestion: "Add content between the opening and closing markers",
|
|
227
|
+
severity: "warning",
|
|
156
228
|
});
|
|
157
229
|
}
|
|
158
230
|
}
|
|
@@ -166,8 +238,8 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
166
238
|
file,
|
|
167
239
|
line: top.line,
|
|
168
240
|
message: `Empty container directive ':::${top.name}' has no content`,
|
|
169
|
-
suggestion:
|
|
170
|
-
severity:
|
|
241
|
+
suggestion: "Add content between the opening and closing markers",
|
|
242
|
+
severity: "warning",
|
|
171
243
|
});
|
|
172
244
|
}
|
|
173
245
|
continue;
|
|
@@ -175,15 +247,16 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
175
247
|
// Check container open
|
|
176
248
|
const openMatch = line.match(CONTAINER_OPEN);
|
|
177
249
|
if (openMatch) {
|
|
178
|
-
const
|
|
179
|
-
const
|
|
250
|
+
const fenceLength = openMatch[1].length;
|
|
251
|
+
const name = openMatch[2];
|
|
252
|
+
const attr = openMatch[3];
|
|
180
253
|
if (UNSUPPORTED_NAMES.has(name)) {
|
|
181
254
|
errors.push({
|
|
182
255
|
file,
|
|
183
256
|
line: absLine,
|
|
184
257
|
message: `Unsupported directive ':::${name}'`,
|
|
185
|
-
suggestion: `Supported container directives: ${
|
|
186
|
-
severity:
|
|
258
|
+
suggestion: `Supported container directives: ${supportedDirectiveNames("container")}`,
|
|
259
|
+
severity: "error",
|
|
187
260
|
});
|
|
188
261
|
}
|
|
189
262
|
else if (SUPPORTED_DIRECTIVES[name]) {
|
|
@@ -193,7 +266,7 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
193
266
|
line: absLine,
|
|
194
267
|
message: `Directive '${name}' does not support the container ':::' form`,
|
|
195
268
|
suggestion: `Use the leaf form '::${name}[text]' or inline form ':${name}[text]' instead`,
|
|
196
|
-
severity:
|
|
269
|
+
severity: "error",
|
|
197
270
|
});
|
|
198
271
|
}
|
|
199
272
|
errors.push(...checkAttribute(name, attr, file, absLine));
|
|
@@ -205,12 +278,12 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
205
278
|
file,
|
|
206
279
|
line: absLine,
|
|
207
280
|
message: `Unknown directive ':::${name}' — did you mean ':::${nearMiss}'?`,
|
|
208
|
-
suggestion: `Supported container directives: ${
|
|
209
|
-
severity:
|
|
281
|
+
suggestion: `Supported container directives: ${supportedDirectiveNames("container")}`,
|
|
282
|
+
severity: "error",
|
|
210
283
|
});
|
|
211
284
|
}
|
|
212
285
|
}
|
|
213
|
-
stack.push({ name, line: absLine, hasContent: false });
|
|
286
|
+
stack.push({ name, line: absLine, hasContent: false, fenceLength });
|
|
214
287
|
continue;
|
|
215
288
|
}
|
|
216
289
|
// Check leaf directive (::name[...)
|
|
@@ -218,13 +291,15 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
218
291
|
const leafUnclosedMatch = line.match(LEAF_UNCLOSED);
|
|
219
292
|
if (leafUnclosedMatch) {
|
|
220
293
|
const name = leafUnclosedMatch[1];
|
|
221
|
-
if (SUPPORTED_DIRECTIVES[name] ||
|
|
294
|
+
if (SUPPORTED_DIRECTIVES[name] ||
|
|
295
|
+
UNSUPPORTED_NAMES.has(name) ||
|
|
296
|
+
findNearMissDirective(name)) {
|
|
222
297
|
errors.push({
|
|
223
298
|
file,
|
|
224
299
|
line: absLine,
|
|
225
300
|
message: `Unclosed bracket in leaf directive '::${name}[' — missing closing ']'`,
|
|
226
301
|
suggestion: `Add a closing bracket: ::${name}[content]`,
|
|
227
|
-
severity:
|
|
302
|
+
severity: "error",
|
|
228
303
|
});
|
|
229
304
|
if (stack.length > 0) {
|
|
230
305
|
stack[stack.length - 1].hasContent = true;
|
|
@@ -245,8 +320,8 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
245
320
|
file,
|
|
246
321
|
line: absLine,
|
|
247
322
|
message: `Unsupported directive '::${name}'`,
|
|
248
|
-
suggestion: `Supported leaf directives: ${
|
|
249
|
-
severity:
|
|
323
|
+
suggestion: `Supported leaf directives: ${supportedDirectiveNames("leaf")}`,
|
|
324
|
+
severity: "error",
|
|
250
325
|
});
|
|
251
326
|
}
|
|
252
327
|
else if (SUPPORTED_DIRECTIVES[name]) {
|
|
@@ -256,7 +331,7 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
256
331
|
line: absLine,
|
|
257
332
|
message: `Directive '${name}' does not support the leaf '::' form`,
|
|
258
333
|
suggestion: `Use the container form ':::${name}' or inline form ':${name}[text]' instead`,
|
|
259
|
-
severity:
|
|
334
|
+
severity: "warning",
|
|
260
335
|
});
|
|
261
336
|
}
|
|
262
337
|
errors.push(...checkAttribute(name, attr, file, absLine));
|
|
@@ -268,8 +343,8 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
268
343
|
file,
|
|
269
344
|
line: absLine,
|
|
270
345
|
message: `Unknown directive '::${name}' — did you mean '::${nearMiss}'?`,
|
|
271
|
-
suggestion: `Supported leaf directives: ${
|
|
272
|
-
severity:
|
|
346
|
+
suggestion: `Supported leaf directives: ${supportedDirectiveNames("leaf")}`,
|
|
347
|
+
severity: "error",
|
|
273
348
|
});
|
|
274
349
|
}
|
|
275
350
|
}
|
|
@@ -280,20 +355,22 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
280
355
|
continue;
|
|
281
356
|
}
|
|
282
357
|
// Check for unclosed text directive brackets (:name[ without ])
|
|
283
|
-
const textUnclosedMatches = line.matchAll(new RegExp(TEXT_UNCLOSED,
|
|
358
|
+
const textUnclosedMatches = line.matchAll(new RegExp(TEXT_UNCLOSED, "g"));
|
|
284
359
|
for (const m of textUnclosedMatches) {
|
|
285
360
|
const name = m[1];
|
|
286
361
|
const matchIndex = m.index;
|
|
287
|
-
const beforeMatch = line.substring(0, matchIndex + (m[0].startsWith(
|
|
362
|
+
const beforeMatch = line.substring(0, matchIndex + (m[0].startsWith(":") ? 0 : 1));
|
|
288
363
|
if (/https?$|ftp$|mailto$|tel$/.test(beforeMatch))
|
|
289
364
|
continue;
|
|
290
|
-
if (SUPPORTED_DIRECTIVES[name] ||
|
|
365
|
+
if (SUPPORTED_DIRECTIVES[name] ||
|
|
366
|
+
UNSUPPORTED_NAMES.has(name) ||
|
|
367
|
+
findNearMissDirective(name)) {
|
|
291
368
|
errors.push({
|
|
292
369
|
file,
|
|
293
370
|
line: absLine,
|
|
294
371
|
message: `Unclosed bracket in text directive ':${name}[' — missing closing ']'`,
|
|
295
372
|
suggestion: `Add a closing bracket: :${name}[content]`,
|
|
296
|
-
severity:
|
|
373
|
+
severity: "error",
|
|
297
374
|
});
|
|
298
375
|
}
|
|
299
376
|
}
|
|
@@ -303,7 +380,7 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
303
380
|
const seenTextDirectives = new Set(); // track by match index to avoid duplicates
|
|
304
381
|
// Check POST first so :name[text]{attr} captures the attribute before PRE sees it without attr
|
|
305
382
|
for (const pattern of [TEXT_DIRECTIVE_POST, TEXT_DIRECTIVE_PRE]) {
|
|
306
|
-
const textMatches = line.matchAll(new RegExp(pattern,
|
|
383
|
+
const textMatches = line.matchAll(new RegExp(pattern, "g"));
|
|
307
384
|
for (const textMatch of textMatches) {
|
|
308
385
|
const matchIndex = textMatch.index;
|
|
309
386
|
if (seenTextDirectives.has(matchIndex))
|
|
@@ -312,7 +389,7 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
312
389
|
const name = textMatch[1];
|
|
313
390
|
const attr = textMatch[2];
|
|
314
391
|
// Skip URL-like patterns (http:, https:, ftp:, etc.)
|
|
315
|
-
const beforeMatch = line.substring(0, matchIndex + (textMatch[0].startsWith(
|
|
392
|
+
const beforeMatch = line.substring(0, matchIndex + (textMatch[0].startsWith(":") ? 0 : 1));
|
|
316
393
|
if (/https?$|ftp$|mailto$|tel$/.test(beforeMatch))
|
|
317
394
|
continue;
|
|
318
395
|
if (UNSUPPORTED_NAMES.has(name)) {
|
|
@@ -320,8 +397,8 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
320
397
|
file,
|
|
321
398
|
line: absLine,
|
|
322
399
|
message: `Unsupported directive ':${name}'`,
|
|
323
|
-
suggestion: `Supported text directives: ${
|
|
324
|
-
severity:
|
|
400
|
+
suggestion: `Supported text directives: ${supportedDirectiveNames("text")}`,
|
|
401
|
+
severity: "error",
|
|
325
402
|
});
|
|
326
403
|
}
|
|
327
404
|
else if (SUPPORTED_DIRECTIVES[name]) {
|
|
@@ -334,8 +411,8 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
334
411
|
file,
|
|
335
412
|
line: absLine,
|
|
336
413
|
message: `Unknown directive ':${name}' — did you mean ':${nearMiss}'?`,
|
|
337
|
-
suggestion: `Supported text directives: ${
|
|
338
|
-
severity:
|
|
414
|
+
suggestion: `Supported text directives: ${supportedDirectiveNames("text")}`,
|
|
415
|
+
severity: "error",
|
|
339
416
|
});
|
|
340
417
|
}
|
|
341
418
|
}
|
|
@@ -346,7 +423,7 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
346
423
|
}
|
|
347
424
|
}
|
|
348
425
|
// Mark content in parent container (non-blank, non-directive line)
|
|
349
|
-
if (stack.length > 0 && line.trim() !==
|
|
426
|
+
if (stack.length > 0 && line.trim() !== "") {
|
|
350
427
|
stack[stack.length - 1].hasContent = true;
|
|
351
428
|
}
|
|
352
429
|
}
|
|
@@ -356,18 +433,18 @@ export function validateDirectives(body, file, bodyStartLine) {
|
|
|
356
433
|
file,
|
|
357
434
|
line: entry.line,
|
|
358
435
|
message: `Unclosed container directive ':::${entry.name}'`,
|
|
359
|
-
suggestion:
|
|
360
|
-
severity:
|
|
436
|
+
suggestion: "Add a closing ::: marker",
|
|
437
|
+
severity: "error",
|
|
361
438
|
});
|
|
362
439
|
}
|
|
363
440
|
return errors;
|
|
364
441
|
}
|
|
365
442
|
/**
|
|
366
|
-
* Lightweight check for directives in
|
|
367
|
-
*
|
|
443
|
+
* Lightweight check for article-only directives in lens-authored text segments.
|
|
444
|
+
* `callout` is intentionally supported by both renderers.
|
|
368
445
|
*/
|
|
369
446
|
export function detectDirectivesInNonArticle(content, file, line) {
|
|
370
|
-
const lines = content.split(
|
|
447
|
+
const lines = content.split("\n");
|
|
371
448
|
let inCodeBlock = false;
|
|
372
449
|
for (const l of lines) {
|
|
373
450
|
if (CODE_FENCE.test(l)) {
|
|
@@ -379,46 +456,55 @@ export function detectDirectivesInNonArticle(content, file, line) {
|
|
|
379
456
|
// Container directive
|
|
380
457
|
if (CONTAINER_OPEN.test(l)) {
|
|
381
458
|
const match = l.match(CONTAINER_OPEN);
|
|
382
|
-
|
|
383
|
-
|
|
459
|
+
const name = match[2];
|
|
460
|
+
if (name === "callout")
|
|
461
|
+
continue;
|
|
462
|
+
if (ALL_DIRECTIVE_NAMES.has(name)) {
|
|
463
|
+
return [
|
|
464
|
+
{
|
|
384
465
|
file,
|
|
385
466
|
line,
|
|
386
|
-
message: `Directive ':::${
|
|
387
|
-
suggestion:
|
|
388
|
-
severity:
|
|
389
|
-
}
|
|
467
|
+
message: `Directive ':::${name}' found in non-article content — directives only render in article files`,
|
|
468
|
+
suggestion: "Move this content to an article file (articles/*.md) or remove the directive syntax",
|
|
469
|
+
severity: "warning",
|
|
470
|
+
},
|
|
471
|
+
];
|
|
390
472
|
}
|
|
391
473
|
}
|
|
392
474
|
// Leaf directive
|
|
393
475
|
const leafMatch = l.match(LEAF_DIRECTIVE_PRE);
|
|
394
476
|
if (leafMatch && ALL_DIRECTIVE_NAMES.has(leafMatch[1])) {
|
|
395
|
-
return [
|
|
477
|
+
return [
|
|
478
|
+
{
|
|
396
479
|
file,
|
|
397
480
|
line,
|
|
398
481
|
message: `Directive '::${leafMatch[1]}' found in non-article content — directives only render in article files`,
|
|
399
|
-
suggestion:
|
|
400
|
-
severity:
|
|
401
|
-
}
|
|
482
|
+
suggestion: "Move this content to an article file (articles/*.md) or remove the directive syntax",
|
|
483
|
+
severity: "warning",
|
|
484
|
+
},
|
|
485
|
+
];
|
|
402
486
|
}
|
|
403
487
|
// Text/inline directive — scan for :name[ patterns (both pre and post attribute forms)
|
|
404
488
|
for (const pattern of [TEXT_DIRECTIVE_PRE, TEXT_DIRECTIVE_POST]) {
|
|
405
|
-
const textRegex = new RegExp(pattern,
|
|
489
|
+
const textRegex = new RegExp(pattern, "g");
|
|
406
490
|
let textMatch;
|
|
407
491
|
while ((textMatch = textRegex.exec(l)) !== null) {
|
|
408
492
|
const name = textMatch[1];
|
|
409
493
|
// Skip URL-like patterns
|
|
410
494
|
const matchIndex = textMatch.index;
|
|
411
|
-
const beforeMatch = l.substring(0, matchIndex + (textMatch[0].startsWith(
|
|
495
|
+
const beforeMatch = l.substring(0, matchIndex + (textMatch[0].startsWith(":") ? 0 : 1));
|
|
412
496
|
if (/https?$|ftp$|mailto$|tel$/.test(beforeMatch))
|
|
413
497
|
continue;
|
|
414
498
|
if (ALL_DIRECTIVE_NAMES.has(name)) {
|
|
415
|
-
return [
|
|
499
|
+
return [
|
|
500
|
+
{
|
|
416
501
|
file,
|
|
417
502
|
line,
|
|
418
503
|
message: `Directive ':${name}' found in non-article content — directives only render in article files`,
|
|
419
|
-
suggestion:
|
|
420
|
-
severity:
|
|
421
|
-
}
|
|
504
|
+
suggestion: "Move this content to an article file (articles/*.md) or remove the directive syntax",
|
|
505
|
+
severity: "warning",
|
|
506
|
+
},
|
|
507
|
+
];
|
|
422
508
|
}
|
|
423
509
|
}
|
|
424
510
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directives.js","sourceRoot":"","sources":["../../src/validator/directives.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"directives.js","sourceRoot":"","sources":["../../src/validator/directives.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED