âš’ī¸
Crafter Guide
  • 👋Welcome, Crafter!
  • HOW TO CRAFT
    • â„šī¸Overview
    • 😎How to contribute
      • 📃General guidelines
      • đŸĨŗGetting started
  • Use Cases
    • 🎨For Teachers
    • đŸ–Ĩī¸For Developers
Powered by GitBook
On this page
  • Course Structure
  • Directory structure
  • In depth
  1. HOW TO CRAFT

Overview

PreviousWelcome, Crafter!NextHow to contribute

Last updated 2 years ago

Course Structure

A course is just a directory with a particular structure. The goal of this document is to detail this structure.

All the TypeScript courses crafted by the community must be located in .

Start by taking a look at the README.

Directory structure

The simplified directory structure can be described as follow:

arenas/
└── your-arena-name/
    ├── src/
    │   ├── course-config.json
    │   ├── challenges/
    │   │   ├── my-challenge1/
    │   │   └── my-challenge2/
    │   └── fights/
    │       └── my-fight-1/

  • the arenas directory contains all the Arenas (aka courses) made by the community

  • the you-arena-name represents one arena (aka one course)

  • the challenges directory must contain every challenges that are available in this arena

  • the fights directory contains the list of fights. A fight is a group of challenges for your Arena.

  • the course-config.json file contains general course information, such as the order of the fights

In depth

Fights Directory Structure

The fights directory is itself composed of subfolders. Each subfolder is named with the unique identifier of the fight.

In each subfolder, there is a config.json file that defines the configuration of a fight.

This configuration contains general information such as:

  • the description of the fight

  • the order of the challenges

  • the materials url (videos or slides) : optional

  • and more...

Challenges Directory Structure

The challenges folder contains a subfolder for each challenge.

Each subfolder is named with the unique identifier of the challenge. Each challenge folder has the following structure:

  • a config.json file that is used to store data related to the challenge.

  • a challenge.md file that contains the instructions in french and its English counterpart challenge-en.md, in markdown format.

    • It contains the instructions presented on the left side of the challenge page.

    • Note: if you are an English speaker, do not bother with french translation, we will do it for you

  • A julius subfolder that contains the Julius configuration for this challenge as well as the tests to be executed.

Julius Subfolder of a Challenge Folder

The julius subfolder includes a config.json file that indicates which runner to use and which options.

In 99.9999% of cases, there is nothing to change on your side.

There is a test folder where all the jest test files, written in TS, should be placed.

The .test.ts extension is mandatory for tests.

When Julius tests the code, it copies the test folder and moves one level up the function written by the user.

That's why in the example test, we import from ...

If you want to create utility functions to facilitate testing, add them to the test folder WITHOUT the .test.ts extension. Then import them into your tests.

One level above, the reference implementation, is often written to test the tests.

The user's repo content will replace all this "one level above" when Julius checks.

â„šī¸
👉
this mono-repository