lens-content-processor 0.33.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 +26 -1
- package/dist/authoring-markup.js +67 -16
- 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/content-schema.d.ts +3 -1
- package/dist/content-schema.js +51 -12
- package/dist/content-schema.js.map +1 -1
- package/dist/dedupe-errors.js +1 -7
- package/dist/dedupe-errors.js.map +1 -1
- package/dist/flattener/index.d.ts +23 -0
- package/dist/flattener/index.js +379 -262
- package/dist/flattener/index.js.map +1 -1
- package/dist/index.d.ts +29 -2
- package/dist/index.js +84 -15
- package/dist/index.js.map +1 -1
- package/dist/parser/article.js +13 -5
- package/dist/parser/article.js.map +1 -1
- package/dist/parser/course.js +19 -6
- package/dist/parser/course.js.map +1 -1
- package/dist/parser/learning-outcome.d.ts +0 -1
- package/dist/parser/learning-outcome.js +55 -18
- package/dist/parser/learning-outcome.js.map +1 -1
- package/dist/parser/lens.d.ts +6 -1
- package/dist/parser/lens.js +47 -41
- package/dist/parser/lens.js.map +1 -1
- package/dist/parser/module.js +9 -5
- package/dist/parser/module.js.map +1 -1
- package/dist/parser/response-segments.d.ts +54 -0
- package/dist/parser/response-segments.js +499 -0
- package/dist/parser/response-segments.js.map +1 -0
- package/dist/parser/survey.js +56 -15
- package/dist/parser/survey.js.map +1 -1
- package/dist/validator/article-structure.js +4 -18
- package/dist/validator/article-structure.js.map +1 -1
- package/dist/validator/directives.js +20 -42
- package/dist/validator/directives.js.map +1 -1
- package/dist/validator/emphasis.js +34 -55
- package/dist/validator/emphasis.js.map +1 -1
- package/dist/validator/html-tags.js +111 -103
- package/dist/validator/html-tags.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/output-integrity.d.ts +1 -1
- package/dist/validator/output-integrity.js +17 -23
- package/dist/validator/output-integrity.js.map +1 -1
- package/dist/validator/segment-fields.d.ts +4 -2
- package/dist/validator/segment-fields.js +27 -5
- package/dist/validator/segment-fields.js.map +1 -1
- package/dist/validator/test-segments.d.ts +11 -0
- package/dist/validator/test-segments.js +45 -0
- package/dist/validator/test-segments.js.map +1 -1
- package/dist/validator/uuid.d.ts +1 -2
- package/dist/validator/uuid.js +4 -6
- package/dist/validator/uuid.js.map +1 -1
- 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 +1 -1
package/dist/content-schema.js
CHANGED
|
@@ -43,13 +43,6 @@ export const CONTENT_SCHEMAS = {
|
|
|
43
43
|
"url",
|
|
44
44
|
"allowAuthorInTitle",
|
|
45
45
|
"allowUnreachableUrl",
|
|
46
|
-
"llm_reviewed",
|
|
47
|
-
"llm_review_version",
|
|
48
|
-
"llm_review_model",
|
|
49
|
-
"llm_review_digest",
|
|
50
|
-
"llm_review_source_digest",
|
|
51
|
-
"llm_review_source_fetched",
|
|
52
|
-
"llm_review_source_kind",
|
|
53
46
|
]),
|
|
54
47
|
"video-transcript": contentSchema(["title", "channel", "url"],
|
|
55
48
|
// from/to: default excerpt range applied when an embedding lens omits
|
|
@@ -86,6 +79,11 @@ export const SEGMENT_SCHEMAS = {
|
|
|
86
79
|
"hidePreviousContentFromUser",
|
|
87
80
|
"hidePreviousContentFromTutor",
|
|
88
81
|
], ["hidePreviousContentFromUser", "hidePreviousContentFromTutor"]),
|
|
82
|
+
// Deliberately NOT listed for article/video: skipEndMarker, skipStartMarker,
|
|
83
|
+
// partOfArticle. Those are processor OUTPUT fields (emitted when an article
|
|
84
|
+
// declares an inline ::video import, see src/index.ts) and must never be
|
|
85
|
+
// authorable — an author writing them as field:: config should get the
|
|
86
|
+
// normal unknown-field treatment.
|
|
89
87
|
article: segmentSchema([], ["source", "from", "to", "optional"], ["optional"]),
|
|
90
88
|
video: segmentSchema([], ["source", "from", "to", "optional"], ["optional"]),
|
|
91
89
|
question: segmentSchema(["content"], [
|
|
@@ -116,13 +114,46 @@ export const SEGMENT_SCHEMAS = {
|
|
|
116
114
|
], ["optional"]),
|
|
117
115
|
};
|
|
118
116
|
/**
|
|
119
|
-
*
|
|
117
|
+
* Response (subtyped) question segment schemas, keyed "question:<subtype>".
|
|
118
|
+
* `#### Question: Open` etc. — the same segment family in lenses, LO tests,
|
|
119
|
+
* and surveys. Kept out of SEGMENT_SCHEMAS because a bare `#### Question`
|
|
120
|
+
* stays the legacy schema there; responseSegmentSchemaKey (parser) resolves
|
|
121
|
+
* a titled question header to one of these keys for field validation.
|
|
122
|
+
*/
|
|
123
|
+
const RESPONSE_REQUIRED = ["id", "content"];
|
|
124
|
+
const RESPONSE_OPTIONAL = ["optional", "feedback-instructions"];
|
|
125
|
+
export const QUESTION_SUBTYPE_SCHEMAS = {
|
|
126
|
+
"question:open": segmentSchema(RESPONSE_REQUIRED, [
|
|
127
|
+
...RESPONSE_OPTIONAL,
|
|
128
|
+
"assessment-instructions",
|
|
129
|
+
"max-chars",
|
|
130
|
+
"max-time",
|
|
131
|
+
"placeholder",
|
|
132
|
+
"enforce-voice",
|
|
133
|
+
], ["optional", "enforce-voice"]),
|
|
134
|
+
// assessment-instructions is listed so the only message an author gets is
|
|
135
|
+
// the parser's targeted "ratings are never graded" error, not a generic
|
|
136
|
+
// unknown-field warning on top of it.
|
|
137
|
+
"question:rating": segmentSchema(RESPONSE_REQUIRED, [
|
|
138
|
+
...RESPONSE_OPTIONAL,
|
|
139
|
+
"assessment-instructions",
|
|
140
|
+
"scale",
|
|
141
|
+
"low-label",
|
|
142
|
+
"high-label",
|
|
143
|
+
], ["optional"]),
|
|
144
|
+
"question:choice": segmentSchema([...RESPONSE_REQUIRED, "options"], [...RESPONSE_OPTIONAL, "multi", "shuffle"], ["optional", "multi", "shuffle"]),
|
|
145
|
+
"question:fillblank": segmentSchema(RESPONSE_REQUIRED, [...RESPONSE_OPTIONAL, "assessment-instructions"], ["optional"]),
|
|
146
|
+
"question:ranking": segmentSchema([...RESPONSE_REQUIRED, "items"], [...RESPONSE_OPTIONAL, "assessment-instructions"], ["optional"]),
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Valid fields per segment type, derived from SEGMENT_SCHEMAS (plus the
|
|
150
|
+
* "question:<subtype>" response schemas).
|
|
120
151
|
* Used by segment-fields.ts to check for misplaced fields.
|
|
121
152
|
*/
|
|
122
|
-
export const VALID_FIELDS_BY_SEGMENT_TYPE = Object.fromEntries(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
]));
|
|
153
|
+
export const VALID_FIELDS_BY_SEGMENT_TYPE = Object.fromEntries([
|
|
154
|
+
...Object.entries(SEGMENT_SCHEMAS),
|
|
155
|
+
...Object.entries(QUESTION_SUBTYPE_SCHEMAS),
|
|
156
|
+
].map(([type, schema]) => [type, new Set(schema.allFields)]));
|
|
126
157
|
/**
|
|
127
158
|
* Section-level fields used in body sections (not frontmatter, not segments).
|
|
128
159
|
* These are fields like source:: and learningOutcomeId:: used in LO/lens sections.
|
|
@@ -150,6 +181,10 @@ export const ALL_KNOWN_FIELDS = (() => {
|
|
|
150
181
|
for (const field of schema.allFields)
|
|
151
182
|
fields.add(field);
|
|
152
183
|
}
|
|
184
|
+
for (const schema of Object.values(QUESTION_SUBTYPE_SCHEMAS)) {
|
|
185
|
+
for (const field of schema.allFields)
|
|
186
|
+
fields.add(field);
|
|
187
|
+
}
|
|
153
188
|
for (const schema of Object.values(SURVEY_SEGMENT_SCHEMAS)) {
|
|
154
189
|
for (const field of schema.allFields)
|
|
155
190
|
fields.add(field);
|
|
@@ -167,6 +202,10 @@ export const ALL_BOOLEAN_FIELDS = (() => {
|
|
|
167
202
|
for (const field of schema.booleanFields)
|
|
168
203
|
fields.add(field);
|
|
169
204
|
}
|
|
205
|
+
for (const schema of Object.values(QUESTION_SUBTYPE_SCHEMAS)) {
|
|
206
|
+
for (const field of schema.booleanFields)
|
|
207
|
+
fields.add(field);
|
|
208
|
+
}
|
|
170
209
|
for (const schema of Object.values(SURVEY_SEGMENT_SCHEMAS)) {
|
|
171
210
|
for (const field of schema.booleanFields)
|
|
172
211
|
fields.add(field);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-schema.js","sourceRoot":"","sources":["../src/content-schema.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAsBlG,SAAS,aAAa,CACpB,QAAkB,EAClB,QAAkB;IAElB,OAAO;QACL,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,QAAkB,EAClB,QAAkB,EAClB,aAAuB;IAEvB,OAAO;QACL,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC;QACrC,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAsC;IAChE,MAAM,EAAE,aAAa,CACnB,CAAC,MAAM,EAAE,OAAO,CAAC,EACjB,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAC1C;IACD,MAAM,EAAE,aAAa,CACnB,CAAC,MAAM,EAAE,OAAO,CAAC,EACjB;QACE,IAAI;QACJ,cAAc;QACd,MAAM;QACN,cAAc;QACd,cAAc;QACd,oBAAoB;QACpB,aAAa;KACd,CACF;IACD,IAAI,EAAE,aAAa,CACjB,CAAC,IAAI,CAAC,EACN;QACE,OAAO;QACP,MAAM;QACN,mBAAmB;QACnB,MAAM;QACN,mBAAmB;QACnB,kBAAkB;QAClB,iBAAiB;QACjB,eAAe;KAChB,CACF;IACD,kBAAkB,EAAE,aAAa,CAC/B,CAAC,IAAI,CAAC,EACN,CAAC,YAAY,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAC1E;IACD,OAAO,EAAE,aAAa,CACpB,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,EAC9C;QACE,SAAS;QACT,aAAa;QACb,MAAM;QACN,KAAK;QACL,oBAAoB;QACpB,qBAAqB;
|
|
1
|
+
{"version":3,"file":"content-schema.js","sourceRoot":"","sources":["../src/content-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/dedupe-errors.js
CHANGED
|
@@ -14,12 +14,6 @@ export function dedupeErrors(errors) {
|
|
|
14
14
|
const seen = new Set();
|
|
15
15
|
const deduped = [];
|
|
16
16
|
for (const error of errors) {
|
|
17
|
-
// Output-integrity validation can see the same flattened segment with a
|
|
18
|
-
// resolved section title in the standalone pass and an empty title in an
|
|
19
|
-
// embedding module pass. The title is presentation context, not problem
|
|
20
|
-
// identity; retain the segment kind and ordinal so distinct segments are
|
|
21
|
-
// still reported independently.
|
|
22
|
-
const messageKey = error.message.replace(/^(Empty (?:text|article) segment|Empty video transcript) in ".*" (\(segment \d+\))$/, "$1 $2");
|
|
23
17
|
// \x1f (unit separator) joins the fields: file paths and messages can
|
|
24
18
|
// themselves contain spaces, so a printable separator could let two
|
|
25
19
|
// distinct errors collapse to the same key.
|
|
@@ -27,7 +21,7 @@ export function dedupeErrors(errors) {
|
|
|
27
21
|
error.file,
|
|
28
22
|
error.line ?? "",
|
|
29
23
|
error.severity,
|
|
30
|
-
|
|
24
|
+
error.message,
|
|
31
25
|
].join("\x1f");
|
|
32
26
|
if (seen.has(key))
|
|
33
27
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dedupe-errors.js","sourceRoot":"","sources":["../src/dedupe-errors.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,MAAsB;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,
|
|
1
|
+
{"version":3,"file":"dedupe-errors.js","sourceRoot":"","sources":["../src/dedupe-errors.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,MAAsB;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,sEAAsE;QACtE,oEAAoE;QACpE,4CAA4C;QAC5C,MAAM,GAAG,GAAG;YACV,KAAK,CAAC,IAAI;YACV,KAAK,CAAC,IAAI,IAAI,EAAE;YAChB,KAAK,CAAC,QAAQ;YACd,KAAK,CAAC,OAAO;SACd,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -29,6 +29,29 @@ export declare function splitAtBoundaries(items: FlatItem[], parentSlug: string,
|
|
|
29
29
|
* Flatten a module by resolving all references to Learning Outcomes, Lenses, and content.
|
|
30
30
|
*/
|
|
31
31
|
export declare function flattenModule(modulePath: string, files: Map<string, string>, visitedPaths?: Set<string>, tierMap?: Map<string, ContentTier>): FlattenModuleResult;
|
|
32
|
+
interface ExpandPromptImportsResult {
|
|
33
|
+
/** The field value with prompt imports inlined, or null when an import failed. */
|
|
34
|
+
value: string | null;
|
|
35
|
+
errors: ContentError[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Expand prompt imports in a prompt-capable field (chat instructions::,
|
|
39
|
+
* roleplay ai-instructions::, question/roleplay assessment-instructions::).
|
|
40
|
+
* Two forms:
|
|
41
|
+
*
|
|
42
|
+
* - Sole wikilink (the whole field is one wikilink): strict import — it must
|
|
43
|
+
* resolve to a valid prompts/ file. This is the original prompt-import
|
|
44
|
+
* form and behaves exactly as before.
|
|
45
|
+
* - Mixed text: each wikilink whose target resolves into a prompts/
|
|
46
|
+
* directory is replaced with that prompt file's body; the surrounding /
|
|
47
|
+
* interleaved text is preserved verbatim (no separators added — authors
|
|
48
|
+
* control spacing around the wikilink, and prompt bodies are trimmed).
|
|
49
|
+
* Targeting prompts/ is the import signal: other wikilinks stay literal
|
|
50
|
+
* text. A wikilink that looks like a prompts/ target but is malformed or
|
|
51
|
+
* doesn't resolve is an error, and the segment is dropped like a failed
|
|
52
|
+
* sole import.
|
|
53
|
+
*/
|
|
54
|
+
export declare function expandPromptImports(value: string, fieldName: string, lensPath: string, files: Map<string, string>, tierMap?: Map<string, ContentTier>): ExpandPromptImportsResult;
|
|
32
55
|
/**
|
|
33
56
|
* Flatten a single Lens file into a FlattenedModule.
|
|
34
57
|
*/
|