lens-content-processor 0.1.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 (103) hide show
  1. package/dist/bundler/article.d.ts +41 -0
  2. package/dist/bundler/article.js +240 -0
  3. package/dist/bundler/article.js.map +1 -0
  4. package/dist/bundler/article.test.d.ts +1 -0
  5. package/dist/bundler/article.test.js +212 -0
  6. package/dist/bundler/article.test.js.map +1 -0
  7. package/dist/bundler/video.d.ts +50 -0
  8. package/dist/bundler/video.js +213 -0
  9. package/dist/bundler/video.js.map +1 -0
  10. package/dist/bundler/video.test.d.ts +1 -0
  11. package/dist/bundler/video.test.js +95 -0
  12. package/dist/bundler/video.test.js.map +1 -0
  13. package/dist/cli.d.ts +10 -0
  14. package/dist/cli.js +80 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/cli.test.d.ts +1 -0
  17. package/dist/cli.test.js +45 -0
  18. package/dist/cli.test.js.map +1 -0
  19. package/dist/flattener/index.d.ts +20 -0
  20. package/dist/flattener/index.js +707 -0
  21. package/dist/flattener/index.js.map +1 -0
  22. package/dist/flattener/index.test.d.ts +1 -0
  23. package/dist/flattener/index.test.js +547 -0
  24. package/dist/flattener/index.test.js.map +1 -0
  25. package/dist/fs/read-vault.d.ts +4 -0
  26. package/dist/fs/read-vault.js +28 -0
  27. package/dist/fs/read-vault.js.map +1 -0
  28. package/dist/fs/read-vault.test.d.ts +1 -0
  29. package/dist/fs/read-vault.test.js +37 -0
  30. package/dist/fs/read-vault.test.js.map +1 -0
  31. package/dist/index.d.ts +75 -0
  32. package/dist/index.js +137 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/parser/course.d.ts +17 -0
  35. package/dist/parser/course.js +145 -0
  36. package/dist/parser/course.js.map +1 -0
  37. package/dist/parser/course.test.d.ts +1 -0
  38. package/dist/parser/course.test.js +117 -0
  39. package/dist/parser/course.test.js.map +1 -0
  40. package/dist/parser/frontmatter.d.ts +8 -0
  41. package/dist/parser/frontmatter.js +58 -0
  42. package/dist/parser/frontmatter.js.map +1 -0
  43. package/dist/parser/frontmatter.test.d.ts +1 -0
  44. package/dist/parser/frontmatter.test.js +54 -0
  45. package/dist/parser/frontmatter.test.js.map +1 -0
  46. package/dist/parser/learning-outcome.d.ts +21 -0
  47. package/dist/parser/learning-outcome.js +116 -0
  48. package/dist/parser/learning-outcome.js.map +1 -0
  49. package/dist/parser/learning-outcome.test.d.ts +1 -0
  50. package/dist/parser/learning-outcome.test.js +75 -0
  51. package/dist/parser/learning-outcome.test.js.map +1 -0
  52. package/dist/parser/lens.d.ts +51 -0
  53. package/dist/parser/lens.js +328 -0
  54. package/dist/parser/lens.js.map +1 -0
  55. package/dist/parser/lens.test.d.ts +1 -0
  56. package/dist/parser/lens.test.js +453 -0
  57. package/dist/parser/lens.test.js.map +1 -0
  58. package/dist/parser/module.d.ts +21 -0
  59. package/dist/parser/module.js +128 -0
  60. package/dist/parser/module.js.map +1 -0
  61. package/dist/parser/module.test.d.ts +1 -0
  62. package/dist/parser/module.test.js +99 -0
  63. package/dist/parser/module.test.js.map +1 -0
  64. package/dist/parser/sections.d.ts +18 -0
  65. package/dist/parser/sections.js +128 -0
  66. package/dist/parser/sections.js.map +1 -0
  67. package/dist/parser/sections.test.d.ts +1 -0
  68. package/dist/parser/sections.test.js +297 -0
  69. package/dist/parser/sections.test.js.map +1 -0
  70. package/dist/parser/wikilink.d.ts +12 -0
  71. package/dist/parser/wikilink.js +35 -0
  72. package/dist/parser/wikilink.js.map +1 -0
  73. package/dist/parser/wikilink.test.d.ts +1 -0
  74. package/dist/parser/wikilink.test.js +76 -0
  75. package/dist/parser/wikilink.test.js.map +1 -0
  76. package/dist/validator/field-typos.d.ts +10 -0
  77. package/dist/validator/field-typos.js +96 -0
  78. package/dist/validator/field-typos.js.map +1 -0
  79. package/dist/validator/field-typos.test.d.ts +1 -0
  80. package/dist/validator/field-typos.test.js +41 -0
  81. package/dist/validator/field-typos.test.js.map +1 -0
  82. package/dist/validator/field-values.d.ts +11 -0
  83. package/dist/validator/field-values.js +37 -0
  84. package/dist/validator/field-values.js.map +1 -0
  85. package/dist/validator/field-values.test.d.ts +1 -0
  86. package/dist/validator/field-values.test.js +45 -0
  87. package/dist/validator/field-values.test.js.map +1 -0
  88. package/dist/validator/segment-fields.d.ts +12 -0
  89. package/dist/validator/segment-fields.js +55 -0
  90. package/dist/validator/segment-fields.js.map +1 -0
  91. package/dist/validator/segment-fields.test.d.ts +1 -0
  92. package/dist/validator/segment-fields.test.js +73 -0
  93. package/dist/validator/segment-fields.test.js.map +1 -0
  94. package/dist/validator/standalone.test.d.ts +1 -0
  95. package/dist/validator/standalone.test.js +190 -0
  96. package/dist/validator/standalone.test.js.map +1 -0
  97. package/dist/validator/uuid.d.ts +17 -0
  98. package/dist/validator/uuid.js +46 -0
  99. package/dist/validator/uuid.js.map +1 -0
  100. package/dist/validator/uuid.test.d.ts +1 -0
  101. package/dist/validator/uuid.test.js +229 -0
  102. package/dist/validator/uuid.test.js.map +1 -0
  103. package/package.json +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lens.js","sourceRoot":"","sources":["../../src/parser/lens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,453 @@
