@@ -72,15 +72,13 @@ export function parseMdContent(md: string): TutorialFrame | never {
7272 } ;
7373 } else {
7474 // match step
75- const stepRegex = / ^ ( # { 3 } \s \ (? < s t e p T i t l e > .* ) [ \n \r ] + (?< stepContent > [ ^ ] * ) / ;
75+ const stepRegex = / ^ ( # { 3 } \s (?< stepTitle > .* ) [ \n \r ] + (?< stepContent > [ ^ ] * ) ) / ;
7676 const stepMatch : RegExpMatchArray | null = section . match ( stepRegex ) ;
7777 if ( stepMatch && stepMatch . groups ) {
7878 const { stepId, stepContent } = stepMatch . groups ;
7979 mdContent . levels [ current . level ] . steps [ current . step ] = {
80- id : stepId ,
80+ id : ` ${ current . level + 1 } . ${ current . step + 1 } ` ,
8181 content : stepContent . trim ( ) ,
82- setup : { } ,
83- solution : { } ,
8482 } ;
8583 current = { ...current , step : current . step + 1 } ;
8684 } else {
@@ -131,76 +129,107 @@ export function parse(params: ParseParams): any {
131129
132130 // merge content levels and tutorial
133131
134- parsed . levels = mdContent . levels . map ( ( level : T . Level , levelIndex : number ) => {
135- // add level setup commits
136- const levelId = level . id ;
137- if ( params . commits [ levelId ] ) {
138- if ( ! level . setup ) {
139- level . setup = { } ;
132+ parsed . levels = mdContent . levels . map (
133+ ( mdLevel : T . Level , mdLevelIndex : number ) => {
134+ // add level setup commits
135+ let level : T . Level = { ...mdLevel } ;
136+
137+ const configLevel = params . skeleton . levels [ mdLevelIndex ] ;
138+
139+ if ( configLevel ) {
140+ // add level step commits
141+ const { steps, ...configLevelProps } = configLevel ;
142+ level = { ...configLevelProps , ...level } ;
143+ if ( steps ) {
144+ steps . forEach ( ( step : T . Step , index : number ) => {
145+ console . log ( "step" , step ) ;
146+ const mdStep = level . steps [ index ] ;
147+ console . log ( "mdStep" , mdStep ) ;
148+ step = {
149+ ...step ,
150+ ...mdStep ,
151+ } ;
152+
153+ const stepKey = step . id ;
154+ console . log ( "stepKey" , stepKey ) ;
155+ const stepSetupKey = `${ stepKey } Q` ;
156+ if ( params . commits [ stepSetupKey ] ) {
157+ if ( ! step . setup ) {
158+ step . setup = {
159+ commits : [ ] ,
160+ } ;
161+ }
162+ step . setup . commits = params . commits [ stepSetupKey ] ;
163+ }
164+
165+ const stepSolutionKey = `${ stepKey } A` ;
166+ if ( params . commits [ stepSolutionKey ] ) {
167+ if ( ! step . solution ) {
168+ step . solution = {
169+ commits : [ ] ,
170+ } ;
171+ }
172+ step . solution . commits = params . commits [ stepSolutionKey ] ;
173+ }
174+ // update level step
175+ level . steps [ index ] = step ;
176+ } ) ;
177+ }
140178 }
141- level . setup . commits = params . commits [ levelId ] ;
142- }
143179
144- // get yaml for level
145- const configLevel = params . skeleton . levels . find (
146- ( l : Partial < T . Level > ) => l . id === levelId
147- ) ;
148-
149- let configSteps = { } ;
150- if ( configLevel ) {
151- const { steps, ...configLevelProps } = configLevel ;
152- level = { ...configLevelProps , ...level } ;
153- if ( steps ) {
154- steps . forEach ( ( s : T . Step ) => {
155- configSteps [ s . id ] = s ;
156- } ) ;
180+ // try {
181+ // level.steps = (level.steps || []).map(
182+ // (step: T.Step, stepIndex: number) => {
183+ // const stepKey = `${levelId}S${stepIndex + 1}`;
184+ // const stepSetupKey = `${stepKey}Q`;
185+ // if (params.commits[stepSetupKey]) {
186+ // if (!step.setup) {
187+ // step.setup = {
188+ // commits: [],
189+ // };
190+ // }
191+ // step.setup.commits = params.commits[stepSetupKey];
192+ // }
193+
194+ // const stepSolutionKey = `${stepKey}A`;
195+ // if (params.commits[stepSolutionKey]) {
196+ // if (!step.solution) {
197+ // step.solution = {
198+ // commits: [],
199+ // };
200+ // }
201+ // step.solution.commits = params.commits[stepSolutionKey];
202+ // }
203+
204+ // // add markdown
205+ // const stepMarkdown: Partial<T.Step> =
206+ // mdContent.levels[level.id].steps[step.id];
207+ // if (stepMarkdown) {
208+ // step = { ...step, ...stepMarkdown };
209+ // }
210+
211+ // step.id = `${stepKey}`;
212+ // return step;
213+ // }
214+ // );
215+ // } catch (error) {
216+ // console.log(JSON.stringify(level.steps));
217+ // console.error("Error parsing level steps");
218+ // console.error(error.message);
219+ // }
220+
221+ console . log ( params . commits ) ;
222+
223+ if ( params . commits [ level . id ] ) {
224+ if ( ! level . setup ) {
225+ level . setup = { } ;
226+ }
227+ level . setup . commits = params . commits [ level . id ] ;
157228 }
158- }
159229
160- // add level step commits
161- // try {
162- // level.steps = (level.steps || []).map(
163- // (step: T.Step, stepIndex: number) => {
164- // const stepKey = `${levelId}S${stepIndex + 1}`;
165- // const stepSetupKey = `${stepKey}Q`;
166- // if (params.commits[stepSetupKey]) {
167- // if (!step.setup) {
168- // step.setup = {
169- // commits: [],
170- // };
171- // }
172- // step.setup.commits = params.commits[stepSetupKey];
173- // }
174-
175- // const stepSolutionKey = `${stepKey}A`;
176- // if (params.commits[stepSolutionKey]) {
177- // if (!step.solution) {
178- // step.solution = {
179- // commits: [],
180- // };
181- // }
182- // step.solution.commits = params.commits[stepSolutionKey];
183- // }
184-
185- // // add markdown
186- // const stepMarkdown: Partial<T.Step> =
187- // mdContent.levels[level.id].steps[step.id];
188- // if (stepMarkdown) {
189- // step = { ...step, ...stepMarkdown };
190- // }
191-
192- // step.id = `${stepKey}`;
193- // return step;
194- // }
195- // );
196- // } catch (error) {
197- // console.log(JSON.stringify(level.steps));
198- // console.error("Error parsing level steps");
199- // console.error(error.message);
200- // }
201-
202- return level ;
203- } ) ;
230+ return level ;
231+ }
232+ ) ;
204233
205234 return parsed ;
206235}
0 commit comments