Skip to content
This repository was archived by the owner on Dec 10, 2024. It is now read-only.

Commit 616a830

Browse files
feat: ui default theme (#100)
* Delete unused files and composables * Delete unused layout and component files * version(nuxt): release 0.5.0-beta.16 * version(cli): release 0.3.4 * Add branch parameter to defineDownload function * version(cli): release 0.3.5 * Refactor downloadTemplate function in core.ts * Add forceClean option to DefineDownloadOptions and DefineDownloadOptions.path * version(cli): release 0.3.6 * Add existsSync function to prevent unnecessary file copying and add new file to download * version(cli): release 0.3.7 * version(nuxt): release 0.5.0-beta.17 * Add forceClean option to app.vue template and add pages/index.vue template * Remove retry delay in defineDownload function * Update file paths in UI module * version(cli): release 0.3.8 * version(nuxt): release 0.5.0-beta.18 * Update core.ts and README.yaml, and delete style.css and index.ts * version(cli): release 0.3.9 * Update pergel version and add pergel.css asset * version(nuxt): release 0.5.0-beta.19 * version(cli): release 0.3.10 * Refactor folder creation logic in defineDownload function * fix: lint issues * Add themes:prepare script to package.json * Add examples folder to tsconfig.json * Add "themes" directory to tsconfig.json * fix: lint issues
1 parent d419b87 commit 616a830

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+462
-85
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"build": "pnpm --filter './packages/**' build",
1717
"dev:build": "pnpm --filter './packages/**' dev:build",
1818
"dev:prepare": "pnpm --filter './packages/**' dev:prepare",
19+
"themes:prepare": "pnpm --filter './themes/**' dev:prepare",
1920
"lint": "eslint .",
2021
"lint:fix": "eslint . --fix",
2122
"test": "vitest",

packages/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "pergel",
33
"type": "module",
4-
"version": "0.3.3",
4+
"version": "0.3.10",
55
"packageManager": "pnpm@8.10.0",
66
"description": "Full Stack Nuxt Application. It contains the necessary toolkits for a software developer and a fast, clean, tested toolkit.",
77
"author": "Mehmet @productdevbook",

packages/cli/src/commands/download.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export default defineCommand({
7373
const data = defineDownload({
7474
file: _template.file,
7575
folder: _template.folder,
76+
branch: _template.branch,
7677
})
7778

7879
await data({

packages/cli/src/core.ts

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { copyFileSync, rmSync } from 'node:fs'
1+
import { copyFileSync, existsSync, mkdirSync, rmSync } from 'node:fs'
22
import { join, resolve } from 'node:path'
33
import { downloadTemplate } from 'giget'
44
import { defu } from 'defu'
@@ -30,18 +30,47 @@ export function defineDownload(options: DefineDownloadOptions) {
3030
}) as DefineDownloadOptions
3131

3232
if (options.file?.dir) {
33-
const { source, dir } = await downloadTemplate(join(githubRepo, `${options.file.dir}#${options.branch}`), {
33+
const { dir } = await downloadTemplate(join(githubRepo, `${options.file.dir}#${options.branch}`), {
3434
dir: options.file.tempOutput,
3535
cwd,
3636
force: true,
3737
})
3838

3939
for (const file of options.file.path) {
4040
const output = resolve(join(cwd, file.outputFileName))
41-
copyFileSync(
42-
join(dir, file.fileName),
43-
resolve(output),
44-
)
41+
42+
if (!existsSync(output)) {
43+
// remove last .file extends and name for create folder
44+
if (output.split('/').pop()?.includes('.')) {
45+
const folder = output.split('/').slice(0, -1).join('/')
46+
mkdirSync(resolve(folder), {
47+
recursive: true,
48+
})
49+
}
50+
51+
copyFileSync(
52+
join(dir, file.fileName),
53+
resolve(output),
54+
)
55+
}
56+
else if (file.forceClean) {
57+
rmSync(output, {
58+
recursive: true,
59+
force: true,
60+
})
61+
62+
if (output.split('/').pop()?.includes('.')) {
63+
const folder = output.split('/').slice(0, -1).join('/')
64+
mkdirSync(resolve(folder), {
65+
recursive: true,
66+
})
67+
}
68+
69+
copyFileSync(
70+
join(dir, file.fileName),
71+
resolve(output),
72+
)
73+
}
4574

4675
logger.success(`Downloaded template file: ${output}`)
4776
}
@@ -51,8 +80,6 @@ export function defineDownload(options: DefineDownloadOptions) {
5180
force: true,
5281
retryDelay: 100,
5382
})
54-
55-
return { source, dir }
5683
}
5784

5885
if (options.folder && options.folder.length) {
@@ -61,6 +88,7 @@ export function defineDownload(options: DefineDownloadOptions) {
6188
dir: folder.output,
6289
cwd,
6390
force: true,
91+
forceClean: folder.forceClean !== false,
6492
})
6593

6694
logger.success(`Downloaded template folder: ${dir}`)

packages/cli/src/types.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ export interface DefineDownloadOptions {
6969
* `pergel.config.ts`
7070
*/
7171
outputFileName: string
72+
73+
/**
74+
* Force download
75+
* @default
76+
* `true`
77+
*/
78+
forceClean: boolean
7279
}[]
7380
/**
7481
* Folder name
@@ -80,6 +87,7 @@ export interface DefineDownloadOptions {
8087
folder?: {
8188
dir: string
8289
output: string
90+
forceClean: boolean
8391
}[]
8492
branch?: string
8593
}

packages/nuxt/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@pergel/nuxt",
33
"type": "module",
4-
"version": "0.5.0-beta.15",
4+
"version": "0.5.0-beta.19",
55
"description": "Nuxt Full Stack modules. Start your next nuxt project fast and strong.",
66
"author": "Mehmet @productdevbook",
77
"license": "MIT",

packages/nuxt/playground/pergel/README.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
pergel:
22
# This file is generated by pergel. Do not edit it manually.
3-
# Version: 0.5.0-beta.14
3+
# Version: 0.5.0-beta.18
44
test:
55
ui:
6+
# UI Download Template
7+
themes:
8+
authDefault: pergel download -t=default-auth-1 -j=templates
69
# If pergel cli is installed, you can run `pergel install` automatically to install
710
packageJson:
811
dependencies: "@pergel/module-ui@^0.0.5"
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{
2+
"version": "0.1.0",
3+
"templates": {
4+
"default-auth-1": {
5+
"version": "0.0.1",
6+
"branch": "main",
7+
"file": {
8+
"dir": "themes/pergel-auth",
9+
"path": [
10+
{
11+
"fileName": "app.vue",
12+
"outputFileName": "app.vue",
13+
"forceClean": true
14+
},
15+
{
16+
"fileName": "pages/index.vue",
17+
"outputFileName": "pages/index.vue"
18+
},
19+
{
20+
"fileName": "assets/pergel.css",
21+
"outputFileName": "assets/pergel.css"
22+
}
23+
]
24+
},
25+
"folder": [
26+
{
27+
"dir": "themes/pergel-auth/pages/auth",
28+
"output": "pages/auth",
29+
"forceClean": true
30+
},
31+
{
32+
"dir": "themes/pergel-auth/components",
33+
"output": "components",
34+
"forceClean": true
35+
},
36+
{
37+
"dir": "themes/pergel-auth/layouts",
38+
"output": "layouts",
39+
"forceClean": true
40+
},
41+
{
42+
"dir": "themes/pergel-auth/composables",
43+
"output": "composables",
44+
"forceClean": true
45+
}
46+
]
47+
}
48+
}
49+
}

packages/nuxt/src/runtime/core/types/module.ts

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,10 @@ export interface ResolvedPergelOptions {
202202
esnext: boolean
203203

204204
debug: boolean
205+
206+
templates?: {
207+
[name: string]: DefineDownloadOptions
208+
}
205209
}
206210

207211
export interface NuxtPergel extends Nuxt {
@@ -320,6 +324,8 @@ export type PartinalKey<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
320324
export type MaybePromise<T> = T | Promise<T>
321325

322326
export interface DefineDownloadOptions {
327+
version?: string
328+
branch?: string
323329
file?: {
324330
/**
325331
* Directory of file
@@ -330,7 +336,11 @@ export interface DefineDownloadOptions {
330336
/**
331337
* File name
332338
* @example
333-
* `pergel.config.ts`
339+
* [{
340+
* fileName: 'pergel.config.ts',
341+
* outputFileName: 'pergel.config.ts',
342+
* forceClean: false
343+
* }]
334344
*/
335345
path: {
336346
/**
@@ -345,6 +355,13 @@ export interface DefineDownloadOptions {
345355
* `pergel.config.ts`
346356
*/
347357
outputFileName: string
358+
359+
/**
360+
* Force download
361+
* @default
362+
* `true`
363+
*/
364+
forceClean?: boolean
348365
}[]
349366
/**
350367
* Folder name
@@ -354,8 +371,25 @@ export interface DefineDownloadOptions {
354371
tempOutput?: string
355372
}
356373
folder?: {
374+
/**
375+
* Directory of file
376+
* @example
377+
* `templates/default`
378+
*/
357379
dir: string
380+
381+
/**
382+
* Output file name
383+
* @example
384+
* `templates/default`
385+
*/
358386
output: string
387+
388+
/**
389+
* Force download
390+
* @default
391+
* `true`
392+
*/
393+
forceClean: boolean
359394
}[]
360-
branch?: string
361395
}
Lines changed: 76 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,89 @@
11
import { resolve } from 'node:path'
22
import { writeFileSync } from 'node:fs'
3+
import defu from 'defu'
34
import type { DefineDownloadOptions, NuxtPergel } from '../types'
5+
import { generateProjectReadme } from './generateYaml'
46

5-
function createDownloadTemplate(data: DefineDownloadOptions) {
6-
let { file, branch, folder } = data
7+
export function writeDownloadTemplate(nuxt: NuxtPergel) {
8+
const templates = nuxt._pergel.templates
79

8-
branch ??= 'main'
10+
const pergel = resolve(nuxt._pergel.templateDir, 'templates.json')
911

10-
if (file?.dir) {
11-
return /* JS */ `${JSON.stringify({
12-
version: '0.1.0',
13-
templates: {
14-
'pergel-auth': {
15-
version: '1.0.0',
16-
branch,
17-
file,
18-
},
19-
},
20-
}, null, 2)}`
12+
const content = /* JS */ `${JSON.stringify({
13+
version: '0.1.0',
14+
templates,
15+
}, null, 2)}`
16+
17+
writeFileSync(pergel, content, {
18+
encoding: 'utf-8',
19+
})
20+
}
21+
22+
export function addDownloadTemplate(
23+
input: {
24+
nuxt: NuxtPergel
25+
name?: string
26+
version?: string
27+
data?: DefineDownloadOptions
28+
write?: boolean
29+
readme?: {
30+
projectName: string
31+
moduleName: string
32+
}
33+
},
34+
) {
35+
let { nuxt, name, version, data, write } = input
36+
37+
if (!version)
38+
version = '0.0.0'
39+
40+
if (name && data) {
41+
nuxt._pergel.templates ??= {}
42+
nuxt._pergel.templates[name] ??= {}
43+
nuxt._pergel.templates[name].version = version
44+
nuxt._pergel.templates[name].branch = data.branch ?? 'main'
45+
nuxt._pergel.templates[name].file = defu(nuxt._pergel.templates[name].file, data.file ?? {})
46+
nuxt._pergel.templates[name].folder ??= []
47+
nuxt._pergel.templates[name].folder?.push(...data.folder ?? [])
2148
}
49+
const fileName = 'templates'
50+
if (write) {
51+
const templates = nuxt._pergel.templates ?? {}
52+
53+
const pergel = resolve(nuxt._pergel.templateDir, `${fileName}.json`)
2254

23-
if (folder && folder.length > 0) {
24-
return /* JS */ `${JSON.stringify({
55+
if (Object.keys(templates).length > 0) {
56+
const content = /* JS */ `${JSON.stringify({
57+
version: '0.1.0',
58+
templates,
59+
}, null, 2)}`
60+
61+
writeFileSync(pergel, content, {
62+
encoding: 'utf-8',
63+
})
64+
}
65+
66+
const content = /* JS */ `${JSON.stringify({
2567
version: '0.1.0',
26-
templates: {
27-
'pergel-auth': {
28-
version: '1.0.0',
29-
branch,
30-
folder,
31-
},
32-
},
68+
templates,
3369
}, null, 2)}`
34-
}
35-
}
3670

37-
export function writeDownloadTemplate(nuxt: NuxtPergel, fileName: string, options: DefineDownloadOptions) {
38-
const pergel = resolve(nuxt._pergel.templateDir, `${fileName}.json`)
39-
const data = createDownloadTemplate(options)
40-
if (!data)
41-
return
71+
writeFileSync(pergel, content, {
72+
encoding: 'utf-8',
73+
})
74+
}
4275

43-
writeFileSync(pergel, data, {
44-
encoding: 'utf-8',
45-
})
76+
if (input.readme) {
77+
generateProjectReadme({
78+
data: ({ addCommentBlock }) => ({
79+
...addCommentBlock('UI Download Template'),
80+
themes: {
81+
authDefault: `pergel download -t=${name} -j=${fileName}`,
82+
},
83+
}),
84+
nuxt,
85+
moduleName: input.readme.moduleName,
86+
projectName: input.readme.projectName,
87+
})
88+
}
4689
}

0 commit comments

Comments
 (0)