1
+ // src/parser/lens.test.ts
2
+ import { describe, it, expect } from 'vitest';
3
+ import { parseLens } from './lens.js';
4
+ describe('parseLens', () => {
5
+ it('parses lens with text segment (H3 section, H4 segment)', () => {
6
+ const content = `---
7
+ id: 550e8400-e29b-41d4-a716-446655440002
8
+ ---
9
+
10
+ ### Text: Introduction
11
+
12
+ #### Text
13
+ content:: This is introductory content.
14
+ `;
15
+ const result = parseLens(content, 'Lenses/lens1.md');
16
+ expect(result.lens?.id).toBe('550e8400-e29b-41d4-a716-446655440002');
17
+ expect(result.lens?.sections).toHaveLength(1);
18
+ expect(result.lens?.sections[0].type).toBe('text');
19
+ expect(result.lens?.sections[0].segments[0].type).toBe('text');
20
+ expect(result.lens?.sections[0].segments[0].content).toBe('This is introductory content.');
21
+ });
22
+ it('parses article section with excerpt', () => {
23
+ const content = `---
24
+ id: 550e8400-e29b-41d4-a716-446655440002
25
+ ---
26
+
27
+ ### Article: Deep Dive
28
+ source:: [[../articles/deep-dive.md|Article]]
29
+
30
+ #### Article-excerpt
31
+ from:: "The key insight is"
32
+ to:: "understanding this concept."
33
+ `;
34
+ const result = parseLens(content, 'Lenses/lens1.md');
35
+ expect(result.lens?.sections[0].type).toBe('lens-article');
36
+ expect(result.lens?.sections[0].source).toBe('[[../articles/deep-dive.md|Article]]');
37
+ expect(result.lens?.sections[0].segments[0].type).toBe('article-excerpt');
38
+ // Note: from/to are parsed as strings here, converted to anchors during bundling
39
+ expect(result.lens?.sections[0].segments[0].fromAnchor).toBe('The key insight is');
40
+ expect(result.lens?.sections[0].segments[0].toAnchor).toBe('understanding this concept.');
41
+ });
42
+ it('parses video section with timestamp excerpt', () => {
43
+ const content = `---
44
+ id: 550e8400-e29b-41d4-a716-446655440002
45
+ ---
46
+
47
+ ### Video: Expert Interview
48
+ source:: [[../video_transcripts/interview.md|Video]]
49
+
50
+ #### Video-excerpt
51
+ from:: 1:30
52
+ to:: 5:45
53
+ `;
54
+ const result = parseLens(content, 'Lenses/lens1.md');
55
+ expect(result.lens?.sections[0].type).toBe('lens-video');
56
+ expect(result.lens?.sections[0].source).toBe('[[../video_transcripts/interview.md|Video]]');
57
+ expect(result.lens?.sections[0].segments[0].type).toBe('video-excerpt');
58
+ // Parsed as strings, converted to seconds during bundling
59
+ expect(result.lens?.sections[0].segments[0].fromTimeStr).toBe('1:30');
60
+ expect(result.lens?.sections[0].segments[0].toTimeStr).toBe('5:45');
61
+ });
62
+ it('requires source field in article/video sections', () => {
63
+ const content = `---
64
+ id: 550e8400-e29b-41d4-a716-446655440002
65
+ ---
66
+
67
+ ### Article: No Source
68
+
69
+ #### Article-excerpt
70
+ from:: "Start"
71
+ to:: "End"
72
+ `;
73
+ const result = parseLens(content, 'Lenses/bad.md');
74
+ expect(result.errors.some(e => e.message.includes('source'))).toBe(true);
75
+ });
76
+ it('parses text segment with multiline content', () => {
77
+ const content = `---
78
+ id: test-id
79
+ ---
80
+
81
+ ### Text: Introduction
82
+
83
+ #### Text
84
+ content::
85
+ Line one of content.
86
+ Line two of content.
87
+ Line three of content.
88
+
89
+ #### Chat
90
+ instructions:: Do something
91
+ `;
92
+ const result = parseLens(content, 'Lenses/test.md');
93
+ expect(result.lens?.sections[0].segments[0].type).toBe('text');
94
+ expect(result.lens?.sections[0].segments[0].content).toContain('Line one');
95
+ expect(result.lens?.sections[0].segments[0].content).toContain('Line two');
96
+ expect(result.lens?.sections[0].segments[0].content).toContain('Line three');
97
+ });
98
+ it('parses video-excerpt with only to:: (from defaults to 0:00)', () => {
99
+ const content = `---
100
+ id: test-id
101
+ ---
102
+
103
+ ### Video: Test Video
104
+ source:: [[../video_transcripts/test.md|Video]]
105
+
106
+ #### Video-excerpt
107
+ to:: 14:49
108
+ `;
109
+ const result = parseLens(content, 'Lenses/test.md');
110
+ expect(result.lens?.sections[0].segments[0].type).toBe('video-excerpt');
111
+ expect(result.lens?.sections[0].segments[0].fromTimeStr).toBe('0:00');
112
+ expect(result.lens?.sections[0].segments[0].toTimeStr).toBe('14:49');
113
+ });
114
+ it('parses chat segment with multiline instructions', () => {
115
+ const content = `---
116
+ id: test-id
117
+ ---
118
+
119
+ ### Text: Discussion
120
+
121
+ #### Chat
122
+ instructions::
123
+ First line of instructions.
124
+ Second line with more details.
125
+
126
+ Topics to cover:
127
+ - Topic one
128
+ - Topic two
129
+
130
+ hidePreviousContentFromUser:: false
131
+ `;
132
+ const result = parseLens(content, 'Lenses/test.md');
133
+ const chatSegment = result.lens?.sections[0].segments[0];
134
+ expect(chatSegment?.type).toBe('chat');
135
+ expect(chatSegment?.instructions).toContain('First line');
136
+ expect(chatSegment?.instructions).toContain('Topic one');
137
+ expect(chatSegment?.instructions).toContain('Topic two');
138
+ });
139
+ it('parses article-excerpt with only from:: (to end of article)', () => {
140
+ const content = `---
141
+ id: test-id
142
+ ---
143
+
144
+ ### Article: Test Article
145
+ source:: [[../articles/test.md|Article]]
146
+
147
+ #### Article-excerpt
148
+ from:: "Start here"
149
+ `;
150
+ const result = parseLens(content, 'Lenses/test.md');
151
+ expect(result.errors).toHaveLength(0);
152
+ expect(result.lens?.sections[0].segments[0].type).toBe('article-excerpt');
153
+ expect(result.lens?.sections[0].segments[0].fromAnchor).toBe('Start here');
154
+ expect(result.lens?.sections[0].segments[0].toAnchor).toBeUndefined();
155
+ });
156
+ it('parses article-excerpt with only to:: (from start of article)', () => {
157
+ const content = `---
158
+ id: test-id
159
+ ---
160
+
161
+ ### Article: Test Article
162
+ source:: [[../articles/test.md|Article]]
163
+
164
+ #### Article-excerpt
165
+ to:: "End here"
166
+ `;
167
+ const result = parseLens(content, 'Lenses/test.md');
168
+ expect(result.errors).toHaveLength(0);
169
+ expect(result.lens?.sections[0].segments[0].type).toBe('article-excerpt');
170
+ expect(result.lens?.sections[0].segments[0].fromAnchor).toBeUndefined();
171
+ expect(result.lens?.sections[0].segments[0].toAnchor).toBe('End here');
172
+ });
173
+ it('parses empty article-excerpt (entire article)', () => {
174
+ const content = `---
175
+ id: test-id
176
+ ---
177
+
178
+ ### Article: Test Article
179
+ source:: [[../articles/test.md|Article]]
180
+
181
+ #### Article-excerpt
182
+ `;
183
+ const result = parseLens(content, 'Lenses/test.md');
184
+ expect(result.errors).toHaveLength(0);
185
+ expect(result.lens?.sections[0].segments[0].type).toBe('article-excerpt');
186
+ expect(result.lens?.sections[0].segments[0].fromAnchor).toBeUndefined();
187
+ expect(result.lens?.sections[0].segments[0].toAnchor).toBeUndefined();
188
+ });
189
+ it('parses chat segment with title', () => {
190
+ const content = `---
191
+ id: test-id
192
+ ---
193
+
194
+ ### Text: Discussion
195
+
196
+ #### Chat: Discussion on AI Basics
197
+ instructions:: Talk about AI basics.
198
+ `;
199
+ const result = parseLens(content, 'Lenses/test.md');
200
+ const chatSegment = result.lens?.sections[0].segments[0];
201
+ expect(chatSegment?.type).toBe('chat');
202
+ expect(chatSegment?.title).toBe('Discussion on AI Basics');
203
+ expect(chatSegment?.instructions).toBe('Talk about AI basics.');
204
+ });
205
+ // Task 7.2: Field in wrong segment type
206
+ it('warns about from:: field in text segment', () => {
207
+ const content = `---
208
+ id: test-id
209
+ ---
210
+
211
+ ### Text: Wrong Field
212
+
213
+ #### Text
214
+ content:: Some text.
215
+ from:: "This is wrong"
216
+ `;
217
+ const result = parseLens(content, 'Lenses/test.md');
218
+ expect(result.errors.some(e => e.severity === 'warning' &&
219
+ e.message.includes('from') &&
220
+ e.message.includes('text'))).toBe(true);
221
+ });
222
+ it('warns about to:: field in chat segment', () => {
223
+ const content = `---
224
+ id: test-id
225
+ ---
226
+
227
+ ### Text: Wrong Field
228
+
229
+ #### Chat
230
+ instructions:: Do something.
231
+ to:: "This is wrong"
232
+ `;
233
+ const result = parseLens(content, 'Lenses/test.md');
234
+ expect(result.errors.some(e => e.severity === 'warning' &&
235
+ e.message.includes('to') &&
236
+ e.message.includes('chat'))).toBe(true);
237
+ });
238
+ it('does not warn about from/to in article-excerpt', () => {
239
+ const content = `---
240
+ id: test-id
241
+ ---
242
+
243
+ ### Article: Test Article
244
+ source:: [[../articles/test.md|Article]]
245
+
246
+ #### Article-excerpt
247
+ from:: "Start"
248
+ to:: "End"
249
+ `;
250
+ const result = parseLens(content, 'Lenses/test.md');
251
+ // No warnings about from/to in article-excerpt
252
+ expect(result.errors.filter(e => e.severity === 'warning' &&
253
+ (e.message.includes('from') || e.message.includes('to')))).toHaveLength(0);
254
+ });
255
+ // Task 7.3: Empty content field warning
256
+ it('warns about empty content:: field in text segment', () => {
257
+ const content = `---
258
+ id: test-id
259
+ ---
260
+
261
+ ### Text: Empty Content
262
+
263
+ #### Text
264
+ content::
265
+ `;
266
+ const result = parseLens(content, 'Lenses/test.md');
267
+ expect(result.errors.some(e => e.severity === 'warning' &&
268
+ e.message.toLowerCase().includes('empty'))).toBe(true);
269
+ });
270
+ it('warns about whitespace-only content:: field', () => {
271
+ const content = `---
272
+ id: test-id
273
+ ---
274
+
275
+ ### Text: Whitespace Only
276
+
277
+ #### Text
278
+ content::
279
+ `;
280
+ const result = parseLens(content, 'Lenses/test.md');
281
+ expect(result.errors.some(e => e.severity === 'warning' &&
282
+ e.message.toLowerCase().includes('empty'))).toBe(true);
283
+ });
284
+ it('does not warn about content:: with actual text', () => {
285
+ const content = `---
286
+ id: test-id
287
+ ---
288
+
289
+ ### Text: Has Content
290
+
291
+ #### Text
292
+ content:: This is real content.
293
+ `;
294
+ const result = parseLens(content, 'Lenses/test.md');
295
+ // No empty content warnings
296
+ expect(result.errors.filter(e => e.severity === 'warning' &&
297
+ e.message.toLowerCase().includes('empty'))).toHaveLength(0);
298
+ });
299
+ // Task 7.5: Empty segment warning
300
+ describe('empty segment warnings', () => {
301
+ it('warns about empty segment with no fields', () => {
302
+ const content = `---
303
+ id: test-id
304
+ ---
305
+
306
+ ### Text: Has Empty
307
+
308
+ #### Chat
309
+
310
+ #### Text
311
+ content:: Real content here.
312
+ `;
313
+ const result = parseLens(content, 'Lenses/test.md');
314
+ expect(result.errors.some(e => e.severity === 'warning' &&
315
+ e.message.toLowerCase().includes('empty') &&
316
+ e.message.toLowerCase().includes('chat'))).toBe(true);
317
+ });
318
+ it('warns about segment with only whitespace', () => {
319
+ const content = `---
320
+ id: test-id
321
+ ---
322
+
323
+ ### Text: Has Empty
324
+
325
+ #### Text
326
+
327
+
328
+
329
+ #### Chat
330
+ instructions:: Do something.
331
+ `;
332
+ const result = parseLens(content, 'Lenses/test.md');
333
+ expect(result.errors.some(e => e.severity === 'warning' &&
334
+ e.message.toLowerCase().includes('empty'))).toBe(true);
335
+ });
336
+ it('does not warn about segment with fields', () => {
337
+ const content = `---
338
+ id: test-id
339
+ ---
340
+
341
+ ### Text: Has Content
342
+
343
+ #### Text
344
+ content:: Some content.
345
+
346
+ #### Chat
347
+ instructions:: Do something.
348
+ `;
349
+ const result = parseLens(content, 'Lenses/test.md');
350
+ // No empty segment warnings
351
+ expect(result.errors.filter(e => e.severity === 'warning' &&
352
+ e.message.toLowerCase().includes('empty') &&
353
+ e.message.toLowerCase().includes('segment'))).toHaveLength(0);
354
+ });
355
+ });
356
+ // Task 7.6: Section with no segments warning
357
+ describe('section with no segments warnings', () => {
358
+ it('warns about section with no segments', () => {
359
+ const content = `---
360
+ id: test-id
361
+ ---
362
+
363
+ ### Article: Empty Section
364
+ source:: [[../articles/test.md|Article]]
365
+ `;
366
+ const result = parseLens(content, 'Lenses/test.md');
367
+ expect(result.errors.some(e => e.severity === 'warning' &&
368
+ e.message.toLowerCase().includes('no segments'))).toBe(true);
369
+ });
370
+ it('warns about text section with no segments', () => {
371
+ const content = `---
372
+ id: test-id
373
+ ---
374
+
375
+ ### Text: Empty Text Section
376
+ `;
377
+ const result = parseLens(content, 'Lenses/test.md');
378
+ expect(result.errors.some(e => e.severity === 'warning' &&
379
+ e.message.toLowerCase().includes('no segments'))).toBe(true);
380
+ });
381
+ it('does not warn about section with segments', () => {
382
+ const content = `---
383
+ id: test-id
384
+ ---
385
+
386
+ ### Article: Has Content
387
+ source:: [[../articles/test.md|Article]]
388
+
389
+ #### Article-excerpt
390
+ from:: "Start"
391
+ to:: "End"
392
+ `;
393
+ const result = parseLens(content, 'Lenses/test.md');
394
+ // No warnings about no segments
395
+ expect(result.errors.filter(e => e.severity === 'warning' &&
396
+ e.message.toLowerCase().includes('no segments'))).toHaveLength(0);
397
+ });
398
+ });
399
+ // Task 7.7: Boolean field with non-boolean value
400
+ describe('boolean field value validation', () => {
401
+ it('warns about optional:: field with non-boolean value', () => {
402
+ const content = `---
403
+ id: test-id
404
+ ---
405
+
406
+ ### Text: Test
407
+
408
+ #### Text
409
+ content:: Some content.
410
+ optional:: yes
411
+ `;
412
+ const result = parseLens(content, 'Lenses/test.md');
413
+ expect(result.errors.some(e => e.severity === 'warning' &&
414
+ e.message.includes("'optional'") &&
415
+ e.message.includes('non-boolean'))).toBe(true);
416
+ });
417
+ it('warns about hidePreviousContentFromUser:: with non-boolean value', () => {
418
+ const content = `---
419
+ id: test-id
420
+ ---
421
+
422
+ ### Text: Test
423
+
424
+ #### Chat
425
+ instructions:: Do something.
426
+ hidePreviousContentFromUser:: 1
427
+ `;
428
+ const result = parseLens(content, 'Lenses/test.md');
429
+ expect(result.errors.some(e => e.severity === 'warning' &&
430
+ e.message.includes("'hidePreviousContentFromUser'") &&
431
+ e.message.includes('non-boolean'))).toBe(true);
432
+ });
433
+ it('does not warn about boolean fields with valid values', () => {
434
+ const content = `---
435
+ id: test-id
436
+ ---
437
+
438
+ ### Text: Test
439
+
440
+ #### Chat
441
+ instructions:: Do something.
442
+ hidePreviousContentFromUser:: true
443
+ hidePreviousContentFromTutor:: false
444
+ optional:: true
445
+ `;
446
+ const result = parseLens(content, 'Lenses/test.md');
447
+ // No warnings about boolean values
448
+ expect(result.errors.filter(e => e.severity === 'warning' &&
449
+ e.message.includes('non-boolean'))).toHaveLength(0);
450
+ });
451
+ });
452
+ });
453
+ //# sourceMappingURL=lens.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lens.test.js","sourceRoot":"","sources":["../../src/parser/lens.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ContentError, TextSegment } from '../index.js';
2
+ import { type ParsedSection } from './sections.js';
3
+ /**
4
+ * Parse ## Text subsections from within a Page section body.
5
+ * These subsections have a `content::` field that can span multiple lines.
6
+ *
7
+ * @param body - The body text of a # Page: section
8
+ * @returns Array of TextSegment objects extracted from ## Text subsections
9
+ */
10
+ export declare function parsePageTextSegments(body: string): TextSegment[];
11
+ export interface ParsedModule {
12
+ slug: string;
13
+ title: string;
14
+ contentId: string | null;
15
+ sections: ParsedSection[];
16
+ }
17
+ export interface ModuleParseResult {
18
+ module: ParsedModule | null;
19
+ errors: ContentError[];
20
+ }
21
+ export declare function parseModule(content: string, file: string): ModuleParseResult;
@@ -0,0 +1,128 @@
1
+ import { parseFrontmatter } from './frontmatter.js';
2
+ import { parseSections, MODULE_SECTION_TYPES } from './sections.js';
3
+ /**
4
+ * Parse ## Text subsections from within a Page section body.
5
+ * These subsections have a `content::` field that can span multiple lines.
6
+ *
7
+ * @param body - The body text of a # Page: section
8
+ * @returns Array of TextSegment objects extracted from ## Text subsections
9
+ */
10
+ export function parsePageTextSegments(body) {
11
+ const segments = [];
12
+ const lines = body.split('\n');
13
+ let inTextSection = false;
14
+ let currentContent = '';
15
+ let collectingContent = false;
16
+ for (const line of lines) {
17
+ // Check for ## Text header (case-insensitive)
18
+ if (line.match(/^##\s+Text\s*$/i)) {
19
+ // Save previous content if any
20
+ if (collectingContent && currentContent.trim()) {
21
+ segments.push({ type: 'text', content: currentContent.trim() });
22
+ }
23
+ inTextSection = true;
24
+ currentContent = '';
25
+ collectingContent = false;
26
+ continue;
27
+ }
28
+ // Check for any other ## header (end of Text section)
29
+ if (line.match(/^##\s+\S/)) {
30
+ // Save current content if any
31
+ if (collectingContent && currentContent.trim()) {
32
+ segments.push({ type: 'text', content: currentContent.trim() });
33
+ }
34
+ inTextSection = false;
35
+ currentContent = '';
36
+ collectingContent = false;
37
+ continue;
38
+ }
39
+ if (inTextSection) {
40
+ // Check for content:: field
41
+ const contentMatch = line.match(/^content::\s*(.*)$/);
42
+ if (contentMatch) {
43
+ // Start collecting content
44
+ collectingContent = true;
45
+ const inlineValue = contentMatch[1].trim();
46
+ currentContent = inlineValue;
47
+ }
48
+ else if (collectingContent) {
49
+ // Check if this line starts another field (ends content collection)
50
+ if (line.match(/^\w+::\s*/)) {
51
+ // Save current content and stop collecting
52
+ if (currentContent.trim()) {
53
+ segments.push({ type: 'text', content: currentContent.trim() });
54
+ }
55
+ collectingContent = false;
56
+ currentContent = '';
57
+ }
58
+ else {
59
+ // Continue multiline content
60
+ if (currentContent) {
61
+ currentContent += '\n' + line;
62
+ }
63
+ else {
64
+ currentContent = line;
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ // Don't forget the last segment
71
+ if (collectingContent && currentContent.trim()) {
72
+ segments.push({ type: 'text', content: currentContent.trim() });
73
+ }
74
+ return segments;
75
+ }
76
+ export function parseModule(content, file) {
77
+ const errors = [];
78
+ // Parse frontmatter
79
+ const frontmatterResult = parseFrontmatter(content, file);
80
+ if (frontmatterResult.error) {
81
+ errors.push(frontmatterResult.error);
82
+ return { module: null, errors };
83
+ }
84
+ const { frontmatter, body, bodyStartLine } = frontmatterResult;
85
+ // Validate required frontmatter fields
86
+ if (!frontmatter.slug) {
87
+ errors.push({
88
+ file,
89
+ line: 2,
90
+ message: 'Missing required field: slug',
91
+ suggestion: "Add 'slug: your-module-slug' to frontmatter",
92
+ severity: 'error',
93
+ });
94
+ }
95
+ if (!frontmatter.title) {
96
+ errors.push({
97
+ file,
98
+ line: 2,
99
+ message: 'Missing required field: title',
100
+ suggestion: "Add 'title: Your Module Title' to frontmatter",
101
+ severity: 'error',
102
+ });
103
+ }
104
+ if (errors.length > 0) {
105
+ return { module: null, errors };
106
+ }
107
+ // Parse sections (H1 headers for module files)
108
+ const sectionsResult = parseSections(body, 1, MODULE_SECTION_TYPES, file);
109
+ // Adjust line numbers to account for frontmatter
110
+ for (const error of sectionsResult.errors) {
111
+ if (error.line) {
112
+ error.line += bodyStartLine - 1;
113
+ }
114
+ }
115
+ errors.push(...sectionsResult.errors);
116
+ for (const section of sectionsResult.sections) {
117
+ section.line += bodyStartLine - 1;
118
+ }
119
+ const module = {
120
+ slug: frontmatter.slug,
121
+ title: frontmatter.title,
122
+ // Accept both 'contentId' and 'id' from frontmatter (prefer contentId)
123
+ contentId: frontmatter.contentId ?? frontmatter.id ?? null,
124
+ sections: sectionsResult.sections,
125
+ };
126
+ return { module, errors };
127
+ }
128
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/parser/module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};