lens-content-processor 0.34.0 → 0.35.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/authoring-markup.d.ts +36 -0
- package/dist/authoring-markup.js +103 -0
- package/dist/authoring-markup.js.map +1 -1
- package/dist/bundler/article.d.ts +69 -9
- package/dist/bundler/article.js +159 -58
- package/dist/bundler/article.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +6 -2
- package/dist/cli.js.map +1 -1
- package/dist/content-schema.js +5 -0
- package/dist/content-schema.js.map +1 -1
- package/dist/flattener/index.js +381 -252
- package/dist/flattener/index.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/parser/article.js +42 -32
- package/dist/parser/article.js.map +1 -1
- package/dist/parser/course.d.ts +0 -10
- package/dist/parser/course.js +19 -4
- package/dist/parser/course.js.map +1 -1
- package/dist/parser/learning-outcome.js +20 -4
- package/dist/parser/learning-outcome.js.map +1 -1
- package/dist/parser/lens.d.ts +1 -6
- package/dist/parser/lens.js +64 -18
- package/dist/parser/lens.js.map +1 -1
- package/dist/parser/module.js +28 -17
- package/dist/parser/module.js.map +1 -1
- package/dist/parser/sections.d.ts +2 -1
- package/dist/parser/sections.js +5 -3
- package/dist/parser/sections.js.map +1 -1
- package/dist/parser/survey.js +19 -4
- package/dist/parser/survey.js.map +1 -1
- package/dist/source-location.d.ts +2 -0
- package/dist/source-location.js +12 -0
- package/dist/source-location.js.map +1 -0
- package/dist/validator/article-review-provenance.d.ts +5 -0
- package/dist/validator/article-review-provenance.js +57 -0
- package/dist/validator/article-review-provenance.js.map +1 -0
- package/dist/validator/article-structure.d.ts +8 -0
- package/dist/validator/article-structure.js +660 -0
- package/dist/validator/article-structure.js.map +1 -0
- package/dist/validator/directives.js +20 -0
- package/dist/validator/directives.js.map +1 -1
- package/dist/validator/emphasis.js +104 -1
- package/dist/validator/emphasis.js.map +1 -1
- package/dist/validator/markdown-parse.d.ts +3 -0
- package/dist/validator/markdown-parse.js +22 -0
- package/dist/validator/markdown-parse.js.map +1 -0
- package/dist/validator/math.js +66 -9
- package/dist/validator/math.js.map +1 -1
- package/dist/validator/output-integrity.js +16 -16
- package/dist/validator/output-integrity.js.map +1 -1
- package/dist/validator/same-lens-links.d.ts +4 -0
- package/dist/validator/same-lens-links.js +297 -0
- package/dist/validator/same-lens-links.js.map +1 -0
- package/dist/validator/suppressions.d.ts +42 -0
- package/dist/validator/suppressions.js +97 -0
- package/dist/validator/suppressions.js.map +1 -0
- package/dist/validator/video-imports.d.ts +35 -0
- package/dist/validator/video-imports.js +183 -0
- package/dist/validator/video-imports.js.map +1 -0
- package/package.json +9 -1
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
* Handles both inline (%% ... %% on same line) and block (multiline) comments.
|
|
4
4
|
*/
|
|
5
5
|
export declare function stripObsidianComments(content: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Reject authoring markup while preserving source line numbers for validators.
|
|
8
|
+
* Publishing deliberately uses stripAuthoringMarkup() instead.
|
|
9
|
+
*
|
|
10
|
+
* Both strips resolve CriticMarkup first and %% comments second, so they
|
|
11
|
+
* normally produce the same document structure and differ only in whitespace
|
|
12
|
+
* padding. The parsers depend on that: they parse both views and graft the
|
|
13
|
+
* published strings onto the line-accurate validation parse
|
|
14
|
+
* (usePublishedStrings), falling back to the publishing parse when the shapes
|
|
15
|
+
* still differ. A %% comment that opens inside one CriticMarkup span and closes
|
|
16
|
+
* inside another (live-editor suggestions do this) would otherwise swallow
|
|
17
|
+
* whole sections in one view and not the other.
|
|
18
|
+
*/
|
|
19
|
+
export declare function stripAuthoringMarkupForValidation(content: string): string;
|
|
6
20
|
/**
|
|
7
21
|
* Strip CriticMarkup from content using reject-all-changes behavior. Each
|
|
8
22
|
* form's regex and publish replacement are defined once in CRITIC_MARKUP_FORMS
|
|
@@ -14,3 +28,25 @@ export declare function stripCriticMarkup(content: string): string;
|
|
|
14
28
|
* Call before parsing or publishing learner-facing content.
|
|
15
29
|
*/
|
|
16
30
|
export declare function stripAuthoringMarkup(content: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* True when a validation parse and a publishing parse of the same file have
|
|
33
|
+
* the same structure: equal array lengths, equal `type` discriminators, and a
|
|
34
|
+
* string on one side wherever the other side has one. Only strings are
|
|
35
|
+
* grafted across, so other scalars (line numbers, booleans) may differ.
|
|
36
|
+
*/
|
|
37
|
+
export declare function haveSameShape(validationValue: unknown, publishedValue: unknown): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Copy learner-facing strings from a publishing parse onto the equivalent
|
|
40
|
+
* validation parse. Objects (and their non-enumerable source provenance) stay
|
|
41
|
+
* intact, as do validation-derived line numbers and other scalar metadata.
|
|
42
|
+
* Only strings are grafted: a boolean or number that differs between the two
|
|
43
|
+
* views (a `%%` comment glued to the front of an `optional::` line, say) keeps
|
|
44
|
+
* the validation parse's value, as it did before the shape check existed.
|
|
45
|
+
*
|
|
46
|
+
* Returns false, leaving `validationValue` untouched, when the two parses do
|
|
47
|
+
* not have the same shape (haveSameShape). Grafting across different shapes
|
|
48
|
+
* splices strings between unrelated segments — one segment's `type` onto
|
|
49
|
+
* another — and hands the flattener segments missing the fields their type
|
|
50
|
+
* requires. Callers fall back to the publishing parse instead.
|
|
51
|
+
*/
|
|
52
|
+
export declare function usePublishedStrings<T>(validationValue: T, publishedValue: T): boolean;
|
package/dist/authoring-markup.js
CHANGED
|
@@ -6,6 +6,38 @@ import { CRITIC_MARKUP_FORMS } from "./criticmarkup-forms.js";
|
|
|
6
6
|
export function stripObsidianComments(content) {
|
|
7
7
|
return content.replace(/%%.*?%%/gs, "");
|
|
8
8
|
}
|
|
9
|
+
function preserveNewlines(match, replacement) {
|
|
10
|
+
const missing = (match.match(/\n/g)?.length ?? 0) - (replacement.match(/\n/g)?.length ?? 0);
|
|
11
|
+
return replacement + "\n".repeat(Math.max(0, missing));
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Reject authoring markup while preserving source line numbers for validators.
|
|
15
|
+
* Publishing deliberately uses stripAuthoringMarkup() instead.
|
|
16
|
+
*
|
|
17
|
+
* Both strips resolve CriticMarkup first and %% comments second, so they
|
|
18
|
+
* normally produce the same document structure and differ only in whitespace
|
|
19
|
+
* padding. The parsers depend on that: they parse both views and graft the
|
|
20
|
+
* published strings onto the line-accurate validation parse
|
|
21
|
+
* (usePublishedStrings), falling back to the publishing parse when the shapes
|
|
22
|
+
* still differ. A %% comment that opens inside one CriticMarkup span and closes
|
|
23
|
+
* inside another (live-editor suggestions do this) would otherwise swallow
|
|
24
|
+
* whole sections in one view and not the other.
|
|
25
|
+
*/
|
|
26
|
+
export function stripAuthoringMarkupForValidation(content) {
|
|
27
|
+
let result = content;
|
|
28
|
+
for (const form of CRITIC_MARKUP_FORMS) {
|
|
29
|
+
result = result.replace(form.re, (...args) => {
|
|
30
|
+
const match = String(args[0]);
|
|
31
|
+
const kept = form.rejected === "$1" ? String(args[1] ?? "") : "";
|
|
32
|
+
return preserveNewlines(match, kept);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
result = result.replace(/%%.*?%%/gs, (match) => match.replace(/[^\n]/g, " "));
|
|
36
|
+
return result
|
|
37
|
+
.split("\n")
|
|
38
|
+
.map((line) => line.trimEnd())
|
|
39
|
+
.join("\n");
|
|
40
|
+
}
|
|
9
41
|
/**
|
|
10
42
|
* Strip CriticMarkup from content using reject-all-changes behavior. Each
|
|
11
43
|
* form's regex and publish replacement are defined once in CRITIC_MARKUP_FORMS
|
|
@@ -26,4 +58,75 @@ export function stripAuthoringMarkup(content) {
|
|
|
26
58
|
.map((line) => line.trimEnd())
|
|
27
59
|
.join("\n");
|
|
28
60
|
}
|
|
61
|
+
function isRecord(value) {
|
|
62
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* True when a validation parse and a publishing parse of the same file have
|
|
66
|
+
* the same structure: equal array lengths, equal `type` discriminators, and a
|
|
67
|
+
* string on one side wherever the other side has one. Only strings are
|
|
68
|
+
* grafted across, so other scalars (line numbers, booleans) may differ.
|
|
69
|
+
*/
|
|
70
|
+
export function haveSameShape(validationValue, publishedValue) {
|
|
71
|
+
if (Array.isArray(validationValue) || Array.isArray(publishedValue)) {
|
|
72
|
+
return (Array.isArray(validationValue) &&
|
|
73
|
+
Array.isArray(publishedValue) &&
|
|
74
|
+
validationValue.length === publishedValue.length &&
|
|
75
|
+
validationValue.every((item, index) => haveSameShape(item, publishedValue[index])));
|
|
76
|
+
}
|
|
77
|
+
if (isRecord(validationValue) || isRecord(publishedValue)) {
|
|
78
|
+
if (!isRecord(validationValue) || !isRecord(publishedValue))
|
|
79
|
+
return false;
|
|
80
|
+
if (typeof validationValue.type === "string" &&
|
|
81
|
+
typeof publishedValue.type === "string" &&
|
|
82
|
+
validationValue.type !== publishedValue.type) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return Object.keys(validationValue).every((key) => !(key in publishedValue) ||
|
|
86
|
+
haveSameShape(validationValue[key], publishedValue[key]));
|
|
87
|
+
}
|
|
88
|
+
return ((typeof validationValue === "string") ===
|
|
89
|
+
(typeof publishedValue === "string"));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Copy learner-facing strings from a publishing parse onto the equivalent
|
|
93
|
+
* validation parse. Objects (and their non-enumerable source provenance) stay
|
|
94
|
+
* intact, as do validation-derived line numbers and other scalar metadata.
|
|
95
|
+
* Only strings are grafted: a boolean or number that differs between the two
|
|
96
|
+
* views (a `%%` comment glued to the front of an `optional::` line, say) keeps
|
|
97
|
+
* the validation parse's value, as it did before the shape check existed.
|
|
98
|
+
*
|
|
99
|
+
* Returns false, leaving `validationValue` untouched, when the two parses do
|
|
100
|
+
* not have the same shape (haveSameShape). Grafting across different shapes
|
|
101
|
+
* splices strings between unrelated segments — one segment's `type` onto
|
|
102
|
+
* another — and hands the flattener segments missing the fields their type
|
|
103
|
+
* requires. Callers fall back to the publishing parse instead.
|
|
104
|
+
*/
|
|
105
|
+
export function usePublishedStrings(validationValue, publishedValue) {
|
|
106
|
+
if (!haveSameShape(validationValue, publishedValue))
|
|
107
|
+
return false;
|
|
108
|
+
overlayStrings(validationValue, publishedValue);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
function overlayStrings(validationValue, publishedValue) {
|
|
112
|
+
if (typeof validationValue === "string") {
|
|
113
|
+
return typeof publishedValue === "string"
|
|
114
|
+
? publishedValue
|
|
115
|
+
: validationValue;
|
|
116
|
+
}
|
|
117
|
+
if (Array.isArray(validationValue) && Array.isArray(publishedValue)) {
|
|
118
|
+
for (let index = 0; index < validationValue.length; index += 1) {
|
|
119
|
+
validationValue[index] = overlayStrings(validationValue[index], publishedValue[index]);
|
|
120
|
+
}
|
|
121
|
+
return validationValue;
|
|
122
|
+
}
|
|
123
|
+
if (isRecord(validationValue) && isRecord(publishedValue)) {
|
|
124
|
+
for (const key of Object.keys(validationValue)) {
|
|
125
|
+
if (key in publishedValue) {
|
|
126
|
+
validationValue[key] = overlayStrings(validationValue[key], publishedValue[key]);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return validationValue;
|
|
131
|
+
}
|
|
29
132
|
//# sourceMappingURL=authoring-markup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authoring-markup.js","sourceRoot":"","sources":["../src/authoring-markup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,mBAAmB,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpD,OAAO,CACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,0DAA0D;IAC1D,OAAO,QAAQ;SACZ,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"authoring-markup.js","sourceRoot":"","sources":["../src/authoring-markup.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,21 +5,74 @@ export interface ArticleExcerptResult {
|
|
|
5
5
|
endIndex?: number;
|
|
6
6
|
error?: ContentError;
|
|
7
7
|
}
|
|
8
|
-
export interface
|
|
8
|
+
export interface ExcerptInput {
|
|
9
|
+
from?: string;
|
|
10
|
+
to?: string;
|
|
11
|
+
}
|
|
12
|
+
/** An inline `::video[[...]]` import found in an article body. */
|
|
13
|
+
export interface ArticleVideoImport {
|
|
14
|
+
/** Character offset in the cleaned body where the video sits. */
|
|
15
|
+
offset: number;
|
|
16
|
+
/** Wikilink target, e.g. "../video_transcripts/name". */
|
|
17
|
+
target: string;
|
|
18
|
+
from?: string;
|
|
19
|
+
to?: string;
|
|
20
|
+
/** The trimmed source line, so callers can locate it in the raw file. */
|
|
21
|
+
rawLine: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ParsedArticleBody {
|
|
24
|
+
/** Publishable body with all ::video import lines removed. */
|
|
25
|
+
body: string;
|
|
26
|
+
/** Imports in document order, with offsets into the cleaned body. */
|
|
27
|
+
videoImports: ArticleVideoImport[];
|
|
28
|
+
}
|
|
29
|
+
/** A piece of an excerpt that contains inline videos. */
|
|
30
|
+
export type ArticlePart = {
|
|
31
|
+
kind: 'prose';
|
|
9
32
|
content: string;
|
|
33
|
+
/** Prose continues contiguously after the following video part. */
|
|
34
|
+
contiguousWithNext?: boolean;
|
|
35
|
+
/** Prose contiguously continues the part before the preceding video. */
|
|
36
|
+
contiguousWithPrev?: boolean;
|
|
37
|
+
} | {
|
|
38
|
+
kind: 'videoRef';
|
|
39
|
+
target: string;
|
|
40
|
+
from?: string;
|
|
41
|
+
to?: string;
|
|
42
|
+
rawLine: string;
|
|
43
|
+
};
|
|
44
|
+
/** One lens excerpt of an article, fully resolved against the source body. */
|
|
45
|
+
export interface ResolvedExcerpt {
|
|
46
|
+
/** Full excerpt content (import lines removed). Absent on error. */
|
|
47
|
+
content?: string;
|
|
10
48
|
collapsed_before?: string;
|
|
11
49
|
collapsed_after?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Present when the excerpt contains inline videos: the excerpt split into
|
|
52
|
+
* ordered prose/videoRef parts. Prose parts carry only content and
|
|
53
|
+
* contiguity; collapsed_* stay on this excerpt (they belong to its outer
|
|
54
|
+
* boundaries, never to a video seam).
|
|
55
|
+
*/
|
|
56
|
+
parts?: ArticlePart[];
|
|
12
57
|
error?: ContentError;
|
|
13
58
|
}
|
|
14
|
-
export interface ExcerptInput {
|
|
15
|
-
from?: string;
|
|
16
|
-
to?: string;
|
|
17
|
-
}
|
|
18
59
|
/**
|
|
19
60
|
* Strip frontmatter from article content.
|
|
20
61
|
* Frontmatter is enclosed in --- markers at the start of the file.
|
|
21
62
|
*/
|
|
22
63
|
export declare function stripFrontmatter(article: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Produce the renderable body of an article: frontmatter and authoring markup
|
|
66
|
+
* stripped, and every valid own-line `::video[[...]]` import removed and
|
|
67
|
+
* recorded with its character offset into the cleaned body. All downstream
|
|
68
|
+
* work (anchor search, excerpt slicing, collapsed text, word counts) uses
|
|
69
|
+
* this cleaned body, so import lines can never leak into reader-visible text
|
|
70
|
+
* and anchors can never collide with directive syntax.
|
|
71
|
+
*
|
|
72
|
+
* Malformed import lines are left in place as inert prose — parse-time
|
|
73
|
+
* validation (validator/video-imports.ts) reports them.
|
|
74
|
+
*/
|
|
75
|
+
export declare function parseArticleBody(article: string): ParsedArticleBody;
|
|
23
76
|
/**
|
|
24
77
|
* Extract content from an article between two anchor texts.
|
|
25
78
|
*
|
|
@@ -36,11 +89,18 @@ export declare function stripFrontmatter(article: string): string;
|
|
|
36
89
|
*/
|
|
37
90
|
export declare function extractArticleExcerpt(article: string, fromAnchor: string | undefined, toAnchor: string | undefined, file: string): ArticleExcerptResult;
|
|
38
91
|
/**
|
|
39
|
-
*
|
|
92
|
+
* Resolve every excerpt a lens takes from one article source, in one pass:
|
|
93
|
+
* extract each excerpt, compute the collapsed (elided) text at its outer
|
|
94
|
+
* boundaries, and split it into prose/videoRef parts around any inline
|
|
95
|
+
* `::video` imports that fall inside its range.
|
|
96
|
+
*
|
|
97
|
+
* Excerpts are expected in document order (as authored in the lens). An
|
|
98
|
+
* import's offset points at the text that follows it, so a video between two
|
|
99
|
+
* excerpt ranges attaches to the later excerpt; the consumed-set guard keeps
|
|
100
|
+
* overlapping excerpt ranges from emitting the same video twice.
|
|
40
101
|
*
|
|
41
102
|
* @param article - The full article content
|
|
42
|
-
* @param excerpts -
|
|
103
|
+
* @param excerpts - Excerpt specifications { from, to } in lens order
|
|
43
104
|
* @param file - Source file path for error reporting
|
|
44
|
-
* @returns Array of excerpts with collapsed_before/collapsed_after fields
|
|
45
105
|
*/
|
|
46
|
-
export declare function
|
|
106
|
+
export declare function resolveArticleSource(article: string, excerpts: ExcerptInput[], file: string): ResolvedExcerpt[];
|
package/dist/bundler/article.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { stripAuthoringMarkup } from '../authoring-markup.js';
|
|
2
|
+
import { parseVideoImportLine } from '../validator/video-imports.js';
|
|
2
3
|
/**
|
|
3
4
|
* Find all occurrences of a substring in text (case-insensitive).
|
|
4
5
|
* Returns array of start indices.
|
|
@@ -28,6 +29,80 @@ export function stripFrontmatter(article) {
|
|
|
28
29
|
function publishableArticleBody(article) {
|
|
29
30
|
return stripAuthoringMarkup(stripFrontmatter(article)).trim();
|
|
30
31
|
}
|
|
32
|
+
// CommonMark permits up to three leading spaces before a fenced code block.
|
|
33
|
+
const CODE_FENCE = /^ {0,3}(?:```|~~~)/;
|
|
34
|
+
/**
|
|
35
|
+
* Produce the renderable body of an article: frontmatter and authoring markup
|
|
36
|
+
* stripped, and every valid own-line `::video[[...]]` import removed and
|
|
37
|
+
* recorded with its character offset into the cleaned body. All downstream
|
|
38
|
+
* work (anchor search, excerpt slicing, collapsed text, word counts) uses
|
|
39
|
+
* this cleaned body, so import lines can never leak into reader-visible text
|
|
40
|
+
* and anchors can never collide with directive syntax.
|
|
41
|
+
*
|
|
42
|
+
* Malformed import lines are left in place as inert prose — parse-time
|
|
43
|
+
* validation (validator/video-imports.ts) reports them.
|
|
44
|
+
*/
|
|
45
|
+
export function parseArticleBody(article) {
|
|
46
|
+
const rawLines = publishableArticleBody(article).split('\n');
|
|
47
|
+
const outLines = [];
|
|
48
|
+
const pending = [];
|
|
49
|
+
let inCodeBlock = false;
|
|
50
|
+
for (let i = 0; i < rawLines.length; i++) {
|
|
51
|
+
const line = rawLines[i];
|
|
52
|
+
if (CODE_FENCE.test(line)) {
|
|
53
|
+
inCodeBlock = !inCodeBlock;
|
|
54
|
+
outLines.push(line);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (!inCodeBlock) {
|
|
58
|
+
const parsed = parseVideoImportLine(line);
|
|
59
|
+
if (parsed.kind === 'import') {
|
|
60
|
+
const entry = {
|
|
61
|
+
outLineIndex: outLines.length,
|
|
62
|
+
target: parsed.import.target,
|
|
63
|
+
rawLine: line.trim(),
|
|
64
|
+
};
|
|
65
|
+
if (parsed.import.from !== undefined)
|
|
66
|
+
entry.from = parsed.import.from;
|
|
67
|
+
if (parsed.import.to !== undefined)
|
|
68
|
+
entry.to = parsed.import.to;
|
|
69
|
+
pending.push(entry);
|
|
70
|
+
// Removing the line would leave the blank lines around it doubled up;
|
|
71
|
+
// swallow one so the prose keeps a single paragraph break.
|
|
72
|
+
if (outLines.length > 0 &&
|
|
73
|
+
outLines[outLines.length - 1].trim() === '' &&
|
|
74
|
+
i + 1 < rawLines.length &&
|
|
75
|
+
rawLines[i + 1].trim() === '') {
|
|
76
|
+
i++;
|
|
77
|
+
}
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
outLines.push(line);
|
|
82
|
+
}
|
|
83
|
+
// Char offset of each retained line in the joined body
|
|
84
|
+
const lineStartOffsets = [];
|
|
85
|
+
let acc = 0;
|
|
86
|
+
for (const line of outLines) {
|
|
87
|
+
lineStartOffsets.push(acc);
|
|
88
|
+
acc += line.length + 1;
|
|
89
|
+
}
|
|
90
|
+
const joined = outLines.join('\n');
|
|
91
|
+
// Imports at the very start/end leave blank edges behind — trim and shift
|
|
92
|
+
const leading = joined.length - joined.trimStart().length;
|
|
93
|
+
const body = joined.trim();
|
|
94
|
+
const videoImports = pending.map((p) => {
|
|
95
|
+
const rawOffset = p.outLineIndex < lineStartOffsets.length
|
|
96
|
+
? lineStartOffsets[p.outLineIndex]
|
|
97
|
+
: joined.length;
|
|
98
|
+
const { outLineIndex: _outLineIndex, ...rest } = p;
|
|
99
|
+
return {
|
|
100
|
+
...rest,
|
|
101
|
+
offset: Math.min(Math.max(rawOffset - leading, 0), body.length),
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
return { body, videoImports };
|
|
105
|
+
}
|
|
31
106
|
/**
|
|
32
107
|
* Extract content from an article between two anchor texts.
|
|
33
108
|
*
|
|
@@ -43,7 +118,10 @@ function publishableArticleBody(article) {
|
|
|
43
118
|
* @returns Extracted content or error
|
|
44
119
|
*/
|
|
45
120
|
export function extractArticleExcerpt(article, fromAnchor, toAnchor, file) {
|
|
46
|
-
|
|
121
|
+
return extractExcerptFromBody(parseArticleBody(article).body, fromAnchor, toAnchor, file);
|
|
122
|
+
}
|
|
123
|
+
/** Core anchor-search extraction over an already-cleaned body. */
|
|
124
|
+
function extractExcerptFromBody(body, fromAnchor, toAnchor, file) {
|
|
47
125
|
// If no anchors, return entire article (strip frontmatter)
|
|
48
126
|
if (!fromAnchor && !toAnchor) {
|
|
49
127
|
return {
|
|
@@ -175,76 +253,99 @@ export function extractArticleExcerpt(article, fromAnchor, toAnchor, file) {
|
|
|
175
253
|
};
|
|
176
254
|
}
|
|
177
255
|
/**
|
|
178
|
-
*
|
|
256
|
+
* Resolve every excerpt a lens takes from one article source, in one pass:
|
|
257
|
+
* extract each excerpt, compute the collapsed (elided) text at its outer
|
|
258
|
+
* boundaries, and split it into prose/videoRef parts around any inline
|
|
259
|
+
* `::video` imports that fall inside its range.
|
|
260
|
+
*
|
|
261
|
+
* Excerpts are expected in document order (as authored in the lens). An
|
|
262
|
+
* import's offset points at the text that follows it, so a video between two
|
|
263
|
+
* excerpt ranges attaches to the later excerpt; the consumed-set guard keeps
|
|
264
|
+
* overlapping excerpt ranges from emitting the same video twice.
|
|
179
265
|
*
|
|
180
266
|
* @param article - The full article content
|
|
181
|
-
* @param excerpts -
|
|
267
|
+
* @param excerpts - Excerpt specifications { from, to } in lens order
|
|
182
268
|
* @param file - Source file path for error reporting
|
|
183
|
-
* @returns Array of excerpts with collapsed_before/collapsed_after fields
|
|
184
269
|
*/
|
|
185
|
-
export function
|
|
186
|
-
const body =
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
extractedExcerpts.push({
|
|
193
|
-
content: '',
|
|
194
|
-
startIndex: -1,
|
|
195
|
-
endIndex: -1,
|
|
196
|
-
error: result.error,
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
extractedExcerpts.push({
|
|
201
|
-
content: result.content,
|
|
202
|
-
startIndex: result.startIndex,
|
|
203
|
-
endIndex: result.endIndex,
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
// Build the result with collapsed content
|
|
270
|
+
export function resolveArticleSource(article, excerpts, file) {
|
|
271
|
+
const { body, videoImports } = parseArticleBody(article);
|
|
272
|
+
const extracted = excerpts.map((excerpt) => extractExcerptFromBody(body, excerpt.from, excerpt.to, file));
|
|
273
|
+
// Whole-article embeds (no anchors anywhere in the group) get no collapsed
|
|
274
|
+
// fields — there is nothing elided to show.
|
|
275
|
+
const hasAnchors = excerpts.some((excerpt) => excerpt.from || excerpt.to);
|
|
276
|
+
const consumed = new Set();
|
|
208
277
|
const results = [];
|
|
209
|
-
for (let i = 0; i <
|
|
210
|
-
const
|
|
211
|
-
if (
|
|
212
|
-
results.push({
|
|
213
|
-
content: '',
|
|
214
|
-
error: extracted.error,
|
|
215
|
-
});
|
|
278
|
+
for (let i = 0; i < extracted.length; i++) {
|
|
279
|
+
const excerpt = extracted[i];
|
|
280
|
+
if (excerpt.error) {
|
|
281
|
+
results.push({ error: excerpt.error });
|
|
216
282
|
continue;
|
|
217
283
|
}
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
//
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (
|
|
227
|
-
|
|
284
|
+
const start = excerpt.startIndex;
|
|
285
|
+
const end = excerpt.endIndex;
|
|
286
|
+
const result = { content: excerpt.content };
|
|
287
|
+
if (hasAnchors) {
|
|
288
|
+
// collapsed_before: from the body start (first excerpt) or the previous
|
|
289
|
+
// excerpt's end. A previous excerpt that failed to extract yields none —
|
|
290
|
+
// its range is unknown.
|
|
291
|
+
if (i === 0) {
|
|
292
|
+
if (start > 0) {
|
|
293
|
+
const collapsedBefore = body.slice(0, start).trim();
|
|
294
|
+
if (collapsedBefore.length > 0)
|
|
295
|
+
result.collapsed_before = collapsedBefore;
|
|
228
296
|
}
|
|
229
297
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if (collapsedBefore.length > 0) {
|
|
237
|
-
result.collapsed_before = collapsedBefore;
|
|
298
|
+
else {
|
|
299
|
+
const prev = extracted[i - 1];
|
|
300
|
+
if (!prev.error && prev.endIndex < start) {
|
|
301
|
+
const collapsedBefore = body.slice(prev.endIndex, start).trim();
|
|
302
|
+
if (collapsedBefore.length > 0)
|
|
303
|
+
result.collapsed_before = collapsedBefore;
|
|
238
304
|
}
|
|
239
305
|
}
|
|
306
|
+
// collapsed_after: only the last excerpt shows the article's tail
|
|
307
|
+
if (i === extracted.length - 1) {
|
|
308
|
+
const collapsedAfter = body.slice(end).trim();
|
|
309
|
+
if (collapsedAfter.length > 0)
|
|
310
|
+
result.collapsed_after = collapsedAfter;
|
|
311
|
+
}
|
|
240
312
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
313
|
+
const inRange = videoImports.filter((v) => !consumed.has(v) && v.offset >= start && v.offset <= end);
|
|
314
|
+
if (inRange.length > 0) {
|
|
315
|
+
for (const v of inRange)
|
|
316
|
+
consumed.add(v);
|
|
317
|
+
const parts = [];
|
|
318
|
+
let cursor = start;
|
|
319
|
+
for (const v of inRange) {
|
|
320
|
+
const prose = body.slice(cursor, v.offset).trim();
|
|
321
|
+
if (prose.length > 0)
|
|
322
|
+
parts.push({ kind: 'prose', content: prose });
|
|
323
|
+
const ref = { kind: 'videoRef', target: v.target, rawLine: v.rawLine };
|
|
324
|
+
if (v.from !== undefined)
|
|
325
|
+
ref.from = v.from;
|
|
326
|
+
if (v.to !== undefined)
|
|
327
|
+
ref.to = v.to;
|
|
328
|
+
parts.push(ref);
|
|
329
|
+
cursor = v.offset;
|
|
330
|
+
}
|
|
331
|
+
const tail = body.slice(cursor, end).trim();
|
|
332
|
+
if (tail.length > 0)
|
|
333
|
+
parts.push({ kind: 'prose', content: tail });
|
|
334
|
+
// Contiguity: a prose part separated from another prose part only by
|
|
335
|
+
// videos is one continuous stretch of source text. A video at an
|
|
336
|
+
// excerpt edge (no prose on one side) sets no flag on that side.
|
|
337
|
+
for (let p = 0; p < parts.length; p++) {
|
|
338
|
+
const part = parts[p];
|
|
339
|
+
if (part.kind !== 'prose')
|
|
340
|
+
continue;
|
|
341
|
+
if (parts.slice(0, p).some((x) => x.kind === 'prose')) {
|
|
342
|
+
part.contiguousWithPrev = true;
|
|
343
|
+
}
|
|
344
|
+
if (parts.slice(p + 1).some((x) => x.kind === 'prose')) {
|
|
345
|
+
part.contiguousWithNext = true;
|
|
346
|
+
}
|
|
247
347
|
}
|
|
348
|
+
result.parts = parts;
|
|
248
349
|
}
|
|
249
350
|
results.push(result);
|
|
250
351
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article.js","sourceRoot":"","sources":["../../src/bundler/article.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"article.js","sourceRoot":"","sources":["../../src/bundler/article.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
|
@@ -14,6 +14,7 @@ export function parseArgs(argv) {
|
|
|
14
14
|
let stdin = false;
|
|
15
15
|
let deferUrls = false;
|
|
16
16
|
let checkUrlsOnly = false;
|
|
17
|
+
let skipUrls = false;
|
|
17
18
|
for (let i = 0; i < args.length; i++) {
|
|
18
19
|
if (args[i] === "--output" || args[i] === "-o") {
|
|
19
20
|
outputPath = args[i + 1] || null;
|
|
@@ -28,11 +29,14 @@ export function parseArgs(argv) {
|
|
|
28
29
|
else if (args[i] === "--check-urls-only") {
|
|
29
30
|
checkUrlsOnly = true;
|
|
30
31
|
}
|
|
32
|
+
else if (args[i] === "--skip-urls") {
|
|
33
|
+
skipUrls = true;
|
|
34
|
+
}
|
|
31
35
|
else if (!args[i].startsWith("-")) {
|
|
32
36
|
vaultPath = args[i];
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
|
-
return { vaultPath, outputPath, stdin, deferUrls, checkUrlsOnly };
|
|
39
|
+
return { vaultPath, outputPath, stdin, deferUrls, checkUrlsOnly, skipUrls };
|
|
36
40
|
}
|
|
37
41
|
async function readStdin() {
|
|
38
42
|
const chunks = [];
|
|
@@ -121,7 +125,7 @@ async function main() {
|
|
|
121
125
|
staleUrlCount: cache.staleCount(result.urlsToValidate),
|
|
122
126
|
};
|
|
123
127
|
}
|
|
124
|
-
else if (result.urlsToValidate.length > 0) {
|
|
128
|
+
else if (!options.skipUrls && result.urlsToValidate.length > 0) {
|
|
125
129
|
const urlWarnings = await validateUrls(result.urlsToValidate, UrlCache.load());
|
|
126
130
|
// Re-dedupe: urlWarnings are appended after processContent already
|
|
127
131
|
// deduped, and can themselves repeat (same unreachable URL twice).
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,cAAc,GAIf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|