create-aomex 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -32,7 +32,7 @@ if (existsSync(targetDir)) {
32
32
  process.exit(1);
33
33
  }
34
34
  var nodeVersion = process.versions.node;
35
- var packageManager = "npm";
35
+ var packageManager = "pnpm";
36
36
  for (const item of ["pnpm", "npm", "yarn"]) {
37
37
  if (argv[item]) {
38
38
  packageManager = item;
@@ -80,7 +80,6 @@ spinner.add({
80
80
  await cp(templateDir, targetDir, { recursive: true });
81
81
  await replaceVariables("package.json", variables);
82
82
  await replaceVariables("README.md", variables);
83
- await replaceVariables("Dockerfile", variables);
84
83
  await sleep();
85
84
  }
86
85
  });
@@ -105,17 +104,16 @@ spinner.add({
105
104
  pkgs: [
106
105
  "@aomex/core",
107
106
  "@aomex/web",
108
- "@aomex/router",
109
107
  "@aomex/cors",
110
108
  "@aomex/etag",
111
109
  "@aomex/compress",
112
110
  "@aomex/http-logger",
113
111
  "@aomex/response-time",
114
112
  "@aomex/console",
115
- "@aomex/commander",
116
113
  "@aomex/cron",
117
114
  "@aomex/helmet",
118
115
  "@aomex/openapi",
116
+ "@aomex/swagger-ui",
119
117
  "@aomex/async-trace",
120
118
  "@prisma/client"
121
119
  ]
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/replace-variables.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport path from 'node:path/posix';\nimport yargsParser from 'yargs-parser';\nimport { existsSync } from 'node:fs';\nimport { cp, mkdir, rm } from 'node:fs/promises';\nimport { Listr } from 'listr2';\nimport { styleText } from 'node:util';\nimport { execSync, spawn } from 'node:child_process';\nimport { replaceVariables } from './replace-variables';\nimport kebabCase from 'lodash.kebabcase';\n\nconst argv = yargsParser(process.argv.slice(2));\nconst templateDir = path.join(import.meta.dirname, '..', 'templates');\n\nconst projectName = kebabCase(argv['project'] || 'my-aomex-project');\nconst targetDir = path.resolve(projectName);\nif (existsSync(targetDir)) {\n console.error(styleText('red', `目录 \"${targetDir}\" 已存在!`));\n process.exit(1);\n}\nconst nodeVersion = process.versions.node;\n\nlet packageManager = 'npm';\nfor (const item of <const>['pnpm', 'npm', 'yarn']) {\n if (argv[item]) {\n packageManager = item;\n break;\n }\n}\n\nconst runShell = async (command: string) => {\n await new Promise((resolve, reject) => {\n const stream = spawn(command, {\n cwd: process.cwd(),\n env: process.env,\n shell: true,\n });\n stream.on('close', resolve);\n stream.on('error', reject);\n });\n};\nconst sleep = () => new Promise((resolve) => setTimeout(resolve, 500));\n\nconst spinner = new Listr([]);\n\nspinner.add({\n title: '创建目录',\n task: async () => {\n if (existsSync(targetDir)) {\n await rm(targetDir, { recursive: true, force: true });\n }\n await mkdir(targetDir, { recursive: true });\n process.chdir(path.resolve(projectName));\n },\n});\n\nspinner.add({\n title: 'git初始化',\n task: async () => {\n await runShell('git init');\n await sleep();\n },\n});\n\nspinner.add({\n title: '复制模板文件',\n task: async () => {\n const variables = {\n projectName,\n packageManager,\n nodeVersion,\n };\n await cp(templateDir, targetDir, { recursive: true });\n await replaceVariables('package.json', variables);\n await replaceVariables('README.md', variables);\n await replaceVariables('Dockerfile', variables);\n await sleep();\n },\n});\n\nspinner.add({\n title: '增加volta配置',\n skip: async () => {\n return !/\\d\\.\\d/.test(execSync('volta -v', { encoding: 'utf8' }));\n },\n task: async () => {\n await runShell(`volta pin node@${nodeVersion}`);\n if (packageManager !== 'npm') {\n await runShell(`volta pin ${packageManager}`);\n }\n },\n});\n\nspinner.add({\n title: '安装插件',\n task: async (_, task) => {\n const packages: { label: string; pkgs: string[]; dev?: boolean }[] = [\n {\n label: 'dependencies',\n pkgs: [\n '@aomex/core',\n '@aomex/web',\n '@aomex/router',\n '@aomex/cors',\n '@aomex/etag',\n '@aomex/compress',\n '@aomex/http-logger',\n '@aomex/response-time',\n '@aomex/console',\n '@aomex/commander',\n '@aomex/cron',\n '@aomex/helmet',\n '@aomex/openapi',\n '@aomex/async-trace',\n '@prisma/client',\n ],\n },\n {\n label: 'dev dependencies',\n pkgs: [\n 'prisma',\n 'typescript',\n 'tsx',\n 'tsc-alias',\n '@types/node',\n 'husky',\n 'prettier',\n '@commitlint/cli',\n '@commitlint/config-conventional',\n 'eslint',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'eslint-plugin-check-file',\n ],\n dev: true,\n },\n ];\n const action = packageManager === 'npm' ? 'install' : 'add';\n const devSuffix = packageManager === 'npm' ? '--save-dev' : '-D';\n\n for (let i = 0; i < packages.length; ++i) {\n const { pkgs, dev, label } = packages[i]!;\n task.title = '安装插件 ' + styleText('gray', label);\n await runShell(\n `${packageManager} ${action} ${pkgs.join(' ')} ${dev ? devSuffix : ''}`,\n );\n }\n task.title = '安装插件';\n },\n});\n\nspinner.add({\n title: '生成prisma客户端',\n task: async () => {\n await runShell('npx prisma generate');\n await sleep();\n },\n});\n\nawait spinner.run();\n\nconsole.log(\n '\\n项目创建成功:' +\n styleText(['blue', 'underline'], process.cwd()) +\n '\\n' +\n '启动项目可执行如下指令:' +\n '\\n\\n' +\n styleText('green', `cd ${projectName} && ${packageManager} start`) +\n '\\n',\n);\n","import { readFile, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\n\nexport const replaceVariables = async (\n filename: string,\n variables: Record<string, string>,\n) => {\n const packageJSONFile = path.resolve(filename);\n let packageContent = await readFile(packageJSONFile, 'utf8');\n Object.entries(variables).forEach(([key, value]) => {\n packageContent = packageContent.replaceAll(`{{${key}}}`, value);\n });\n await writeFile(packageJSONFile, packageContent);\n};\n"],"mappings":"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","names":["path","path"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/replace-variables.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport path from 'node:path/posix';\nimport yargsParser from 'yargs-parser';\nimport { existsSync } from 'node:fs';\nimport { cp, mkdir, rm } from 'node:fs/promises';\nimport { Listr } from 'listr2';\nimport { styleText } from 'node:util';\nimport { execSync, spawn } from 'node:child_process';\nimport { replaceVariables } from './replace-variables';\nimport kebabCase from 'lodash.kebabcase';\n\nconst argv = yargsParser(process.argv.slice(2));\nconst templateDir = path.join(import.meta.dirname, '..', 'templates');\n\nconst projectName = kebabCase(argv['project'] || 'my-aomex-project');\nconst targetDir = path.resolve(projectName);\nif (existsSync(targetDir)) {\n console.error(styleText('red', `目录 \"${targetDir}\" 已存在!`));\n process.exit(1);\n}\nconst nodeVersion = process.versions.node;\n\nlet packageManager = 'pnpm';\nfor (const item of <const>['pnpm', 'npm', 'yarn']) {\n if (argv[item]) {\n packageManager = item;\n break;\n }\n}\n\nconst runShell = async (command: string) => {\n await new Promise((resolve, reject) => {\n const stream = spawn(command, {\n cwd: process.cwd(),\n env: process.env,\n shell: true,\n });\n stream.on('close', resolve);\n stream.on('error', reject);\n });\n};\nconst sleep = () => new Promise((resolve) => setTimeout(resolve, 500));\n\nconst spinner = new Listr([]);\n\nspinner.add({\n title: '创建目录',\n task: async () => {\n if (existsSync(targetDir)) {\n await rm(targetDir, { recursive: true, force: true });\n }\n await mkdir(targetDir, { recursive: true });\n process.chdir(path.resolve(projectName));\n },\n});\n\nspinner.add({\n title: 'git初始化',\n task: async () => {\n await runShell('git init');\n await sleep();\n },\n});\n\nspinner.add({\n title: '复制模板文件',\n task: async () => {\n const variables = {\n projectName,\n packageManager,\n nodeVersion,\n };\n await cp(templateDir, targetDir, { recursive: true });\n await replaceVariables('package.json', variables);\n await replaceVariables('README.md', variables);\n await sleep();\n },\n});\n\nspinner.add({\n title: '增加volta配置',\n skip: async () => {\n return !/\\d\\.\\d/.test(execSync('volta -v', { encoding: 'utf8' }));\n },\n task: async () => {\n await runShell(`volta pin node@${nodeVersion}`);\n if (packageManager !== 'npm') {\n await runShell(`volta pin ${packageManager}`);\n }\n },\n});\n\nspinner.add({\n title: '安装插件',\n task: async (_, task) => {\n const packages: { label: string; pkgs: string[]; dev?: boolean }[] = [\n {\n label: 'dependencies',\n pkgs: [\n '@aomex/core',\n '@aomex/web',\n '@aomex/cors',\n '@aomex/etag',\n '@aomex/compress',\n '@aomex/http-logger',\n '@aomex/response-time',\n '@aomex/console',\n '@aomex/cron',\n '@aomex/helmet',\n '@aomex/openapi',\n '@aomex/swagger-ui',\n '@aomex/async-trace',\n '@prisma/client',\n ],\n },\n {\n label: 'dev dependencies',\n pkgs: [\n 'prisma',\n 'typescript',\n 'tsx',\n 'tsc-alias',\n '@types/node',\n 'husky',\n 'prettier',\n '@commitlint/cli',\n '@commitlint/config-conventional',\n 'eslint',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'eslint-plugin-check-file',\n ],\n dev: true,\n },\n ];\n const action = packageManager === 'npm' ? 'install' : 'add';\n const devSuffix = packageManager === 'npm' ? '--save-dev' : '-D';\n\n for (let i = 0; i < packages.length; ++i) {\n const { pkgs, dev, label } = packages[i]!;\n task.title = '安装插件 ' + styleText('gray', label);\n await runShell(\n `${packageManager} ${action} ${pkgs.join(' ')} ${dev ? devSuffix : ''}`,\n );\n }\n task.title = '安装插件';\n },\n});\n\nspinner.add({\n title: '生成prisma客户端',\n task: async () => {\n await runShell('npx prisma generate');\n await sleep();\n },\n});\n\nawait spinner.run();\n\nconsole.log(\n '\\n项目创建成功:' +\n styleText(['blue', 'underline'], process.cwd()) +\n '\\n' +\n '启动项目可执行如下指令:' +\n '\\n\\n' +\n styleText('green', `cd ${projectName} && ${packageManager} start`) +\n '\\n',\n);\n","import { readFile, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\n\nexport const replaceVariables = async (\n filename: string,\n variables: Record<string, string>,\n) => {\n const packageJSONFile = path.resolve(filename);\n let packageContent = await readFile(packageJSONFile, 'utf8');\n Object.entries(variables).forEach(([key, value]) => {\n packageContent = packageContent.replaceAll(`{{${key}}}`, value);\n });\n await writeFile(packageJSONFile, packageContent);\n};\n"],"mappings":"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","names":["path","path"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "create-aomex",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "repository": "git@github.com:aomex/create-aomex.git",
5
5
  "author": "geekact <fanwenhua1990@gmail.com>",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "scripts": {
9
- "cli": "tsx src/index.ts --project=abc --pnpm",
9
+ "cli": "rm -rf abc && tsx src/index.ts --project=my-aomex",
10
10
  "release": "release-it --ci",
11
11
  "build": "tsup",
12
12
  "prepublishOnly": "tsup"
@@ -36,28 +36,27 @@
36
36
  "yargs-parser": "^21.1.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@aomex/async-trace": "^1.3.0",
40
- "@aomex/commander": "^1.0.5",
41
- "@aomex/compress": "^1.0.5",
42
- "@aomex/console": "^1.0.5",
43
- "@aomex/core": "^1.0.5",
44
- "@aomex/cors": "^1.0.5",
45
- "@aomex/cron": "^1.3.0",
46
- "@aomex/etag": "^1.0.5",
47
- "@aomex/helmet": "^1.0.5",
48
- "@aomex/http-logger": "^1.0.5",
49
- "@aomex/openapi": "^1.0.5",
50
- "@aomex/response-time": "^1.3.0",
51
- "@aomex/router": "^1.0.5",
52
- "@aomex/web": "^1.0.5",
53
- "@prisma/client": "^5.16.0",
39
+ "@aomex/async-trace": "^2.0.1",
40
+ "@aomex/compress": "^2.0.1",
41
+ "@aomex/console": "^2.0.1",
42
+ "@aomex/core": "^2.0.1",
43
+ "@aomex/cors": "^2.0.1",
44
+ "@aomex/cron": "^2.0.1",
45
+ "@aomex/etag": "^2.0.1",
46
+ "@aomex/helmet": "^2.0.1",
47
+ "@aomex/http-logger": "^2.0.1",
48
+ "@aomex/openapi": "^2.0.1",
49
+ "@aomex/response-time": "^2.0.1",
50
+ "@aomex/swagger-ui": "^2.0.1",
51
+ "@aomex/web": "^2.0.1",
52
+ "@prisma/client": "^5.17.0",
54
53
  "@types/lodash.kebabcase": "^4.1.9",
55
- "@types/node": "^20.14.8",
54
+ "@types/node": "^20.14.12",
56
55
  "@types/yargs-parser": "^21.0.3",
57
- "prisma": "^5.16.0",
58
- "release-it": "^17.4.0",
59
- "tsup": "^8.1.0",
60
- "tsx": "^4.15.7",
61
- "typescript": "^5.5.2"
56
+ "prisma": "^5.17.0",
57
+ "release-it": "^17.6.0",
58
+ "tsup": "^8.2.3",
59
+ "tsx": "^4.16.2",
60
+ "typescript": "^5.5.4"
62
61
  }
63
62
  }
@@ -7,7 +7,7 @@
7
7
  "node": "{{nodeVersion}}"
8
8
  },
9
9
  "scripts": {
10
- "start": "docker compose -f docker-local.yml up -d && {{packageManager}} install && prisma generate && prisma db push && node --import tsx/esm --watch src/web.ts",
10
+ "start": "prisma generate && prisma db push && node --import tsx/esm --watch src/web.ts",
11
11
  "build": "tsc && tsc-alias --resolve-full-paths",
12
12
  "prepare": "npx husky",
13
13
  "preinstall": "npx only-allow {{packageManager}}"
@@ -1,6 +1,6 @@
1
1
  datasource db {
2
- provider = "mysql"
3
- url = env("DATABASE_URL")
2
+ provider = "sqlite"
3
+ url = "file:./sqlite.db"
4
4
  relationMode = "prisma"
5
5
  }
6
6
 
@@ -12,6 +12,6 @@ model User {
12
12
  id Int @id @default(autoincrement())
13
13
  name String
14
14
  age Int
15
- created_at DateTime @default(now()) @db.DateTime(0)
16
- updated_at DateTime @default(now()) @updatedAt @db.DateTime(0)
15
+ created_at DateTime @default(now())
16
+ updated_at DateTime @default(now()) @updatedAt()
17
17
  }
@@ -1,6 +1,4 @@
1
- import { ConsoleApp } from '@aomex/console';
2
- import { commanders } from '@aomex/commander';
3
- import { openapi } from '@aomex/openapi';
1
+ import { commanders, ConsoleApp } from '@aomex/console';
4
2
  import { cron } from '@aomex/cron';
5
3
  import { traceMiddleware } from '@aomex/async-trace';
6
4
 
@@ -9,18 +7,12 @@ const app = new ConsoleApp({
9
7
  mount: [
10
8
  cron({
11
9
  path: './src/commanders',
12
- // store: RedisCache,
10
+ // store: new Caching(),
13
11
  }),
14
12
  traceMiddleware('生命周期', async (record) => {
15
13
  // 根据 record.delta 上报慢日志
16
14
  // console.log(record);
17
15
  }),
18
- openapi({
19
- routers: './src/routers',
20
- docs: {
21
- servers: [{ url: 'http://localhost:3000', description: 'Local' }],
22
- },
23
- }),
24
16
  commanders('./src/commanders'),
25
17
  ],
26
18
  });
@@ -39,6 +31,3 @@ declare module '@aomex/console' {
39
31
  interface Props extends T {}
40
32
  }
41
33
  }
42
- function traceMiddleware(arg0: string, arg1: (record: any) => Promise<void>): any {
43
- throw new Error('Function not implemented.');
44
- }
@@ -1,5 +1,4 @@
1
- import { Commander } from '@aomex/commander';
2
- import { options } from '@aomex/console';
1
+ import { Commander, options } from '@aomex/console';
3
2
  import { rule } from '@aomex/core';
4
3
 
5
4
  export const commander = new Commander();
@@ -1,5 +1,4 @@
1
- import { Commander } from '@aomex/commander';
2
- import { options } from '@aomex/console';
1
+ import { Commander, options } from '@aomex/console';
3
2
  import { rule } from '@aomex/core';
4
3
  import { schedule } from '@aomex/cron';
5
4
 
@@ -1,4 +1,4 @@
1
- import { Router } from '@aomex/router';
1
+ import { Router } from '@aomex/web';
2
2
 
3
3
  export const router = new Router();
4
4
 
@@ -1,6 +1,5 @@
1
- import { Router } from '@aomex/router';
2
1
  import { services } from '../services';
3
- import { body, params } from '@aomex/web';
2
+ import { body, params, Router } from '@aomex/web';
4
3
  import { rule } from '@aomex/core';
5
4
 
6
5
  export const router = new Router({
@@ -24,7 +23,7 @@ router.get('/:id', {
24
23
  const { id } = ctx.params;
25
24
  const user = await services.user.findById(id);
26
25
  if (!user) {
27
- ctx.throw(404, 'user not found');
26
+ return void ctx.throw(404, 'user not found');
28
27
  }
29
28
  ctx.send(user);
30
29
  },
@@ -1,12 +1,13 @@
1
- import { WebApp } from '@aomex/web';
1
+ import { routers, WebApp } from '@aomex/web';
2
2
  import { cors } from '@aomex/cors';
3
3
  import { compress } from '@aomex/compress';
4
4
  import { httpLogger } from '@aomex/http-logger';
5
5
  import { etag } from '@aomex/etag';
6
- import { routers } from '@aomex/router';
7
6
  import { helmet } from '@aomex/helmet';
8
7
  import { responseTime } from '@aomex/response-time';
9
8
  import { traceMiddleware } from '@aomex/async-trace';
9
+ import { swaggerUI } from '@aomex/swagger-ui';
10
+ import { generateOpenapi } from '@aomex/openapi';
10
11
 
11
12
  export const app = new WebApp({
12
13
  locale: 'zh_CN',
@@ -18,9 +19,20 @@ export const app = new WebApp({
18
19
  }),
19
20
  cors(),
20
21
  compress(),
21
- httpLogger(),
22
22
  etag(),
23
+ // 访问 http://localhost:3000/swagger 可以查看文档
24
+ swaggerUI({
25
+ openapi: () => {
26
+ return generateOpenapi({
27
+ routers: './src/routers',
28
+ docs: {
29
+ servers: [{ url: 'http://localhost:3000', description: 'Local' }],
30
+ },
31
+ });
32
+ },
33
+ }),
23
34
  helmet(),
35
+ httpLogger(),
24
36
  routers('./src/routers'),
25
37
  ],
26
38
  });
package/templates/.env DELETED
@@ -1 +0,0 @@
1
- DATABASE_URL="mysql://root:123456@localhost:3306/demo_db"
@@ -1,10 +0,0 @@
1
- FROM node:{{nodeVersion}}
2
- COPY . /codes
3
- WORKDIR /codes
4
- RUN sh scripts/docker-build.sh
5
- RUN mv .env.production .env
6
-
7
- ENV TZ=Asia/Shanghai
8
- ENV PORT=3000
9
- ENV NODE_ENV=production
10
- CMD ["node", "--enable-source-maps", "src/web.js"]
@@ -1,18 +0,0 @@
1
- services:
2
- mysql:
3
- image: mysql:8
4
- environment:
5
- # 对应 .env 文件的配置
6
- MYSQL_DATABASE: demo_db
7
- MYSQL_ROOT_PASSWORD: 123456
8
- volumes:
9
- - ./volumes/mysql:/var/lib/mysql
10
- ports:
11
- - 3306:3306
12
- command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --explicit_defaults_for_timestamp=true
13
- redis:
14
- image: redis:7
15
- volumes:
16
- - ./volumes/redis:/data
17
- ports:
18
- - 6379:6379
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env sh
2
-
3
- set -ex
4
-
5
- corepack enable
6
- pnpm install
7
- npx prisma generate
8
- npx tsc && npx tsc-alias --resolve-full-paths
9
- rm -rf src
10
- mv build/src .
11
- pnpm install --prod --ignore-scripts