* feat: v1 templates * update nvm * working on the displaying the course content * working on the displaying the course content * displayed the content * finished with the logic for rendering the content for all the courses and lessons * post hog template UI is good to go * classic and minimalistic template UI is good to go * some refactoring * some refactoring * layout adjustments * update tsconfig * trying to get the filter to work well * this is working now * cleanup * cleanup * UI updates * course page UI for posthog * navbar and sidebar for course page in all templates complete * all templates course page showing lesson content from md file with mdsvex configured * wokring on sections * posthog lesson content done * all templates fetches the lesson content from the section * all templates properly typed * scaffolding the new template * finished the webflow-saas * done with the webflow saas UI * new calcom template * new calcom template * masonry layout for testitomonail section layout done * calcom UI done * UI all done * cleanup * trying to fix dark mode for the course page and home page * done with this * done with this * working on tests * migrated minimalistic template to svelte 5 * updated the syntax to svelte 5 for webflow * migrated classic to svelte 5 * migrated posthog to svelte 5 * used svelte 5 syntax in calcom * cli tool woks locally * rename to course-sites * use pnpm in root * calcom refactoring * remove unused files * chore: biggest refactoring in my life * add basic readme * refactoring on course page * restructure how courses are ordered * proper state propagation * add cf adapter * fix pnpm i issue * fix folder icon size * use 18.17 version * update npmrc * add engine to packagejson * pnpm install * add engine to cio-com * make it 18.x * remove sequence * move mdsvex to dependencies * update lock * mdsvex please work * replace fs with import from vite * add lock * styling improvements * fix styling * sidebar style improvements * fix: mobile concerns * fix spacing of course header on desktop * update header * top nav fix * feat: make cal template * setup another template * classic basic UI * fixed the /courses fetching wrong page content * fix breaking template cause of logo * adding some updates * improve styles theming * finished updates from reviews * updated the custom styling css * clean up posthog template * cli tool done, needs some cleaning though * moved components to home * improved the UI of the minimal template * Add CLI tool and course app site * prettier lint * improve CLI * ignore sveltekit folder * publish course app * fix tailwing theme + improve README * finish up course-app site * update README.md --------- Co-authored-by: emmanuel <[email protected]>
92 lines
3.0 KiB
TypeScript
92 lines
3.0 KiB
TypeScript
import chalk from 'chalk';
|
|
import ora from 'ora';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
import { copyCoursesFolder } from '../utils/copyCoursesFolder';
|
|
import { copyFolderSync } from '../utils/copyFolder';
|
|
|
|
// Define the interface for function parameters
|
|
interface ScaffoldTemplateParams {
|
|
template: string; // Template name
|
|
courses: boolean; // Whether to include demo courses
|
|
projectPath: string; // Path to the project
|
|
projectName: string; // Name of the project
|
|
}
|
|
|
|
// Using require.resolve() instead of import.meta.url for better compatibility
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
const packageRoot = path.join(__dirname, '..');
|
|
const spinner = ora();
|
|
|
|
export async function scaffoldTemplate({
|
|
template,
|
|
courses,
|
|
projectPath,
|
|
projectName
|
|
}: ScaffoldTemplateParams): Promise<void> {
|
|
spinner.text = chalk.yellow('Getting project...');
|
|
|
|
// Path to the entire template directory
|
|
const templateDirPath: string = path.resolve(packageRoot, 'src', 'template');
|
|
|
|
const coursePathToExclude: string = path.join(templateDirPath, 'src', 'courses');
|
|
// Check if the template directory exists
|
|
if (!fs.existsSync(templateDirPath)) {
|
|
throw new Error(`Template directory does not exist at "${templateDirPath}".`);
|
|
}
|
|
|
|
// Path to the specific template within the components directory
|
|
const specificTemplatePath: string = path.resolve(
|
|
templateDirPath,
|
|
'src',
|
|
'lib',
|
|
'components',
|
|
template
|
|
);
|
|
|
|
// Check if the specific template exists
|
|
if (!fs.existsSync(specificTemplatePath)) {
|
|
throw new Error(`Template "${template}" does not exist at "${specificTemplatePath}".`);
|
|
}
|
|
|
|
// Get all templates in the components directory
|
|
const allTemplates = fs
|
|
.readdirSync(path.join(templateDirPath, 'src', 'lib', 'components'))
|
|
.filter((file) =>
|
|
fs.statSync(path.join(templateDirPath, 'src', 'lib', 'components', file)).isDirectory()
|
|
);
|
|
|
|
// Exclude all templates except the selected one and the ui folder
|
|
const excludeTemplates = allTemplates.filter((temp) => temp !== template && temp !== 'ui');
|
|
|
|
// Copy the selected template files to the project path, excluding others
|
|
await copyFolderSync({
|
|
from: templateDirPath,
|
|
to: projectPath,
|
|
excludeNames: ['node_modules', '.svelte-kit', ...excludeTemplates], // Exclude node_modules if present
|
|
excludePath: coursePathToExclude
|
|
});
|
|
|
|
// If the user wants demo courses, copy the courses folder
|
|
spinner.text = chalk.yellow('Setting up courses folder...');
|
|
await copyCoursesFolder({ templatePath: templateDirPath, projectPath, courses });
|
|
console.log(
|
|
chalk.yellow(
|
|
`Project ${projectName} created using template "${template}" ${
|
|
courses ? 'with' : 'without'
|
|
} demo courses.`
|
|
)
|
|
);
|
|
console.log(
|
|
chalk.yellow(
|
|
`You can ${
|
|
courses
|
|
? 'edit or create new courses in the courses folder'
|
|
: 'create new courses in the courses folder'
|
|
}`
|
|
)
|
|
);
|
|
}
|