lens-content-processor 0.3.0 → 0.5.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 (78) hide show
  1. package/dist/bundler/article.d.ts +7 -2
  2. package/dist/bundler/article.js +19 -8
  3. package/dist/bundler/article.js.map +1 -1
  4. package/dist/bundler/video.d.ts +12 -6
  5. package/dist/bundler/video.js +57 -34
  6. package/dist/bundler/video.js.map +1 -1
  7. package/dist/cli.d.ts +11 -2
  8. package/dist/cli.js +36 -19
  9. package/dist/cli.js.map +1 -1
  10. package/dist/content-schema.js +64 -15
  11. package/dist/content-schema.js.map +1 -1
  12. package/dist/dedupe-errors.d.ts +14 -0
  13. package/dist/dedupe-errors.js +33 -0
  14. package/dist/dedupe-errors.js.map +1 -0
  15. package/dist/flattener/index.d.ts +22 -28
  16. package/dist/flattener/index.js +773 -613
  17. package/dist/flattener/index.js.map +1 -1
  18. package/dist/flattener/resolve-text-links.d.ts +25 -0
  19. package/dist/flattener/resolve-text-links.js +248 -0
  20. package/dist/flattener/resolve-text-links.js.map +1 -0
  21. package/dist/flattener/test-helpers.d.ts +23 -0
  22. package/dist/flattener/test-helpers.js +56 -0
  23. package/dist/flattener/test-helpers.js.map +1 -0
  24. package/dist/index.d.ts +66 -20
  25. package/dist/index.js +327 -152
  26. package/dist/index.js.map +1 -1
  27. package/dist/parser/article.d.ts +3 -2
  28. package/dist/parser/article.js +80 -12
  29. package/dist/parser/article.js.map +1 -1
  30. package/dist/parser/course.d.ts +1 -1
  31. package/dist/parser/course.js +88 -28
  32. package/dist/parser/course.js.map +1 -1
  33. package/dist/parser/frontmatter.d.ts +1 -1
  34. package/dist/parser/frontmatter.js +38 -12
  35. package/dist/parser/frontmatter.js.map +1 -1
  36. package/dist/parser/learning-outcome.d.ts +12 -2
  37. package/dist/parser/learning-outcome.js +177 -96
  38. package/dist/parser/learning-outcome.js.map +1 -1
  39. package/dist/parser/lens.d.ts +52 -28
  40. package/dist/parser/lens.js +283 -260
  41. package/dist/parser/lens.js.map +1 -1
  42. package/dist/parser/module.d.ts +7 -15
  43. package/dist/parser/module.js +139 -170
  44. package/dist/parser/module.js.map +1 -1
  45. package/dist/parser/sections.d.ts +14 -1
  46. package/dist/parser/sections.js +94 -81
  47. package/dist/parser/sections.js.map +1 -1
  48. package/dist/parser/video-transcript.d.ts +2 -1
  49. package/dist/parser/video-transcript.js +10 -6
  50. package/dist/parser/video-transcript.js.map +1 -1
  51. package/dist/reference-graph.d.ts +8 -0
  52. package/dist/reference-graph.js +105 -0
  53. package/dist/reference-graph.js.map +1 -0
  54. package/dist/validator/card-module-membership.d.ts +2 -0
  55. package/dist/validator/card-module-membership.js +80 -0
  56. package/dist/validator/card-module-membership.js.map +1 -0
  57. package/dist/validator/directives.d.ts +12 -0
  58. package/dist/validator/directives.js +428 -0
  59. package/dist/validator/directives.js.map +1 -0
  60. package/dist/validator/field-values.js +14 -0
  61. package/dist/validator/field-values.js.map +1 -1
  62. package/dist/validator/output-integrity.js +5 -5
  63. package/dist/validator/output-integrity.js.map +1 -1
  64. package/dist/validator/segment-fields.d.ts +1 -1
  65. package/dist/validator/segment-fields.js +2 -2
  66. package/dist/validator/segment-fields.js.map +1 -1
  67. package/dist/validator/test-segments.d.ts +12 -0
  68. package/dist/validator/test-segments.js +40 -0
  69. package/dist/validator/test-segments.js.map +1 -0
  70. package/dist/validator/url-reachability.d.ts +2 -1
  71. package/dist/validator/url-reachability.js +42 -20
  72. package/dist/validator/url-reachability.js.map +1 -1
  73. package/dist/validator/uuid.js +9 -6
  74. package/dist/validator/uuid.js.map +1 -1
  75. package/package.json +1 -1
  76. package/dist/validator/chat-precedence.d.ts +0 -9
  77. package/dist/validator/chat-precedence.js +0 -32
  78. package/dist/validator/chat-precedence.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export interface UrlToValidate {
3
3
  file: string;
4
4
  line: number;
5
5
  label: string;
6
+ allowUnreachable?: boolean;
6
7
  }
