From e6dcc34616bbc4933b549a876f8bfda7c11d3525 Mon Sep 17 00:00:00 2001 From: georgi-mateev <95027221+georgi-mateev@users.noreply.github.com> Date: Tue, 30 Apr 2024 15:39:18 +0300 Subject: [PATCH] feat: update sample project (#260) * feat: repurpose sample-project to exam-project * chore: rename sample-project folder to exam-project * chore: rename sample-project in gitignore and test CI --- .github/workflows/ci.yml | 26 +++--- .gitignore | 2 +- index.ts | 78 ++++++++---------- .../.eslintrc.cjs | 0 .../.prettierrc.json | 0 .../.vscode/extensions.json | 0 .../README.md | 0 .../_gitignore | 0 .../{sample-project => exam-project}/env.d.ts | 0 .../index.html | 0 .../package.json | 0 .../postcss.config.cts | 0 .../public/favicon.ico | Bin .../src/App.vue | 0 .../src/assets/logo.svg | 0 .../src/assets/main.css | 0 .../components/__tests__/HelloWorld.spec.ts | 0 .../src/main.ts | 0 .../src/router/index.ts | 0 .../src/stores/sample-project-store.ts | 0 .../src/views/ErrorView.vue | 0 .../src/views/TaskView.vue | 0 .../tailwind.config.ts | 0 .../tsconfig.app.json | 0 .../tsconfig.json | 0 .../tsconfig.node.json | 0 .../tsconfig.vitest.json | 0 .../vite.config.ts | 0 .../vitest.config.ts | 0 29 files changed, 48 insertions(+), 58 deletions(-) rename template/{sample-project => exam-project}/.eslintrc.cjs (100%) rename template/{sample-project => exam-project}/.prettierrc.json (100%) rename template/{sample-project => exam-project}/.vscode/extensions.json (100%) rename template/{sample-project => exam-project}/README.md (100%) rename template/{sample-project => exam-project}/_gitignore (100%) rename template/{sample-project => exam-project}/env.d.ts (100%) rename template/{sample-project => exam-project}/index.html (100%) rename template/{sample-project => exam-project}/package.json (100%) rename template/{sample-project => exam-project}/postcss.config.cts (100%) rename template/{sample-project => exam-project}/public/favicon.ico (100%) rename template/{sample-project => exam-project}/src/App.vue (100%) rename template/{sample-project => exam-project}/src/assets/logo.svg (100%) rename template/{sample-project => exam-project}/src/assets/main.css (100%) rename template/{sample-project => exam-project}/src/components/__tests__/HelloWorld.spec.ts (100%) rename template/{sample-project => exam-project}/src/main.ts (100%) rename template/{sample-project => exam-project}/src/router/index.ts (100%) rename template/{sample-project => exam-project}/src/stores/sample-project-store.ts (100%) rename template/{sample-project => exam-project}/src/views/ErrorView.vue (100%) rename template/{sample-project => exam-project}/src/views/TaskView.vue (100%) rename template/{sample-project => exam-project}/tailwind.config.ts (100%) rename template/{sample-project => exam-project}/tsconfig.app.json (100%) rename template/{sample-project => exam-project}/tsconfig.json (100%) rename template/{sample-project => exam-project}/tsconfig.node.json (100%) rename template/{sample-project => exam-project}/tsconfig.vitest.json (100%) rename template/{sample-project => exam-project}/vite.config.ts (100%) rename template/{sample-project => exam-project}/vitest.config.ts (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97fb477..d8946b9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -92,12 +92,12 @@ jobs: - node-version: 18 os: windows-latest - flag-for-sample-project: '--sampleProject' + flag-for-exam-project: '--exam-project' runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.os == 'windows-latest' }} env: - FEATURE_FLAGS: ${{ matrix.flag-for-jsx }} ${{ matrix.flag-for-router }} ${{ matrix.flag-for-pinia }} ${{ matrix.flag-for-e2e }} ${{ matrix.flag-for-sample-project }} + FEATURE_FLAGS: ${{ matrix.flag-for-jsx }} ${{ matrix.flag-for-router }} ${{ matrix.flag-for-pinia }} ${{ matrix.flag-for-e2e }} ${{ matrix.flag-for-exam-project }} # Sometimes the Linux runner can't verify Cypress in 30s CYPRESS_VERIFY_TIMEOUT: 60000 steps: @@ -147,41 +147,41 @@ jobs: path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} - if: ${{ (contains(env.FEATURE_FLAGS, '--')) }} - name: Create the sample project with feature flags + name: Create the exam project with feature flags working-directory: ../ - run: node ./create-vue/outfile.cjs sample-project ${{ env.FEATURE_FLAGS }} + run: node ./create-vue/outfile.cjs exam-project ${{ env.FEATURE_FLAGS }} - if: ${{ !(contains(env.FEATURE_FLAGS, '--')) }} - name: Create the sample project with default options + name: Create the exam project with default options working-directory: ../ - run: node ./create-vue/outfile.cjs sample-project --default + run: node ./create-vue/outfile.cjs exam-project --default - - name: Install dependencies in the sample project - working-directory: ../sample-project + - name: Install dependencies in the exam project + working-directory: ../exam-project run: npm install - if: ${{ contains(matrix.flag-for-vitest, '--') }} name: Run unit test script - working-directory: ../sample-project + working-directory: ../exam-project run: npm run test:unit - name: Run build script - working-directory: ../sample-project + working-directory: ../exam-project run: npm run build - name: Download Cypress if: ${{ contains(matrix.flag-for-e2e, '--cypress') }} - working-directory: ../sample-project + working-directory: ../exam-project run: | npm exec cypress cache list npm exec cypress install - if: ${{ contains(matrix.flag-for-e2e, '--playwright') }} name: Install Playwright dependencies - working-directory: ../sample-project + working-directory: ../exam-project run: npx playwright install --with-deps - if: ${{ contains(matrix.flag-for-e2e, '--') }} name: Run e2e test script - working-directory: ../sample-project + working-directory: ../exam-project run: npm run test:e2e \ No newline at end of file diff --git a/.gitignore b/.gitignore index 94451f4..e3dd031 100644 --- a/.gitignore +++ b/.gitignore @@ -109,4 +109,4 @@ dist playground/ .idea/** -/template/sample-project/package-lock.json +/template/exam-project/package-lock.json diff --git a/index.ts b/index.ts index 064ea4c..403efa4 100755 --- a/index.ts +++ b/index.ts @@ -71,7 +71,7 @@ async function init() { const cwd = process.cwd() // possible options: // --default - // --sampleProject + // --exam-project/exam // --typescript / --ts (always true) // --jsx // --router / --vue-router @@ -88,7 +88,8 @@ async function init() { // alias is not supported by parseArgs const options = { - sampleProject: { type: 'boolean' }, + exam: { type: 'boolean' }, + 'exam-project': { type: 'boolean' }, typescript: { type: 'boolean' }, ts: { type: 'boolean' }, 'with-tests': { type: 'boolean' }, @@ -107,7 +108,7 @@ async function init() { const isFeatureFlagsUsed = typeof ( argv.default ?? - argv.sampleProject ?? + (argv.exam || argv['exam-project']) ?? (argv.ts || argv.typescript) ?? argv.jsx ?? (argv.router || argv['vue-router']) ?? @@ -134,7 +135,6 @@ async function init() { projectName?: string shouldOverwrite?: boolean packageName?: string - needsSampleProject?: boolean needsTypeScript?: boolean needsJsx?: boolean needsRouter?: boolean @@ -154,7 +154,6 @@ async function init() { // - Project name: // - whether to overwrite the existing directory or not? // - enter a valid package name for package.json - // - Create a sample project using Pinia, Vue-router and Vitest? // - Project language: JavaScript / TypeScript // - Add JSX Support? // - Install Vue Router for SPA development? @@ -208,14 +207,6 @@ async function init() { initial: () => toValidPackageName(targetDir), validate: (dir) => isValidPackageName(dir) || language.packageName.invalidMessage }, - { - name: 'needsSampleProject', - type: () => (isFeatureFlagsUsed ? null : 'toggle'), - message: 'Create a sample project using Pinia, Vue-router and Vitest?', - initial: false, - active: language.defaultToggleOptions.active, - inactive: language.defaultToggleOptions.inactive - }, { name: 'needsJsx', type: () => (isFeatureFlagsUsed ? null : 'toggle'), @@ -226,8 +217,7 @@ async function init() { }, { name: 'needsRouter', - type: (prev, values) => - isFeatureFlagsUsed || values.needsSampleProject ? null : 'toggle', + type: () => (isFeatureFlagsUsed ? null : 'toggle'), message: language.needsRouter.message, initial: false, active: language.defaultToggleOptions.active, @@ -235,8 +225,7 @@ async function init() { }, { name: 'needsPinia', - type: (prev, values) => - isFeatureFlagsUsed || values.needsSampleProject ? null : 'toggle', + type: () => (isFeatureFlagsUsed ? null : 'toggle'), message: language.needsPinia.message, initial: false, active: language.defaultToggleOptions.active, @@ -336,7 +325,6 @@ async function init() { projectName, packageName = projectName ?? defaultProjectName, shouldOverwrite = argv.force, - needsSampleProject = argv.sampleProject, needsJsx = argv.jsx, needsTypeScript = true, // prefer TS as a solution needsRouter = argv.router || argv['vue-router'], @@ -381,10 +369,11 @@ async function init() { renderTemplate(templateDir, root, callbacks) } - // Sample project has its own structure, to avoid overriding - // render base + configs only if sample is not selected - if (needsSampleProject) { - render('sample-project') + // Exam project to be used for Vue assesment + const isExamProjectSelected = argv['exam-project'] || argv.exam + + if (isExamProjectSelected) { + render('exam-project') } else { // Render base template render('base') @@ -617,26 +606,29 @@ async function init() { ? 'bun' : 'npm' - // README generation - fs.writeFileSync( - path.resolve(root, 'README.md'), - generateReadme({ - projectName: result.projectName ?? result.packageName ?? defaultProjectName, - packageManager, - needsTypeScript, - needsVitest, - needsCypress, - needsNightwatch, - needsPlaywright, - needsNightwatchCT, - needsCypressCT, - needsVueUse, - needsI18n, - needsSonarQube, - needsTanStackQuery, - needsTailwind - }) - ) + // README generation - should happen unless exam-project is + // rendered since this case has its own README + if (!isExamProjectSelected) { + fs.writeFileSync( + path.resolve(root, 'README.md'), + generateReadme({ + projectName: result.projectName ?? result.packageName ?? defaultProjectName, + packageManager, + needsTypeScript, + needsVitest, + needsCypress, + needsNightwatch, + needsPlaywright, + needsNightwatchCT, + needsCypressCT, + needsVueUse, + needsI18n, + needsSonarQube, + needsTanStackQuery, + needsTailwind + }) + ) + } console.log(`\n${language.infos.done}\n`) if (root !== cwd) { @@ -645,8 +637,6 @@ async function init() { ` ${bold(green(`cd ${cdProjectName.includes(' ') ? `"${cdProjectName}"` : cdProjectName}`))}` ) } - console.log(` ${bold(yellow('In order to use husky you need to initialize git'))}`) - console.log(` ${bold(green('git init'))}`) console.log(` ${bold(green(getCommand(packageManager, 'install')))}`) console.log(` ${bold(green(getCommand(packageManager, 'format')))}`) if (needsStorybook) { diff --git a/template/sample-project/.eslintrc.cjs b/template/exam-project/.eslintrc.cjs similarity index 100% rename from template/sample-project/.eslintrc.cjs rename to template/exam-project/.eslintrc.cjs diff --git a/template/sample-project/.prettierrc.json b/template/exam-project/.prettierrc.json similarity index 100% rename from template/sample-project/.prettierrc.json rename to template/exam-project/.prettierrc.json diff --git a/template/sample-project/.vscode/extensions.json b/template/exam-project/.vscode/extensions.json similarity index 100% rename from template/sample-project/.vscode/extensions.json rename to template/exam-project/.vscode/extensions.json diff --git a/template/sample-project/README.md b/template/exam-project/README.md similarity index 100% rename from template/sample-project/README.md rename to template/exam-project/README.md diff --git a/template/sample-project/_gitignore b/template/exam-project/_gitignore similarity index 100% rename from template/sample-project/_gitignore rename to template/exam-project/_gitignore diff --git a/template/sample-project/env.d.ts b/template/exam-project/env.d.ts similarity index 100% rename from template/sample-project/env.d.ts rename to template/exam-project/env.d.ts diff --git a/template/sample-project/index.html b/template/exam-project/index.html similarity index 100% rename from template/sample-project/index.html rename to template/exam-project/index.html diff --git a/template/sample-project/package.json b/template/exam-project/package.json similarity index 100% rename from template/sample-project/package.json rename to template/exam-project/package.json diff --git a/template/sample-project/postcss.config.cts b/template/exam-project/postcss.config.cts similarity index 100% rename from template/sample-project/postcss.config.cts rename to template/exam-project/postcss.config.cts diff --git a/template/sample-project/public/favicon.ico b/template/exam-project/public/favicon.ico similarity index 100% rename from template/sample-project/public/favicon.ico rename to template/exam-project/public/favicon.ico diff --git a/template/sample-project/src/App.vue b/template/exam-project/src/App.vue similarity index 100% rename from template/sample-project/src/App.vue rename to template/exam-project/src/App.vue diff --git a/template/sample-project/src/assets/logo.svg b/template/exam-project/src/assets/logo.svg similarity index 100% rename from template/sample-project/src/assets/logo.svg rename to template/exam-project/src/assets/logo.svg diff --git a/template/sample-project/src/assets/main.css b/template/exam-project/src/assets/main.css similarity index 100% rename from template/sample-project/src/assets/main.css rename to template/exam-project/src/assets/main.css diff --git a/template/sample-project/src/components/__tests__/HelloWorld.spec.ts b/template/exam-project/src/components/__tests__/HelloWorld.spec.ts similarity index 100% rename from template/sample-project/src/components/__tests__/HelloWorld.spec.ts rename to template/exam-project/src/components/__tests__/HelloWorld.spec.ts diff --git a/template/sample-project/src/main.ts b/template/exam-project/src/main.ts similarity index 100% rename from template/sample-project/src/main.ts rename to template/exam-project/src/main.ts diff --git a/template/sample-project/src/router/index.ts b/template/exam-project/src/router/index.ts similarity index 100% rename from template/sample-project/src/router/index.ts rename to template/exam-project/src/router/index.ts diff --git a/template/sample-project/src/stores/sample-project-store.ts b/template/exam-project/src/stores/sample-project-store.ts similarity index 100% rename from template/sample-project/src/stores/sample-project-store.ts rename to template/exam-project/src/stores/sample-project-store.ts diff --git a/template/sample-project/src/views/ErrorView.vue b/template/exam-project/src/views/ErrorView.vue similarity index 100% rename from template/sample-project/src/views/ErrorView.vue rename to template/exam-project/src/views/ErrorView.vue diff --git a/template/sample-project/src/views/TaskView.vue b/template/exam-project/src/views/TaskView.vue similarity index 100% rename from template/sample-project/src/views/TaskView.vue rename to template/exam-project/src/views/TaskView.vue diff --git a/template/sample-project/tailwind.config.ts b/template/exam-project/tailwind.config.ts similarity index 100% rename from template/sample-project/tailwind.config.ts rename to template/exam-project/tailwind.config.ts diff --git a/template/sample-project/tsconfig.app.json b/template/exam-project/tsconfig.app.json similarity index 100% rename from template/sample-project/tsconfig.app.json rename to template/exam-project/tsconfig.app.json diff --git a/template/sample-project/tsconfig.json b/template/exam-project/tsconfig.json similarity index 100% rename from template/sample-project/tsconfig.json rename to template/exam-project/tsconfig.json diff --git a/template/sample-project/tsconfig.node.json b/template/exam-project/tsconfig.node.json similarity index 100% rename from template/sample-project/tsconfig.node.json rename to template/exam-project/tsconfig.node.json diff --git a/template/sample-project/tsconfig.vitest.json b/template/exam-project/tsconfig.vitest.json similarity index 100% rename from template/sample-project/tsconfig.vitest.json rename to template/exam-project/tsconfig.vitest.json diff --git a/template/sample-project/vite.config.ts b/template/exam-project/vite.config.ts similarity index 100% rename from template/sample-project/vite.config.ts rename to template/exam-project/vite.config.ts diff --git a/template/sample-project/vitest.config.ts b/template/exam-project/vitest.config.ts similarity index 100% rename from template/sample-project/vitest.config.ts rename to template/exam-project/vitest.config.ts