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.
Files changed (63) hide show
  1. package/dist/authoring-markup.d.ts +36 -0
  2. package/dist/authoring-markup.js +103 -0
  3. package/dist/authoring-markup.js.map +1 -1
  4. package/dist/bundler/article.d.ts +69 -9
  5. package/dist/bundler/article.js +159 -58
  6. package/dist/bundler/article.js.map +1 -1
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.js +6 -2
  9. package/dist/cli.js.map +1 -1
  10. package/dist/content-schema.js +5 -0
  11. package/dist/content-schema.js.map +1 -1
  12. package/dist/flattener/index.js +381 -252
  13. package/dist/flattener/index.js.map +1 -1
  14. package/dist/index.d.ts +6 -0
  15. package/dist/index.js +13 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/parser/article.js +42 -32
  18. package/dist/parser/article.js.map +1 -1
  19. package/dist/parser/course.d.ts +0 -10
  20. package/dist/parser/course.js +19 -4
  21. package/dist/parser/course.js.map +1 -1
  22. package/dist/parser/learning-outcome.js +20 -4
  23. package/dist/parser/learning-outcome.js.map +1 -1
  24. package/dist/parser/lens.d.ts +1 -6
  25. package/dist/parser/lens.js +64 -18
  26. package/dist/parser/lens.js.map +1 -1
  27. package/dist/parser/module.js +28 -17
  28. package/dist/parser/module.js.map +1 -1
  29. package/dist/parser/sections.d.ts +2 -1
  30. package/dist/parser/sections.js +5 -3
  31. package/dist/parser/sections.js.map +1 -1
  32. package/dist/parser/survey.js +19 -4
  33. package/dist/parser/survey.js.map +1 -1
  34. package/dist/source-location.d.ts +2 -0
  35. package/dist/source-location.js +12 -0
  36. package/dist/source-location.js.map +1 -0
  37. package/dist/validator/article-review-provenance.d.ts +5 -0
  38. package/dist/validator/article-review-provenance.js +57 -0
  39. package/dist/validator/article-review-provenance.js.map +1 -0
  40. package/dist/validator/article-structure.d.ts +8 -0
  41. package/dist/validator/article-structure.js +660 -0
  42. package/dist/validator/article-structure.js.map +1 -0
  43. package/dist/validator/directives.js +20 -0
  44. package/dist/validator/directives.js.map +1 -1
  45. package/dist/validator/emphasis.js +104 -1
  46. package/dist/validator/emphasis.js.map +1 -1
  47. package/dist/validator/markdown-parse.d.ts +3 -0
  48. package/dist/validator/markdown-parse.js +22 -0
  49. package/dist/validator/markdown-parse.js.map +1 -0
  50. package/dist/validator/math.js +66 -9
  51. package/dist/validator/math.js.map +1 -1
  52. package/dist/validator/output-integrity.js +16 -16
  53. package/dist/validator/output-integrity.js.map +1 -1
  54. package/dist/validator/same-lens-links.d.ts +4 -0
  55. package/dist/validator/same-lens-links.js +297 -0
  56. package/dist/validator/same-lens-links.js.map +1 -0
  57. package/dist/validator/suppressions.d.ts +42 -0
  58. package/dist/validator/suppressions.js +97 -0
  59. package/dist/validator/suppressions.js.map +1 -0
  60. package/dist/validator/video-imports.d.ts +35 -0
  61. package/dist/validator/video-imports.js +183 -0
  62. package/dist/validator/video-imports.js.map +1 -0
  63. 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;
