Skip to content

Commit e438d97

Browse files
committed
feat: add starter-nextjs to templates
1 parent 66ad945 commit e438d97

8 files changed

Lines changed: 99 additions & 8 deletions

File tree

.changeset/gentle-zebras-pick.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
---
2-
'@commencis/cli': minor
2+
'@commencis/cli': major
33
---
44

55
feat: update starter-react-vite to v2.10.0
6+
7+
feat: add starter-nextjs to templates

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
"typescript": "5.9.3"
7070
},
7171
"templateDependencies": {
72+
"@commencis/starter-nextjs": "1.0.0",
7273
"@commencis/starter-react-vite": "2.10.0",
7374
"@commencis/template-markdown": "1.0.0"
7475
}

src/config/template.config.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,34 @@ type TemplateConfig = {
44
name: string;
55
url: string;
66
filesToRemove?: string[];
7+
scriptsToRemove?: string[];
8+
dependenciesToRemove?: string[];
9+
devDependenciesToRemove?: string[];
710
path?: string;
811
};
912
export type TemplateData = TemplateConfig & { version: string };
1013

1114
export const templateConfigMap = {
15+
nextjs: {
16+
name: '@commencis/starter-nextjs',
17+
url: 'https://github.com/Commencis/starter-nextjs.git',
18+
filesToRemove: [
19+
'.git/',
20+
'.github/',
21+
'.changeset/',
22+
'assets/',
23+
'CHANGELOG.md',
24+
'README.md',
25+
'LICENSE',
26+
'renovate.json',
27+
],
28+
scriptsToRemove: ['changeset', 'changeset:version'],
29+
dependenciesToRemove: [],
30+
devDependenciesToRemove: [
31+
'@changesets/cli',
32+
'@svitejs/changesets-changelog-github-compact',
33+
],
34+
},
1235
'react-vite': {
1336
name: '@commencis/starter-react-vite',
1437
url: 'https://github.com/Commencis/starter-react-vite.git',
@@ -22,6 +45,12 @@ export const templateConfigMap = {
2245
'LICENSE',
2346
'renovate.json',
2447
],
48+
scriptsToRemove: ['changeset', 'version'],
49+
dependenciesToRemove: [],
50+
devDependenciesToRemove: [
51+
'@changesets/cli',
52+
'@svitejs/changesets-changelog-github-compact',
53+
],
2554
},
2655
'template-markdown': {
2756
name: '@commencis/template-markdown',

src/helpers/setupTemplate.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@ export async function setupTemplate(
1919
projectName: string,
2020
targetPath: string = process.cwd()
2121
): Promise<void> {
22-
const { name, url, version, filesToRemove } = getTemplateDataById(templateId);
22+
const {
23+
name,
24+
url,
25+
version,
26+
filesToRemove,
27+
scriptsToRemove,
28+
dependenciesToRemove,
29+
devDependenciesToRemove,
30+
} = getTemplateDataById(templateId);
2331
const {
2432
name: mdExtensionName,
2533
url: mdExtensionUrl,
@@ -69,7 +77,13 @@ export async function setupTemplate(
6977
await fs.writeFile(path.join(tempDir, 'README.md'), readmeMd);
7078

7179
// Update package.json
72-
const { templateVersion } = await updatePackageData(tempDir, projectName);
80+
const { templateVersion } = await updatePackageData({
81+
directoryPath: tempDir,
82+
projectName,
83+
scriptsToRemove,
84+
dependenciesToRemove,
85+
devDependenciesToRemove,
86+
});
7387

7488
// Copy files to the target directory
7589
await fs.cp(tempDir, targetDir, { recursive: true, force: true });

src/helpers/updatePackageData.ts

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,25 @@ import fs from 'node:fs/promises';
22
import path from 'node:path';
33

44
import { PACKAGE_DEFAULTS } from '@/constants';
5+
import { omitKeys } from '@/utils/omitKeys';
56

6-
export async function updatePackageData(
7-
directoryPath: string,
8-
projectName: string
9-
): Promise<{ templateVersion: string }> {
7+
type UpdatePackageDataArgs = {
8+
directoryPath: string;
9+
projectName: string;
10+
scriptsToRemove?: string[];
11+
dependenciesToRemove?: string[];
12+
devDependenciesToRemove?: string[];
13+
};
14+
15+
export async function updatePackageData({
16+
directoryPath,
17+
projectName,
18+
scriptsToRemove,
19+
dependenciesToRemove,
20+
devDependenciesToRemove,
21+
}: UpdatePackageDataArgs): Promise<{
22+
templateVersion: string;
23+
}> {
1024
try {
1125
const packageJsonPath = path.join(directoryPath, 'package.json');
1226
const packageJsonData = await fs.readFile(packageJsonPath, 'utf-8');
@@ -18,15 +32,28 @@ export async function updatePackageData(
1832
author: _author,
1933
version: templateVersion,
2034
build,
35+
scripts,
36+
dependencies,
37+
devDependencies,
2138
...originalPackageJsonData
2239
} = JSON.parse(packageJsonData);
2340

41+
const updatedScripts = omitKeys(scripts, scriptsToRemove);
42+
const updatedDependencies = omitKeys(dependencies, dependenciesToRemove);
43+
const updatedDevDependencies = omitKeys(
44+
devDependencies,
45+
devDependenciesToRemove
46+
);
47+
2448
const updatedPackageJson = {
2549
name: projectName,
2650
version: PACKAGE_DEFAULTS.version,
2751
build,
2852
license: PACKAGE_DEFAULTS.license,
2953
private: PACKAGE_DEFAULTS.private,
54+
scripts: updatedScripts,
55+
dependencies: updatedDependencies,
56+
devDependencies: updatedDevDependencies,
3057
...originalPackageJsonData,
3158
};
3259

src/prompts/getSelectedTemplate.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ export async function getSelectedTemplate(): Promise<TemplateId> {
88
name: 'templateId',
99
message: 'Choose a starter template for your project:',
1010
choices: [
11+
{
12+
message: 'Next.js',
13+
name: 'nextjs',
14+
},
1115
{
1216
message: 'React-Vite',
1317
name: 'react-vite',

src/types/template.types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
export type TemplateId = 'react-vite';
1+
export type TemplateId = 'react-vite' | 'nextjs';
22

33
export type ExtensionId = 'template-markdown';

src/utils/omitKeys.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export function omitKeys<T extends Record<string, unknown>>(
2+
obj: T | undefined,
3+
keysToRemove: string[] | undefined
4+
): T | undefined {
5+
if (!obj) {
6+
return obj;
7+
}
8+
if (!keysToRemove?.length) {
9+
return obj;
10+
}
11+
return Object.fromEntries(
12+
Object.entries(obj).filter(([key]) => !keysToRemove.includes(key))
13+
) as T;
14+
}

0 commit comments

Comments
 (0)