7
8
  export interface ProcessResult {
8
9
  modules: FlattenedModule[];
@@ -15,37 +16,60 @@ export interface FlattenedModule {
15
16
  title: string;
16
17
  contentId: string | null;
17
18
  sections: Section[];
19
+ sourcePath?: string;
20
+ parentSlug?: string;
21
+ parentTitle?: string;
18
22
  error?: string;
19
23
  warnings?: string[];
24
+ addToAiContext?: string[] | null;
25
+ }
26
+ /** Light co-branding for a partnership/demo course (e.g. the Iliad demo). */
27
+ export interface CoursePartner {
28
+ /** Display name of the partner org, e.g. "Iliad". Used as alt/aria text. */
29
+ name: string;
30
+ /** Big lockup logo: bare filename served from /assets/partners/, or an absolute URL/path. */
31
+ logo: string;
32
+ /** Optional small/square mark for narrow (mobile) headers; falls back to logo. */
33
+ logoSmall?: string;
34
+ /** Optional click-through URL — the logo links here when set. */
35
+ url?: string;
20
36
  }
21
37
  export interface Course {
22
38
  slug: string;
23
39
  title: string;
40
+ slugAliases?: string[];
41
+ /** Present only when both partner-name and partner-logo are set in frontmatter. */
42
+ partner?: CoursePartner;
24
43
  progression: ProgressionItem[];
25
44
  error?: string;
26
45
  }
27
46
  export interface Section {
28
- type: 'page' | 'lens-video' | 'lens-article' | 'test';
47
+ type: "lens" | "test";
48
+ displayType?: "lens-article" | "lens-video" | "lens-mixed";
29
49
  meta: SectionMeta;
30
50
  segments: Segment[];
51
+ sourcePath?: string;
31
52
  optional?: boolean;
53
+ hide?: boolean;
32
54
  feedback?: boolean;
33
55
  contentId: string | null;
34
56
  learningOutcomeId: string | null;
35
57
  learningOutcomeName: string | null;
36
- videoId: string | null;
58
+ wordCount?: number;
59
+ videoDurationSeconds?: number;
60
+ tldr?: string;
61
+ summaryForTutor?: string;
62
+ addToAiContext?: string[] | null;
63
+ addToAiContextLo?: string[] | null;
37
64
  }
38
65
  export interface SectionMeta {
39
66
  title?: string;
40
- author?: string;
41
- sourceUrl?: string;
42
- channel?: string;
43
67
  }
44
68
  export interface ProgressionItem {
45
- type: 'module' | 'meeting';
69
+ type: "module" | "meeting";
46
70
  slug?: string;
47
71
  path?: string;
48
- number?: number;
72
+ name?: string;
49
73
  optional?: boolean;
50
74
  }
51
75
  export interface ContentError {
@@ -53,37 +77,46 @@ export interface ContentError {
53
77
  line?: number;
54
78
  message: string;
55
79
  suggestion?: string;
56
- severity: 'error' | 'warning';
57
- category?: 'production' | 'wip';
80
+ severity: "error" | "warning";
81
+ category?: "production" | "wip";
58
82
  }
59
83
  export interface TextSegment {
60
- type: 'text';
84
+ type: "text";
61
85
  content: string;
62
86
  optional?: boolean;
63
87
  }
64
88
  export interface ChatSegment {
65
- type: 'chat';
89
+ type: "chat";
66
90
  instructions?: string;
67
91
  hidePreviousContentFromUser?: boolean;
68
92
  hidePreviousContentFromTutor?: boolean;
69
93
  optional?: boolean;
70
94
  }
71
- export interface ArticleExcerptSegment {
72
- type: 'article-excerpt';
95
+ export interface ArticleSegment {
96
+ type: "article";
73
97
  content: string;
74
98
  collapsed_before?: string;
75
99
  collapsed_after?: string;
100
+ title?: string;
101
+ author?: string;
102
+ sourceUrl?: string;
103
+ published?: string;
104
+ sourcePath?: string;
76
105
  optional?: boolean;
77
106
  }
78
- export interface VideoExcerptSegment {
79
- type: 'video-excerpt';
107
+ export interface VideoSegment {
108
+ type: "video";
80
109
  from: number;
81
110
  to: number | null;
82
- transcript: string;
111
+ transcript: TranscriptSentence[];
112
+ title?: string;
113
+ channel?: string;
114
+ videoId?: string;
115
+ isShort?: boolean;
83
116
  optional?: boolean;
84
117
  }
85
118
  export interface QuestionSegment {
86
- type: 'question';
119
+ type: "question";
87
120
  content: string;
88
121
  assessmentInstructions?: string;
89
122
  maxTime?: string;
@@ -92,7 +125,20 @@ export interface QuestionSegment {
92
125
  optional?: boolean;
93
126
  feedback?: boolean;
94
127
  }
95
- export type Segment = TextSegment | ChatSegment | ArticleExcerptSegment | VideoExcerptSegment | QuestionSegment;
96
- export type { ContentTier } from './validator/tier.js';
97
- export { checkTierViolation } from './validator/tier.js';
128
+ export interface RoleplaySegment {
129
+ type: "roleplay";
130
+ id: string;
131
+ content: string;
132
+ aiInstructions: string;
133
+ openingMessage?: string;
134
+ assessmentInstructions?: string;
135
+ userCustomizable?: boolean;
136
+ optional?: boolean;
137
+ feedback?: boolean;
138
+ }
139
+ export type Segment = TextSegment | ChatSegment | ArticleSegment | VideoSegment | QuestionSegment | RoleplaySegment;
140
+ import { type TranscriptSentence } from "./bundler/video.js";
141
+ export type { TranscriptSentence } from "./bundler/video.js";
142
+ export type { ContentTier } from "./validator/tier.js";
143
+ export { checkTierViolation } from "./validator/tier.js";
98
144
  export declare function processContent(files: Map<string, string>): ProcessResult;