@@ -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 CollapsedExcerpt {
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
- * Bundle multiple excerpts from an article with collapsed content information.
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 - Array of excerpt specifications { from, to }
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 bundleArticleWithCollapsed(article: string, excerpts: ExcerptInput[], file: string): CollapsedExcerpt[];
106
+ export declare function resolveArticleSource(article: string, excerpts: ExcerptInput[], file: string): ResolvedExcerpt[];
@@ -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
- const body = publishableArticleBody(article);
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
- * Bundle multiple excerpts from an article with collapsed content information.
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 - Array of excerpt specifications { from, to }
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 bundleArticleWithCollapsed(article, excerpts, file) {
186
- const body = publishableArticleBody(article);
187
- // First, extract all excerpts and their positions
188
- const extractedExcerpts = [];
189
- for (const excerpt of excerpts) {
190
- const result = extractArticleExcerpt(article, excerpt.from, excerpt.to, file);
191
- if (result.error) {
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 < extractedExcerpts.length; i++) {
210
- const extracted = extractedExcerpts[i];
211
- if (extracted.error) {
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 result = {
219
- content: extracted.content,
220
- };
221
- // Calculate collapsed_before
222
- if (i === 0) {
223
- // First excerpt: content from body start to this excerpt start
224
- if (extracted.startIndex > 0) {
225
- const collapsedBefore = body.slice(0, extracted.startIndex).trim();
226
- if (collapsedBefore.length > 0) {
227
- result.collapsed_before = collapsedBefore;
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
- else {
232
- // Subsequent excerpts: content between previous excerpt end and this excerpt start
233
- const prevExcerpt = extractedExcerpts[i - 1];
234
- if (!prevExcerpt.error && prevExcerpt.endIndex < extracted.startIndex) {
235
- const collapsedBefore = body.slice(prevExcerpt.endIndex, extracted.startIndex).trim();
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
- // Calculate collapsed_after (content after this excerpt to next excerpt or end)
242
- // Only set for the last excerpt
243
- if (i === extractedExcerpts.length - 1) {
244
- const collapsedAfter = body.slice(extracted.endIndex).trim();
245
- if (collapsedAfter.length > 0) {
246
- result.collapsed_after = collapsedAfter;
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
@@ -6,6 +6,7 @@ export interface CliOptions {
6
6
  stdin: boolean;
7
7
  deferUrls: boolean;
8
8
  checkUrlsOnly: boolean;
9
+ skipUrls: boolean;
9
10
  }
10
11
  /**
11
12
  * The CLI's JSON output: the core ProcessResult plus a course-reachability map
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;AAoBxC,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACjC,CAAC,EAAE,CAAC,CAAC,gBAAgB;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACjC,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;YACtC,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,mBAAmB,EAAE,CAAC;YAC3C,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,IAAI,KAA0B,CAAC;IAE/B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,mDAAmD;QACnD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAA2B,CAAC;QAC3D,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAErC,wEAAwE;IACxE,yEAAyE;IACzE,0EAA0E;IAC1E,wEAAwE;IACxE,2DAA2D;IAC3D,IAAI,aAAa,GAA6B,EAAE,CAAC;IACjD,IAAI,CAAC;QACH,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,0EAA0E,EAC1E,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,EAAE,CAAoB,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;QAElC,IAAI,MAAM,GAGN,MAAM,CAAC;QAEX,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,sEAAsE;YACtE,oEAAoE;YACpE,gEAAgE;YAChE,gEAAgE;YAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAmB,EAAE,CAAC;YACxC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1C,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAClD,IAAI,KAAK;oBAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;YACD,yEAAyE;YACzE,sEAAsE;YACtE,gCAAgC;YAChC,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CACvE,MAAM,CAAC,MAAM,CAAC,MAAM,CACrB,CAAC;YACF,MAAM,GAAG;gBACP,GAAG,MAAM;gBACT,SAAS;gBACT,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC;aACvD,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,MAAM,YAAY,CACpC,MAAM,CAAC,cAAc,EACrB,QAAQ,CAAC,IAAI,EAAE,CAChB,CAAC;YACF,mEAAmE;YACnE,mEAAmE;YACnE,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE7C,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,+EAA+E;AAC/E,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,MAAM,YAAY,GAChB,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC7B,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC7B,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAChD,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}