learngraph 0.1.1 → 0.3.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/LICENSE +190 -21
- package/README.md +165 -3
- package/dist/cjs/llm/adapters/anthropic.js +124 -0
- package/dist/cjs/llm/adapters/anthropic.js.map +1 -0
- package/dist/cjs/llm/adapters/base.js +100 -0
- package/dist/cjs/llm/adapters/base.js.map +1 -0
- package/dist/cjs/llm/adapters/index.js +22 -0
- package/dist/cjs/llm/adapters/index.js.map +1 -0
- package/dist/cjs/llm/adapters/ollama.js +149 -0
- package/dist/cjs/llm/adapters/ollama.js.map +1 -0
- package/dist/cjs/llm/adapters/openai.js +126 -0
- package/dist/cjs/llm/adapters/openai.js.map +1 -0
- package/dist/cjs/llm/index.js +34 -5
- package/dist/cjs/llm/index.js.map +1 -1
- package/dist/cjs/llm/orchestrator.js +219 -0
- package/dist/cjs/llm/orchestrator.js.map +1 -0
- package/dist/cjs/llm/prompts.js +367 -0
- package/dist/cjs/llm/prompts.js.map +1 -0
- package/dist/cjs/parsers/base.js +189 -0
- package/dist/cjs/parsers/base.js.map +1 -0
- package/dist/cjs/parsers/demo.js +159 -0
- package/dist/cjs/parsers/demo.js.map +1 -0
- package/dist/cjs/parsers/extractor.js +191 -0
- package/dist/cjs/parsers/extractor.js.map +1 -0
- package/dist/cjs/parsers/index.js +43 -4
- package/dist/cjs/parsers/index.js.map +1 -1
- package/dist/cjs/parsers/json.js +157 -0
- package/dist/cjs/parsers/json.js.map +1 -0
- package/dist/cjs/parsers/markdown.js +168 -0
- package/dist/cjs/parsers/markdown.js.map +1 -0
- package/dist/cjs/parsers/samples.js +139 -0
- package/dist/cjs/parsers/samples.js.map +1 -0
- package/dist/cjs/storage/base.js +231 -0
- package/dist/cjs/storage/base.js.map +1 -0
- package/dist/cjs/storage/errors.js +128 -0
- package/dist/cjs/storage/errors.js.map +1 -0
- package/dist/cjs/storage/index.js +92 -5
- package/dist/cjs/storage/index.js.map +1 -1
- package/dist/cjs/storage/levelgraph.js +855 -0
- package/dist/cjs/storage/levelgraph.js.map +1 -0
- package/dist/cjs/storage/memory.js +447 -0
- package/dist/cjs/storage/memory.js.map +1 -0
- package/dist/cjs/storage/neo4j.js +866 -0
- package/dist/cjs/storage/neo4j.js.map +1 -0
- package/dist/cjs/storage/seeds.js +565 -0
- package/dist/cjs/storage/seeds.js.map +1 -0
- package/dist/cjs/types/llm.js +8 -0
- package/dist/cjs/types/llm.js.map +1 -0
- package/dist/cjs/types/parser.js +8 -0
- package/dist/cjs/types/parser.js.map +1 -0
- package/dist/esm/llm/adapters/anthropic.js +119 -0
- package/dist/esm/llm/adapters/anthropic.js.map +1 -0
- package/dist/esm/llm/adapters/base.js +95 -0
- package/dist/esm/llm/adapters/base.js.map +1 -0
- package/dist/esm/llm/adapters/index.js +10 -0
- package/dist/esm/llm/adapters/index.js.map +1 -0
- package/dist/esm/llm/adapters/ollama.js +144 -0
- package/dist/esm/llm/adapters/ollama.js.map +1 -0
- package/dist/esm/llm/adapters/openai.js +121 -0
- package/dist/esm/llm/adapters/openai.js.map +1 -0
- package/dist/esm/llm/index.js +12 -6
- package/dist/esm/llm/index.js.map +1 -1
- package/dist/esm/llm/orchestrator.js +214 -0
- package/dist/esm/llm/orchestrator.js.map +1 -0
- package/dist/esm/llm/prompts.js +360 -0
- package/dist/esm/llm/prompts.js.map +1 -0
- package/dist/esm/parsers/base.js +179 -0
- package/dist/esm/parsers/base.js.map +1 -0
- package/dist/esm/parsers/demo.js +154 -0
- package/dist/esm/parsers/demo.js.map +1 -0
- package/dist/esm/parsers/extractor.js +187 -0
- package/dist/esm/parsers/extractor.js.map +1 -0
- package/dist/esm/parsers/index.js +24 -5
- package/dist/esm/parsers/index.js.map +1 -1
- package/dist/esm/parsers/json.js +153 -0
- package/dist/esm/parsers/json.js.map +1 -0
- package/dist/esm/parsers/markdown.js +164 -0
- package/dist/esm/parsers/markdown.js.map +1 -0
- package/dist/esm/parsers/samples.js +136 -0
- package/dist/esm/parsers/samples.js.map +1 -0
- package/dist/esm/storage/base.js +221 -0
- package/dist/esm/storage/base.js.map +1 -0
- package/dist/esm/storage/errors.js +116 -0
- package/dist/esm/storage/errors.js.map +1 -0
- package/dist/esm/storage/index.js +71 -6
- package/dist/esm/storage/index.js.map +1 -1
- package/dist/esm/storage/levelgraph.js +818 -0
- package/dist/esm/storage/levelgraph.js.map +1 -0
- package/dist/esm/storage/memory.js +443 -0
- package/dist/esm/storage/memory.js.map +1 -0
- package/dist/esm/storage/neo4j.js +829 -0
- package/dist/esm/storage/neo4j.js.map +1 -0
- package/dist/esm/storage/seeds.js +561 -0
- package/dist/esm/storage/seeds.js.map +1 -0
- package/dist/esm/types/llm.js +7 -0
- package/dist/esm/types/llm.js.map +1 -0
- package/dist/esm/types/parser.js +7 -0
- package/dist/esm/types/parser.js.map +1 -0
- package/dist/types/llm/adapters/anthropic.d.ts +21 -0
- package/dist/types/llm/adapters/anthropic.d.ts.map +1 -0
- package/dist/types/llm/adapters/base.d.ts +46 -0
- package/dist/types/llm/adapters/base.d.ts.map +1 -0
- package/dist/types/llm/adapters/index.d.ts +11 -0
- package/dist/types/llm/adapters/index.d.ts.map +1 -0
- package/dist/types/llm/adapters/ollama.d.ts +30 -0
- package/dist/types/llm/adapters/ollama.d.ts.map +1 -0
- package/dist/types/llm/adapters/openai.d.ts +22 -0
- package/dist/types/llm/adapters/openai.d.ts.map +1 -0
- package/dist/types/llm/index.d.ts +5 -0
- package/dist/types/llm/index.d.ts.map +1 -1
- package/dist/types/llm/orchestrator.d.ts +35 -0
- package/dist/types/llm/orchestrator.d.ts.map +1 -0
- package/dist/types/llm/prompts.d.ts +269 -0
- package/dist/types/llm/prompts.d.ts.map +1 -0
- package/dist/types/parsers/base.d.ts +39 -0
- package/dist/types/parsers/base.d.ts.map +1 -0
- package/dist/types/parsers/demo.d.ts +87 -0
- package/dist/types/parsers/demo.d.ts.map +1 -0
- package/dist/types/parsers/extractor.d.ts +43 -0
- package/dist/types/parsers/extractor.d.ts.map +1 -0
- package/dist/types/parsers/index.d.ts +10 -0
- package/dist/types/parsers/index.d.ts.map +1 -1
- package/dist/types/parsers/json.d.ts +71 -0
- package/dist/types/parsers/json.d.ts.map +1 -0
- package/dist/types/parsers/markdown.d.ts +43 -0
- package/dist/types/parsers/markdown.d.ts.map +1 -0
- package/dist/types/parsers/samples.d.ts +27 -0
- package/dist/types/parsers/samples.d.ts.map +1 -0
- package/dist/types/storage/base.d.ts +39 -0
- package/dist/types/storage/base.d.ts.map +1 -0
- package/dist/types/storage/errors.d.ts +74 -0
- package/dist/types/storage/errors.d.ts.map +1 -0
- package/dist/types/storage/index.d.ts +50 -2
- package/dist/types/storage/index.d.ts.map +1 -1
- package/dist/types/storage/levelgraph.d.ts +92 -0
- package/dist/types/storage/levelgraph.d.ts.map +1 -0
- package/dist/types/storage/memory.d.ts +70 -0
- package/dist/types/storage/memory.d.ts.map +1 -0
- package/dist/types/storage/neo4j.d.ts +88 -0
- package/dist/types/storage/neo4j.d.ts.map +1 -0
- package/dist/types/storage/seeds.d.ts +27 -0
- package/dist/types/storage/seeds.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/llm.d.ts +298 -0
- package/dist/types/types/llm.d.ts.map +1 -0
- package/dist/types/types/parser.d.ts +208 -0
- package/dist/types/types/parser.d.ts.map +1 -0
- package/package.json +4 -2
- package/scripts/postinstall.js +68 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON/YAML syllabus parser
|
|
3
|
+
*
|
|
4
|
+
* Parses structured JSON or YAML syllabi into the standard format.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import { createObjective, createEmptyResult, calculateStats } from './base.js';
|
|
9
|
+
/**
|
|
10
|
+
* JSON/YAML parser for structured syllabi
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { JSONParser } from 'learngraph/parsers';
|
|
15
|
+
*
|
|
16
|
+
* const parser = new JSONParser();
|
|
17
|
+
* const result = await parser.parse(JSON.stringify({
|
|
18
|
+
* title: "Kindergarten Math",
|
|
19
|
+
* modules: [
|
|
20
|
+
* {
|
|
21
|
+
* title: "Counting",
|
|
22
|
+
* week: 1,
|
|
23
|
+
* objectives: [
|
|
24
|
+
* "Count objects from 1 to 10",
|
|
25
|
+
* "Recognize number symbols 1-10",
|
|
26
|
+
* "Compare groups using more, less, same"
|
|
27
|
+
* ]
|
|
28
|
+
* }
|
|
29
|
+
* ]
|
|
30
|
+
* }));
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export class JSONParser {
|
|
34
|
+
format = 'json';
|
|
35
|
+
async parse(content, _options) {
|
|
36
|
+
const startTime = Date.now();
|
|
37
|
+
const result = createEmptyResult('json', 'json');
|
|
38
|
+
let data;
|
|
39
|
+
try {
|
|
40
|
+
data = JSON.parse(content);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Try YAML-like simple format (key: value)
|
|
44
|
+
data = this.parseSimpleFormat(content);
|
|
45
|
+
}
|
|
46
|
+
// Extract metadata
|
|
47
|
+
if (data.title)
|
|
48
|
+
result.metadata.title = data.title;
|
|
49
|
+
if (data.course)
|
|
50
|
+
result.metadata.course = data.course;
|
|
51
|
+
if (data.institution)
|
|
52
|
+
result.metadata.institution = data.institution;
|
|
53
|
+
if (data.gradeLevel)
|
|
54
|
+
result.metadata.gradeLevel = data.gradeLevel;
|
|
55
|
+
// Parse modules
|
|
56
|
+
if (data.modules) {
|
|
57
|
+
for (let i = 0; i < data.modules.length; i++) {
|
|
58
|
+
const mod = data.modules[i];
|
|
59
|
+
if (!mod)
|
|
60
|
+
continue;
|
|
61
|
+
const module = {
|
|
62
|
+
id: mod.id || `module-${i + 1}`,
|
|
63
|
+
title: mod.title,
|
|
64
|
+
topics: [],
|
|
65
|
+
objectives: [],
|
|
66
|
+
};
|
|
67
|
+
// Conditionally set optional properties
|
|
68
|
+
if (mod.description !== undefined) {
|
|
69
|
+
module.description = mod.description;
|
|
70
|
+
}
|
|
71
|
+
if (mod.week !== undefined) {
|
|
72
|
+
module.week = mod.week;
|
|
73
|
+
}
|
|
74
|
+
if (mod.estimatedMinutes !== undefined) {
|
|
75
|
+
module.estimatedMinutes = mod.estimatedMinutes;
|
|
76
|
+
}
|
|
77
|
+
// Parse module topics
|
|
78
|
+
if (mod.topics) {
|
|
79
|
+
for (const t of mod.topics) {
|
|
80
|
+
const topic = {
|
|
81
|
+
name: t.name,
|
|
82
|
+
objectives: (t.objectives || []).map((obj) => createObjective(obj, module.title, module.week)),
|
|
83
|
+
};
|
|
84
|
+
if (t.description !== undefined) {
|
|
85
|
+
topic.description = t.description;
|
|
86
|
+
}
|
|
87
|
+
if (t.estimatedMinutes !== undefined) {
|
|
88
|
+
topic.estimatedMinutes = t.estimatedMinutes;
|
|
89
|
+
}
|
|
90
|
+
module.topics.push(topic);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Parse module-level objectives
|
|
94
|
+
if (mod.objectives) {
|
|
95
|
+
module.objectives = mod.objectives.map((obj) => createObjective(obj, module.title, module.week));
|
|
96
|
+
}
|
|
97
|
+
result.modules.push(module);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Parse standalone topics
|
|
101
|
+
if (data.topics) {
|
|
102
|
+
for (const t of data.topics) {
|
|
103
|
+
const topic = {
|
|
104
|
+
name: t.name,
|
|
105
|
+
objectives: (t.objectives || []).map((obj) => createObjective(obj)),
|
|
106
|
+
};
|
|
107
|
+
if (t.description !== undefined) {
|
|
108
|
+
topic.description = t.description;
|
|
109
|
+
}
|
|
110
|
+
if (t.estimatedMinutes !== undefined) {
|
|
111
|
+
topic.estimatedMinutes = t.estimatedMinutes;
|
|
112
|
+
}
|
|
113
|
+
result.topics.push(topic);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Parse standalone objectives
|
|
117
|
+
if (data.objectives) {
|
|
118
|
+
result.objectives = data.objectives.map((obj) => createObjective(obj));
|
|
119
|
+
}
|
|
120
|
+
result.stats = calculateStats(result, startTime);
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Parse simple key-value format (basic YAML-like)
|
|
125
|
+
*/
|
|
126
|
+
parseSimpleFormat(content) {
|
|
127
|
+
const lines = content.split('\n');
|
|
128
|
+
const result = { objectives: [] };
|
|
129
|
+
for (const line of lines) {
|
|
130
|
+
const trimmed = line.trim();
|
|
131
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
132
|
+
continue;
|
|
133
|
+
// Check for key: value
|
|
134
|
+
const colonIndex = trimmed.indexOf(':');
|
|
135
|
+
if (colonIndex > 0) {
|
|
136
|
+
const key = trimmed.substring(0, colonIndex).trim().toLowerCase();
|
|
137
|
+
const value = trimmed.substring(colonIndex + 1).trim();
|
|
138
|
+
if (key === 'title')
|
|
139
|
+
result.title = value;
|
|
140
|
+
else if (key === 'course')
|
|
141
|
+
result.course = value;
|
|
142
|
+
else if (key === 'institution')
|
|
143
|
+
result.institution = value;
|
|
144
|
+
}
|
|
145
|
+
else if (trimmed.startsWith('-') || trimmed.startsWith('*')) {
|
|
146
|
+
// List item = objective
|
|
147
|
+
result.objectives.push(trimmed.substring(1).trim());
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/parsers/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown syllabus parser
|
|
3
|
+
*
|
|
4
|
+
* Parses markdown-formatted syllabi into structured content.
|
|
5
|
+
* Works with common syllabus formats from universities and K-12.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { DEFAULT_PARSE_OPTIONS, createObjective, createEmptyResult, calculateStats, cleanText, extractTime, } from './base.js';
|
|
10
|
+
/**
|
|
11
|
+
* Markdown parser for syllabi and course outlines
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { MarkdownParser } from 'learngraph/parsers';
|
|
16
|
+
*
|
|
17
|
+
* const parser = new MarkdownParser();
|
|
18
|
+
* const result = await parser.parse(`
|
|
19
|
+
* # Introduction to Physics
|
|
20
|
+
*
|
|
21
|
+
* ## Week 1: Motion
|
|
22
|
+
*
|
|
23
|
+
* ### Learning Objectives
|
|
24
|
+
* - Describe the relationship between position, velocity, and acceleration
|
|
25
|
+
* - Calculate velocity from displacement and time
|
|
26
|
+
* - Apply kinematic equations to solve motion problems
|
|
27
|
+
*
|
|
28
|
+
* ## Week 2: Forces
|
|
29
|
+
*
|
|
30
|
+
* ### Learning Objectives
|
|
31
|
+
* - Identify forces acting on objects
|
|
32
|
+
* - Apply Newton's laws to predict motion
|
|
33
|
+
* `);
|
|
34
|
+
*
|
|
35
|
+
* console.log(result.modules); // 2 modules (Week 1, Week 2)
|
|
36
|
+
* console.log(result.stats.objectiveCount); // 5 objectives
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export class MarkdownParser {
|
|
40
|
+
format = 'markdown';
|
|
41
|
+
async parse(content, options) {
|
|
42
|
+
const startTime = Date.now();
|
|
43
|
+
const opts = { ...DEFAULT_PARSE_OPTIONS, ...options };
|
|
44
|
+
const result = createEmptyResult('markdown', 'markdown');
|
|
45
|
+
const warnings = [];
|
|
46
|
+
const lines = content.split('\n');
|
|
47
|
+
let currentModule = null;
|
|
48
|
+
let currentTopic = null;
|
|
49
|
+
// Extract title from first H1
|
|
50
|
+
const titleMatch = content.match(/^#\s+(.+)$/m);
|
|
51
|
+
if (titleMatch && titleMatch[1]) {
|
|
52
|
+
result.metadata.title = titleMatch[1].trim();
|
|
53
|
+
}
|
|
54
|
+
for (let i = 0; i < lines.length; i++) {
|
|
55
|
+
const line = lines[i] ?? '';
|
|
56
|
+
const trimmed = line.trim();
|
|
57
|
+
if (!trimmed) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
// H1: Course title (already extracted)
|
|
61
|
+
if (trimmed.startsWith('# ')) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// H2: Module/Week/Chapter
|
|
65
|
+
if (trimmed.startsWith('## ')) {
|
|
66
|
+
// Save previous module
|
|
67
|
+
if (currentModule) {
|
|
68
|
+
if (currentTopic) {
|
|
69
|
+
currentModule.topics.push(currentTopic);
|
|
70
|
+
currentTopic = null;
|
|
71
|
+
}
|
|
72
|
+
result.modules.push(currentModule);
|
|
73
|
+
}
|
|
74
|
+
const title = trimmed.substring(3).trim();
|
|
75
|
+
const weekMatch = title.match(/week\s*(\d+)/i);
|
|
76
|
+
const mod = {
|
|
77
|
+
id: `module-${result.modules.length + 1}`,
|
|
78
|
+
title,
|
|
79
|
+
topics: [],
|
|
80
|
+
objectives: [],
|
|
81
|
+
};
|
|
82
|
+
if (weekMatch && weekMatch[1]) {
|
|
83
|
+
mod.week = parseInt(weekMatch[1], 10);
|
|
84
|
+
}
|
|
85
|
+
const estTime = extractTime(title);
|
|
86
|
+
if (estTime !== undefined) {
|
|
87
|
+
mod.estimatedMinutes = estTime;
|
|
88
|
+
}
|
|
89
|
+
currentModule = mod;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// H3: Topic or "Learning Objectives" section
|
|
93
|
+
if (trimmed.startsWith('### ')) {
|
|
94
|
+
const title = trimmed.substring(4).trim();
|
|
95
|
+
const lower = title.toLowerCase();
|
|
96
|
+
// Check if this is an objectives section header - skip it as a topic
|
|
97
|
+
if (lower.includes('objective') ||
|
|
98
|
+
lower.includes('outcome') ||
|
|
99
|
+
lower.includes('goal')) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
// Save previous topic
|
|
103
|
+
if (currentTopic && currentModule) {
|
|
104
|
+
currentModule.topics.push(currentTopic);
|
|
105
|
+
}
|
|
106
|
+
const topic = {
|
|
107
|
+
name: title,
|
|
108
|
+
objectives: [],
|
|
109
|
+
};
|
|
110
|
+
const topicTime = extractTime(title);
|
|
111
|
+
if (topicTime !== undefined) {
|
|
112
|
+
topic.estimatedMinutes = topicTime;
|
|
113
|
+
}
|
|
114
|
+
currentTopic = topic;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
// H4: Sub-topic or nested objectives - skip
|
|
118
|
+
if (trimmed.startsWith('#### ')) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
// List items: potential objectives
|
|
122
|
+
if (trimmed.startsWith('- ') ||
|
|
123
|
+
trimmed.startsWith('* ') ||
|
|
124
|
+
trimmed.match(/^\d+\.\s/)) {
|
|
125
|
+
const text = cleanText(trimmed);
|
|
126
|
+
// Skip if too short
|
|
127
|
+
if (text.length < 10) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const objective = createObjective(text, currentModule?.title, currentModule?.week);
|
|
131
|
+
// Add to appropriate container
|
|
132
|
+
if (currentTopic) {
|
|
133
|
+
currentTopic.objectives.push(objective);
|
|
134
|
+
}
|
|
135
|
+
else if (currentModule) {
|
|
136
|
+
currentModule.objectives.push(objective);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
result.objectives.push(objective);
|
|
140
|
+
}
|
|
141
|
+
// Warn if Bloom's not detected
|
|
142
|
+
if (opts.detectBloom && !objective.bloomLevel) {
|
|
143
|
+
warnings.push({
|
|
144
|
+
type: 'ambiguous_bloom',
|
|
145
|
+
message: `Could not detect Bloom's level: "${text.substring(0, 50)}..."`,
|
|
146
|
+
location: `Line ${i + 1}`,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Save final module/topic
|
|
153
|
+
if (currentTopic && currentModule) {
|
|
154
|
+
currentModule.topics.push(currentTopic);
|
|
155
|
+
}
|
|
156
|
+
if (currentModule) {
|
|
157
|
+
result.modules.push(currentModule);
|
|
158
|
+
}
|
|
159
|
+
result.warnings = warnings;
|
|
160
|
+
result.stats = calculateStats(result, startTime);
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/parsers/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sample syllabi for testing and demonstration
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Sample physics syllabus (university level)
|
|
8
|
+
*/
|
|
9
|
+
export const PHYSICS_101_SYLLABUS = `# Introduction to Physics
|
|
10
|
+
|
|
11
|
+
## Course Information
|
|
12
|
+
PHYS 101 - Introduction to Physics
|
|
13
|
+
Fall Semester
|
|
14
|
+
|
|
15
|
+
## Week 1: Motion and Kinematics
|
|
16
|
+
|
|
17
|
+
### Learning Objectives
|
|
18
|
+
- Define position, displacement, velocity, and acceleration
|
|
19
|
+
- Calculate average and instantaneous velocity from position data
|
|
20
|
+
- Apply kinematic equations to solve motion problems in one dimension
|
|
21
|
+
- Analyze position-time and velocity-time graphs
|
|
22
|
+
|
|
23
|
+
## Week 2: Forces and Newton's Laws
|
|
24
|
+
|
|
25
|
+
### Learning Objectives
|
|
26
|
+
- Identify all forces acting on an object using free-body diagrams
|
|
27
|
+
- Apply Newton's First Law to explain equilibrium conditions
|
|
28
|
+
- Calculate net force and acceleration using Newton's Second Law
|
|
29
|
+
- Analyze action-reaction pairs using Newton's Third Law
|
|
30
|
+
|
|
31
|
+
## Week 3: Work and Energy
|
|
32
|
+
|
|
33
|
+
### Learning Objectives
|
|
34
|
+
- Calculate work done by constant and variable forces
|
|
35
|
+
- Apply the work-energy theorem to solve problems
|
|
36
|
+
- Distinguish between kinetic and potential energy
|
|
37
|
+
- Analyze systems using conservation of energy
|
|
38
|
+
|
|
39
|
+
## Week 4: Momentum and Collisions
|
|
40
|
+
|
|
41
|
+
### Learning Objectives
|
|
42
|
+
- Calculate linear momentum of objects and systems
|
|
43
|
+
- Apply impulse-momentum theorem to analyze collisions
|
|
44
|
+
- Distinguish between elastic and inelastic collisions
|
|
45
|
+
- Solve collision problems using conservation of momentum
|
|
46
|
+
`;
|
|
47
|
+
/**
|
|
48
|
+
* Sample kindergarten math syllabus
|
|
49
|
+
*/
|
|
50
|
+
export const KINDERGARTEN_MATH_SYLLABUS = `# Kindergarten Mathematics
|
|
51
|
+
|
|
52
|
+
## Course Information
|
|
53
|
+
Grade: Kindergarten
|
|
54
|
+
Subject: Mathematics
|
|
55
|
+
|
|
56
|
+
## Unit 1: Counting and Cardinality
|
|
57
|
+
|
|
58
|
+
### Learning Objectives
|
|
59
|
+
- Count objects from 1 to 20
|
|
60
|
+
- Recognize and write number symbols 0-20
|
|
61
|
+
- Compare groups using words: more, less, same
|
|
62
|
+
- Understand that the last number counted tells how many
|
|
63
|
+
|
|
64
|
+
## Unit 2: Number Operations
|
|
65
|
+
|
|
66
|
+
### Learning Objectives
|
|
67
|
+
- Understand addition as putting together
|
|
68
|
+
- Understand subtraction as taking apart
|
|
69
|
+
- Represent addition and subtraction with objects
|
|
70
|
+
- Solve simple addition problems within 10
|
|
71
|
+
|
|
72
|
+
## Unit 3: Shapes and Geometry
|
|
73
|
+
|
|
74
|
+
### Learning Objectives
|
|
75
|
+
- Identify circles, squares, triangles, and rectangles
|
|
76
|
+
- Describe shapes using words like sides and corners
|
|
77
|
+
- Compare shapes by size and orientation
|
|
78
|
+
- Create pictures using basic shapes
|
|
79
|
+
|
|
80
|
+
## Unit 4: Measurement
|
|
81
|
+
|
|
82
|
+
### Learning Objectives
|
|
83
|
+
- Compare objects by length (longer, shorter)
|
|
84
|
+
- Compare objects by weight (heavier, lighter)
|
|
85
|
+
- Sort objects by size, color, or shape
|
|
86
|
+
- Describe position using words: above, below, beside
|
|
87
|
+
`;
|
|
88
|
+
/**
|
|
89
|
+
* Sample programming course syllabus
|
|
90
|
+
*/
|
|
91
|
+
export const PROGRAMMING_101_SYLLABUS = `# Introduction to Programming
|
|
92
|
+
|
|
93
|
+
## Course Information
|
|
94
|
+
CS 101 - Introduction to Programming with Python
|
|
95
|
+
|
|
96
|
+
## Module 1: Getting Started
|
|
97
|
+
|
|
98
|
+
### Learning Objectives
|
|
99
|
+
- Install and configure Python development environment
|
|
100
|
+
- Write and execute a simple Python program
|
|
101
|
+
- Identify syntax errors in Python code
|
|
102
|
+
- Use print statements to display output
|
|
103
|
+
|
|
104
|
+
## Module 2: Variables and Data Types
|
|
105
|
+
|
|
106
|
+
### Learning Objectives
|
|
107
|
+
- Define variables and assign values
|
|
108
|
+
- Distinguish between integers, floats, and strings
|
|
109
|
+
- Apply type conversion between data types
|
|
110
|
+
- Calculate results using arithmetic operators
|
|
111
|
+
|
|
112
|
+
## Module 3: Control Flow
|
|
113
|
+
|
|
114
|
+
### Learning Objectives
|
|
115
|
+
- Write conditional statements using if-else
|
|
116
|
+
- Evaluate boolean expressions
|
|
117
|
+
- Create loops using for and while statements
|
|
118
|
+
- Design nested control structures
|
|
119
|
+
|
|
120
|
+
## Module 4: Functions
|
|
121
|
+
|
|
122
|
+
### Learning Objectives
|
|
123
|
+
- Define functions with parameters
|
|
124
|
+
- Apply return values from functions
|
|
125
|
+
- Design functions that call other functions
|
|
126
|
+
- Analyze scope and local variables
|
|
127
|
+
`;
|
|
128
|
+
/**
|
|
129
|
+
* All sample syllabi
|
|
130
|
+
*/
|
|
131
|
+
export const SAMPLE_SYLLABI = {
|
|
132
|
+
physics: PHYSICS_101_SYLLABUS,
|
|
133
|
+
kindergarten: KINDERGARTEN_MATH_SYLLABUS,
|
|
134
|
+
programming: PROGRAMMING_101_SYLLABUS,
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=samples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"samples.js","sourceRoot":"","sources":["../../../src/parsers/samples.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCnC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCzC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCvC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE,oBAAoB;IAC7B,YAAY,EAAE,0BAA0B;IACxC,WAAW,EAAE,wBAAwB;CAC7B,CAAC"}
|