lens-content-processor 0.2.2 → 0.4.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/bundler/article.d.ts +7 -2
- package/dist/bundler/article.js +23 -24
- package/dist/bundler/article.js.map +1 -1
- package/dist/cli.d.ts +1 -2
- package/dist/cli.js +6 -10
- package/dist/cli.js.map +1 -1
- package/dist/content-schema.js +8 -6
- package/dist/content-schema.js.map +1 -1
- package/dist/flattener/index.d.ts +41 -2
- package/dist/flattener/index.js +699 -48
- package/dist/flattener/index.js.map +1 -1
- package/dist/flattener/test-helpers.d.ts +23 -0
- package/dist/flattener/test-helpers.js +58 -0
- package/dist/flattener/test-helpers.js.map +1 -0
- package/dist/fs/read-vault.d.ts +1 -4
- package/dist/fs/read-vault.js +4 -8
- package/dist/fs/read-vault.js.map +1 -1
- package/dist/index.d.ts +34 -6
- package/dist/index.js +170 -33
- package/dist/index.js.map +1 -1
- package/dist/parser/article.d.ts +1 -1
- package/dist/parser/article.js +14 -4
- package/dist/parser/article.js.map +1 -1
- package/dist/parser/course.d.ts +2 -2
- package/dist/parser/course.js +16 -23
- package/dist/parser/course.js.map +1 -1
- package/dist/parser/learning-outcome.d.ts +11 -2
- package/dist/parser/learning-outcome.js +135 -62
- package/dist/parser/learning-outcome.js.map +1 -1
- package/dist/parser/lens.d.ts +63 -1
- package/dist/parser/lens.js +138 -11
- package/dist/parser/lens.js.map +1 -1
- package/dist/parser/module.d.ts +1 -1
- package/dist/parser/module.js +14 -9
- package/dist/parser/module.js.map +1 -1
- package/dist/parser/sections.d.ts +2 -0
- package/dist/parser/sections.js +57 -21
- package/dist/parser/sections.js.map +1 -1
- package/dist/parser/video-transcript.js +3 -0
- package/dist/parser/video-transcript.js.map +1 -1
- package/dist/parser/wikilink.js +6 -1
- package/dist/parser/wikilink.js.map +1 -1
- package/dist/utils/slug.d.ts +5 -0
- package/dist/utils/slug.js +16 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/validator/chat-precedence.d.ts +9 -0
- package/dist/validator/chat-precedence.js +32 -0
- package/dist/validator/chat-precedence.js.map +1 -0
- package/dist/validator/directives.d.ts +12 -0
- package/dist/validator/directives.js +428 -0
- package/dist/validator/directives.js.map +1 -0
- package/dist/validator/field-typos.js +0 -9
- package/dist/validator/field-typos.js.map +1 -1
- package/dist/validator/field-values.js +14 -0
- package/dist/validator/field-values.js.map +1 -1
- package/dist/validator/tier.d.ts +18 -0
- package/dist/validator/tier.js +74 -0
- package/dist/validator/tier.js.map +1 -0
- package/dist/validator/url-reachability.js +3 -1
- package/dist/validator/url-reachability.js.map +1 -1
- package/dist/validator/uuid.js +9 -6
- package/dist/validator/uuid.js.map +1 -1
- package/package.json +5 -5
|
@@ -12,9 +12,14 @@ export interface CollapsedExcerpt {
|
|
|
12
12
|
error?: ContentError;
|
|
13
13
|
}
|
|
14
14
|
export interface ExcerptInput {
|
|
15
|
-
from
|
|
16
|
-
to
|
|
15
|
+
from?: string;
|
|
16
|
+
to?: string;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Strip frontmatter from article content.
|
|
20
|
+
* Frontmatter is enclosed in --- markers at the start of the file.
|
|
21
|
+
*/
|
|
22
|
+
export declare function stripFrontmatter(article: string): string;
|
|
18
23
|
/**
|
|
19
24
|
* Extract content from an article between two anchor texts.
|
|
20
25
|
*
|
package/dist/bundler/article.js
CHANGED
|
@@ -1,22 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* (which produce curly quotes) and source articles (which may use straight quotes).
|
|
5
|
-
*/
|
|
6
|
-
function normalizeQuotes(text) {
|
|
7
|
-
return text
|
|
8
|
-
.replaceAll('\u2018', "'") // left single quote
|
|
9
|
-
.replaceAll('\u2019', "'") // right single quote (smart apostrophe)
|
|
10
|
-
.replaceAll('\u201C', '"') // left double quote
|
|
11
|
-
.replaceAll('\u201D', '"'); // right double quote
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Find all occurrences of a substring in text (case-insensitive, quote-normalized).
|
|
15
|
-
* Returns array of start indices in the ORIGINAL text.
|
|
2
|
+
* Find all occurrences of a substring in text (case-insensitive).
|
|
3
|
+
* Returns array of start indices.
|
|
16
4
|
*/
|
|
17
5
|
function findAllOccurrences(text, anchor) {
|
|
18
|
-
const lowerText =
|
|
19
|
-
const lowerAnchor =
|
|
6
|
+
const lowerText = text.toLowerCase();
|
|
7
|
+
const lowerAnchor = anchor.toLowerCase();
|
|
20
8
|
const indices = [];
|
|
21
9
|
let pos = 0;
|
|
22
10
|
while (true) {
|
|
@@ -32,7 +20,7 @@ function findAllOccurrences(text, anchor) {
|
|
|
32
20
|
* Strip frontmatter from article content.
|
|
33
21
|
* Frontmatter is enclosed in --- markers at the start of the file.
|
|
34
22
|
*/
|
|
35
|
-
function stripFrontmatter(article) {
|
|
23
|
+
export function stripFrontmatter(article) {
|
|
36
24
|
const match = article.match(/^---\n[\s\S]*?\n---\n([\s\S]*)$/);
|
|
37
25
|
return match ? match[1].trim() : article.trim();
|
|
38
26
|
}
|
|
@@ -128,7 +116,7 @@ export function extractArticleExcerpt(article, fromAnchor, toAnchor, file) {
|
|
|
128
116
|
// At this point we know both fromAnchor and toAnchor are defined (not undefined)
|
|
129
117
|
const fromAnchorStr = fromAnchor;
|
|
130
118
|
const toAnchorStr = toAnchor;
|
|
131
|
-
const fromOccurrences = findAllOccurrences(
|
|
119
|
+
const fromOccurrences = findAllOccurrences(body, fromAnchorStr);
|
|
132
120
|
if (fromOccurrences.length === 0) {
|
|
133
121
|
return {
|
|
134
122
|
error: {
|
|
@@ -151,7 +139,7 @@ export function extractArticleExcerpt(article, fromAnchor, toAnchor, file) {
|
|
|
151
139
|
}
|
|
152
140
|
const startIndex = fromOccurrences[0];
|
|
153
141
|
// Search for end anchor only AFTER the start anchor (case-insensitive)
|
|
154
|
-
const afterStart =
|
|
142
|
+
const afterStart = body.slice(startIndex);
|
|
155
143
|
const toOccurrences = findAllOccurrences(afterStart, toAnchorStr);
|
|
156
144
|
if (toOccurrences.length === 0) {
|
|
157
145
|
return {
|
|
@@ -177,7 +165,7 @@ export function extractArticleExcerpt(article, fromAnchor, toAnchor, file) {
|
|
|
177
165
|
const relativeToIndex = toOccurrences[0];
|
|
178
166
|
const endIndex = startIndex + relativeToIndex + toAnchorStr.length;
|
|
179
167
|
// Extract the content between (and including) the anchors
|
|
180
|
-
const content =
|
|
168
|
+
const content = body.slice(startIndex, endIndex);
|
|
181
169
|
return {
|
|
182
170
|
content,
|
|
183
171
|
startIndex,
|
|
@@ -193,6 +181,7 @@ export function extractArticleExcerpt(article, fromAnchor, toAnchor, file) {
|
|
|
193
181
|
* @returns Array of excerpts with collapsed_before/collapsed_after fields
|
|
194
182
|
*/
|
|
195
183
|
export function bundleArticleWithCollapsed(article, excerpts, file) {
|
|
184
|
+
const body = stripFrontmatter(article);
|
|
196
185
|
// First, extract all excerpts and their positions
|
|
197
186
|
const extractedExcerpts = [];
|
|
198
187
|
for (const excerpt of excerpts) {
|
|
@@ -227,11 +216,21 @@ export function bundleArticleWithCollapsed(article, excerpts, file) {
|
|
|
227
216
|
const result = {
|
|
228
217
|
content: extracted.content,
|
|
229
218
|
};
|
|
230
|
-
// Calculate collapsed_before
|
|
231
|
-
if (i
|
|
219
|
+
// Calculate collapsed_before
|
|
220
|
+
if (i === 0) {
|
|
221
|
+
// First excerpt: content from body start to this excerpt start
|
|
222
|
+
if (extracted.startIndex > 0) {
|
|
223
|
+
const collapsedBefore = body.slice(0, extracted.startIndex).trim();
|
|
224
|
+
if (collapsedBefore.length > 0) {
|
|
225
|
+
result.collapsed_before = collapsedBefore;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
// Subsequent excerpts: content between previous excerpt end and this excerpt start
|
|
232
231
|
const prevExcerpt = extractedExcerpts[i - 1];
|
|
233
232
|
if (!prevExcerpt.error && prevExcerpt.endIndex < extracted.startIndex) {
|
|
234
|
-
const collapsedBefore =
|
|
233
|
+
const collapsedBefore = body.slice(prevExcerpt.endIndex, extracted.startIndex).trim();
|
|
235
234
|
if (collapsedBefore.length > 0) {
|
|
236
235
|
result.collapsed_before = collapsedBefore;
|
|
237
236
|
}
|
|
@@ -240,7 +239,7 @@ export function bundleArticleWithCollapsed(article, excerpts, file) {
|
|
|
240
239
|
// Calculate collapsed_after (content after this excerpt to next excerpt or end)
|
|
241
240
|
// Only set for the last excerpt
|
|
242
241
|
if (i === extractedExcerpts.length - 1) {
|
|
243
|
-
const collapsedAfter =
|
|
242
|
+
const collapsedAfter = body.slice(extracted.endIndex).trim();
|
|
244
243
|
if (collapsedAfter.length > 0) {
|
|
245
244
|
result.collapsed_after = collapsedAfter;
|
|
246
245
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article.js","sourceRoot":"","sources":["../../src/bundler/article.ts"],"names":[],"mappings":"AAsBA
|
|
1
|
+
{"version":3,"file":"article.js","sourceRoot":"","sources":["../../src/bundler/article.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { ProcessResult } from './index.js';
|
|
2
|
+
import { type ProcessResult } from './index.js';
|
|
3
3
|
export interface CliOptions {
|
|
4
4
|
vaultPath: string | null;
|
|
5
5
|
outputPath: string | null;
|
|
6
|
-
includeWip: boolean;
|
|
7
6
|
stdin: boolean;
|
|
8
7
|
}
|
|
9
8
|
export declare function parseArgs(argv: string[]): CliOptions;
|
package/dist/cli.js
CHANGED
|
@@ -8,24 +8,20 @@ export function parseArgs(argv) {
|
|
|
8
8
|
const args = argv.slice(2);
|
|
9
9
|
let vaultPath = null;
|
|
10
10
|
let outputPath = null;
|
|
11
|
-
let
|
|
12
|
-
let stdin = false; // NEW
|
|
11
|
+
let stdin = false;
|
|
13
12
|
for (let i = 0; i < args.length; i++) {
|
|
14
13
|
if (args[i] === '--output' || args[i] === '-o') {
|
|
15
14
|
outputPath = args[i + 1] || null;
|
|
16
15
|
i++; // skip next arg
|
|
17
16
|
}
|
|
18
|
-
else if (args[i] === '--
|
|
19
|
-
includeWip = true;
|
|
20
|
-
}
|
|
21
|
-
else if (args[i] === '--stdin') { // NEW
|
|
17
|
+
else if (args[i] === '--stdin') {
|
|
22
18
|
stdin = true;
|
|
23
19
|
}
|
|
24
20
|
else if (!args[i].startsWith('-')) {
|
|
25
21
|
vaultPath = args[i];
|
|
26
22
|
}
|
|
27
23
|
}
|
|
28
|
-
return { vaultPath, outputPath,
|
|
24
|
+
return { vaultPath, outputPath, stdin };
|
|
29
25
|
}
|
|
30
26
|
async function readStdin() {
|
|
31
27
|
const chunks = [];
|
|
@@ -46,14 +42,14 @@ export async function run(options) {
|
|
|
46
42
|
if (!options.vaultPath) {
|
|
47
43
|
throw new Error('Vault path is required (or use --stdin)');
|
|
48
44
|
}
|
|
49
|
-
files = await readVaultFiles(options.vaultPath
|
|
45
|
+
files = await readVaultFiles(options.vaultPath);
|
|
50
46
|
}
|
|
51
|
-
return processContent(files
|
|
47
|
+
return processContent(files);
|
|
52
48
|
}
|
|
53
49
|
async function main() {
|
|
54
50
|
const options = parseArgs(process.argv);
|
|
55
51
|
if (!options.vaultPath && !options.stdin) {
|
|
56
|
-
console.error('Usage: npx tsx src/cli.ts <vault-path> [--output <file>]
|
|
52
|
+
console.error('Usage: npx tsx src/cli.ts <vault-path> [--output <file>]');
|
|
57
53
|
console.error(' npx tsx src/cli.ts --stdin [--output <file>]');
|
|
58
54
|
process.exit(1);
|
|
59
55
|
}
|
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,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/content-schema.js
CHANGED
|
@@ -6,18 +6,20 @@ function segmentSchema(required, optional, booleanFields) {
|
|
|
6
6
|
return { requiredFields: required, optionalFields: optional, allFields: [...required, ...optional], booleanFields };
|
|
7
7
|
}
|
|
8
8
|
export const CONTENT_SCHEMAS = {
|
|
9
|
-
'module': contentSchema(['slug', 'title'], ['contentId', 'id', 'discussion']),
|
|
10
|
-
'course': contentSchema(['slug', 'title'], ['id']),
|
|
11
|
-
'lens': contentSchema(['id'], []),
|
|
12
|
-
'learning-outcome': contentSchema(['id'], ['discussion', 'learning-outcome']),
|
|
13
|
-
'article': contentSchema(['title', 'author', 'source_url'
|
|
14
|
-
'video-transcript': contentSchema(['title', 'channel', 'url'], []),
|
|
9
|
+
'module': contentSchema(['slug', 'title'], ['contentId', 'id', 'discussion', 'tags']),
|
|
10
|
+
'course': contentSchema(['slug', 'title'], ['id', 'tags']),
|
|
11
|
+
'lens': contentSchema(['id'], ['tldr', 'tags']),
|
|
12
|
+
'learning-outcome': contentSchema(['id'], ['discussion', 'learning-outcome', 'tags']),
|
|
13
|
+
'article': contentSchema(['title', 'author', 'source_url', 'published'], ['created', 'description', 'tags', 'url']),
|
|
14
|
+
'video-transcript': contentSchema(['title', 'channel', 'url'], ['tags']),
|
|
15
15
|
};
|
|
16
16
|
export const SEGMENT_SCHEMAS = {
|
|
17
17
|
'text': segmentSchema(['content'], ['optional'], ['optional']),
|
|
18
18
|
'chat': segmentSchema(['instructions'], ['optional', 'hidePreviousContentFromUser', 'hidePreviousContentFromTutor'], ['optional', 'hidePreviousContentFromUser', 'hidePreviousContentFromTutor']),
|
|
19
19
|
'article-excerpt': segmentSchema([], ['from', 'to', 'optional'], ['optional']),
|
|
20
20
|
'video-excerpt': segmentSchema(['to'], ['from', 'optional'], ['optional']),
|
|
21
|
+
'question': segmentSchema(['content'], ['assessment-instructions', 'max-time', 'max-chars', 'enforce-voice', 'optional', 'feedback'], ['enforce-voice', 'optional', 'feedback']),
|
|
22
|
+
'roleplay': segmentSchema(['id', 'content', 'ai-instructions'], ['opening-message', 'assessment-instructions', 'optional', 'feedback'], ['optional', 'feedback']),
|
|
21
23
|
};
|
|
22
24
|
/**
|
|
23
25
|
* Valid fields per segment type, derived from SEGMENT_SCHEMAS.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-schema.js","sourceRoot":"","sources":["../src/content-schema.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAsBlG,SAAS,aAAa,CAAC,QAAkB,EAAE,QAAkB;IAC3D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;AACvG,CAAC;AAED,SAAS,aAAa,CAAC,QAAkB,EAAE,QAAkB,EAAE,aAAuB;IACpF,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;AACtH,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAsC;IAChE,QAAQ,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"content-schema.js","sourceRoot":"","sources":["../src/content-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,28 @@
|
|
|
1
|
-
import type { FlattenedModule, ContentError } from '../index.js';
|
|
1
|
+
import type { FlattenedModule, Section, ContentError } from '../index.js';
|
|
2
|
+
import type { ContentTier } from '../validator/tier.js';
|
|
3
|
+
import { type ParsedLens } from '../parser/lens.js';
|
|
2
4
|
export interface FlattenModuleResult {
|
|
3
5
|
module: FlattenedModule | null;
|
|
6
|
+
modules: FlattenedModule[];
|
|
4
7
|
errors: ContentError[];
|
|
5
8
|
}
|
|
9
|
+
export type BoundaryMarker = {
|
|
10
|
+
__boundary: true;
|
|
11
|
+
title: string;
|
|
12
|
+
customSlug?: string;
|
|
13
|
+
};
|
|
14
|
+
export type FlatItem = Section | BoundaryMarker;
|
|
15
|
+
export declare function isBoundary(item: FlatItem): item is BoundaryMarker;
|
|
16
|
+
export declare function validateBoundaries(items: FlatItem[], file: string): ContentError[];
|
|
17
|
+
interface VirtualModuleGroup {
|
|
18
|
+
slug: string;
|
|
19
|
+
title: string;
|
|
20
|
+
parentSlug: string;
|
|
21
|
+
parentTitle: string;
|
|
22
|
+
sections: Section[];
|
|
23
|
+
contentId: string | null;
|
|
24
|
+
}
|
|
25
|
+
export declare function splitAtBoundaries(items: FlatItem[], parentSlug: string, parentTitle: string): VirtualModuleGroup[];
|
|
6
26
|
/**
|
|
7
27
|
* Flatten a module by resolving all references to Learning Outcomes, Lenses, and content.
|
|
8
28
|
*
|
|
@@ -17,4 +37,23 @@ export interface FlattenModuleResult {
|
|
|
17
37
|
* @param visitedPaths - Optional set of already-visited paths for cycle detection
|
|
18
38
|
* @returns Flattened module with resolved sections and segments, plus any errors
|
|
19
39
|
*/
|
|
20
|
-
export declare function flattenModule(modulePath: string, files: Map<string, string>, visitedPaths?: Set<string>): FlattenModuleResult;
|
|
40
|
+
export declare function flattenModule(modulePath: string, files: Map<string, string>, visitedPaths?: Set<string>, tierMap?: Map<string, ContentTier>): FlattenModuleResult;
|
|
41
|
+
/**
|
|
42
|
+
* Flatten a single Lens file into a FlattenedModule.
|
|
43
|
+
*
|
|
44
|
+
* This wraps a standalone Lens as a single-section module so it can be
|
|
45
|
+
* rendered by the frontend using the existing Module.tsx component.
|
|
46
|
+
*
|
|
47
|
+
* The resulting module has:
|
|
48
|
+
* - slug: 'lens/' + fileNameToSlug(lensPath)
|
|
49
|
+
* - title: extracted from source metadata or lens header
|
|
50
|
+
* - sections: exactly one section (lens-article, lens-video, or page)
|
|
51
|
+
*
|
|
52
|
+
* @param lensPath - Path to the lens file within the files Map
|
|
53
|
+
* @param files - Map of all file paths to their content
|
|
54
|
+
* @param tierMap - Optional tier map for filtering ignored content
|
|
55
|
+
* @param preParsedLens - Optional pre-parsed lens to avoid re-parsing
|
|
56
|
+
* @returns Flattened module with a single section, plus any errors
|
|
57
|
+
*/
|
|
58
|
+
export declare function flattenLens(lensPath: string, files: Map<string, string>, tierMap?: Map<string, ContentTier>, preParsedLens?: ParsedLens): FlattenModuleResult;
|
|
59
|
+
export {};
|