Skip to content

Commit

Permalink
fix(create): fix create flow
Browse files Browse the repository at this point in the history
  • Loading branch information
Mister-Hope committed Jan 26, 2024
1 parent fd2fae0 commit 2cb4b30
Show file tree
Hide file tree
Showing 6 changed files with 162 additions and 100 deletions.
5 changes: 5 additions & 0 deletions packages/create/src/config/config.ts
@@ -0,0 +1,5 @@
export type Bundler = "vite" | "webpack";
export const bundlers: Bundler[] = ["vite", "webpack"];

export type Preset = "blog" | "docs";
export const presets: Preset[] = ["blog", "docs"];
18 changes: 12 additions & 6 deletions packages/create/src/config/i18n.ts
Expand Up @@ -4,7 +4,7 @@ import type { PackageManager } from "../utils/index.js";

export type Lang = "english (US)" | "简体中文";

export interface CreateI18n {
export interface CreateLocale {
flow: {
getVersion: string;
createPackage: string;
Expand All @@ -19,6 +19,7 @@ export interface CreateI18n {
git: string;
workflow: string;
packageManager: string;
bundler: string;
preset: string;
devServer: string;

Expand All @@ -38,14 +39,15 @@ export interface CreateI18n {
error: {
name: string;
version: string;
bundler: string;
preset: string;
outputDirMissing: (packageManager: PackageManager) => string;
updateDirMissing: (packageManager: PackageManager) => string;
dirNotEmpty: (targetDir: string) => string;
};
}

export const i18n: Record<Lang, CreateI18n> = {
export const i18n: Record<Lang, CreateLocale> = {
简体中文: {
flow: {
getVersion: "获取依赖的最新版本...",
Expand All @@ -62,6 +64,7 @@ export const i18n: Record<Lang, CreateI18n> = {
i18n: "项目需要用到多语言么?",
git: "是否初始化 Git 仓库?",
workflow: "是否需要一个自动部署文档到 GitHub Pages 的工作流?",
bundler: "你想要使用哪个打包器?",
preset: "你想要创建什么类型的项目?",
devServer: "是否想要现在启动 Demo 查看?",
name: "设置应用名称",
Expand All @@ -81,7 +84,8 @@ export const i18n: Record<Lang, CreateI18n> = {
error: {
name: "应用名称应只包含小写字母、数字和连接线 (-)",
version: "此版本无效,版本号应为 'x.x.x'",
preset: "预设 (--preset) 仅支持 doc 或 blog",
bundler: "打包器 (--bundler) 仅支持 vite 或 webpack",
preset: "预设 (--preset) 仅支持 docs 或 blog",
outputDirMissing: (packageManager: PackageManager): string =>
`"[dir]" 的方括号表示此处为一个参数,你应该替换为自己想使用的文件夹名称,如 "my-blog", "project-docs" 等!\n例如: "${packageManager} init vuepress-theme-hope project-docs"`,
updateDirMissing: (packageManager: PackageManager): string =>
Expand All @@ -106,6 +110,7 @@ export const i18n: Record<Lang, CreateI18n> = {
i18n: "Does the project need multiple languages?",
git: "Initialize a git repository?",
workflow: "Do you need a GitHub workflow to deploy docs on GitHub pages?",
bundler: "Which bundler do you want to use?",
preset: "What type of project do you want to create?",
packageManager: "Choose package manager",
devServer: "Would you like to preview template now?",
Expand All @@ -127,7 +132,8 @@ export const i18n: Record<Lang, CreateI18n> = {
name: "package name should only contain lowercase characters, numbers and dash",
version:
"This version is not a valid one. Version should be like 'x.x.x'",
preset: 'preset (--preset) only support "doc" or "blog"',
bundler: 'bundler (--bundler) only support "vite" or "webpack"',
preset: 'preset (--preset) only support "docs" or "blog"',
outputDirMissing: (packageManager: PackageManager): string =>
`The brackets in "[dir]" means it is an argument, you should replace it with folder name you want to use! E.g.: "my-blog", "project-docs"\nFor example: "${packageManager} init vuepress-theme-hope project-docs"`,
updateDirMissing: (packageManager: PackageManager): string =>
Expand All @@ -140,7 +146,7 @@ export const i18n: Record<Lang, CreateI18n> = {

interface LanguageResult {
lang: Lang;
message: CreateI18n;
locale: CreateLocale;
}

export const getLanguage = async (): Promise<LanguageResult> => {
Expand All @@ -155,6 +161,6 @@ export const getLanguage = async (): Promise<LanguageResult> => {

return {
lang: language,
message: i18n[language],
locale: i18n[language],
};
};
1 change: 1 addition & 0 deletions packages/create/src/config/index.ts
@@ -1,3 +1,4 @@
export * from "./config.js";
export * from "./i18n.js";
export * from "./template.js";
export * from "./version.js";
51 changes: 27 additions & 24 deletions packages/create/src/config/template.ts
Expand Up @@ -5,8 +5,10 @@ import { fileURLToPath } from "node:url";
import { execaCommandSync } from "execa";
import inquirer from "inquirer";

import type { Preset } from "./config.js";
import { presets } from "./config.js";
import { updateGitIgnore } from "./gitignore.js";
import type { CreateI18n, Lang } from "./i18n.js";
import type { CreateLocale, Lang } from "./i18n.js";
import { getWorkflowContent } from "./workflow.js";
import type { PackageManager } from "../utils/index.js";
import {
Expand All @@ -21,22 +23,23 @@ const __filename = fileURLToPath(import.meta.url);
// eslint-disable-next-line @typescript-eslint/naming-convention
const __dirname = dirname(__filename);

export const generateTemplate = async (
targetDir: string,
{
cwd = process.cwd(),
packageManager,
lang,
message,
preset,
}: {
cwd?: string;
packageManager: PackageManager;
lang: Lang;
message: CreateI18n;
preset?: "blog" | "docs" | null;
},
): Promise<void> => {
interface TemplateOptions {
packageManager: PackageManager;
lang: Lang;
locale: CreateLocale;
cwd?: string;
targetDir: string;
preset?: Preset | null;
}

export const generateTemplate = async ({
cwd = process.cwd(),
targetDir,
lang,
locale,
preset,
packageManager,
}: TemplateOptions): Promise<void> => {
const { i18n, workflow } = await inquirer.prompt<{
i18n: boolean;
workflow: boolean;
Expand All @@ -45,30 +48,30 @@ export const generateTemplate = async (
{
name: "i18n",
type: "confirm",
message: message.question.i18n,
message: locale.question.i18n,
default: false,
},
{
name: "workflow",
type: "confirm",
message: message.question.workflow,
message: locale.question.workflow,
default: true,
},
]);

if (!preset)
preset = (
await inquirer.prompt<{ preset: "blog" | "docs" }>([
await inquirer.prompt<{ preset: Preset }>([
{
name: "preset",
type: "list",
message: message.question.preset,
choices: ["blog", "docs"],
message: locale.question.preset,
choices: presets,
},
])
).preset;

console.log(message.flow.generateTemplate);
console.log(locale.flow.generateTemplate);

const templateFolder = preset;

Expand Down Expand Up @@ -139,7 +142,7 @@ export const generateTemplate = async (
{
name: "git",
type: "confirm",
message: message.question.git,
message: locale.question.git,
default: true,
},
]);
Expand Down

0 comments on commit 2cb4b30

Please sign in to comment.