create-skweb 3.1.1 → 3.3.0
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/.rollup.cache/Users/stayknight/projects/skweb-mono/tools/create-skweb/dist/index.js +14 -1
- package/.rollup.cache/Users/stayknight/projects/skweb-mono/tools/create-skweb/tsconfig.tsbuildinfo +1 -1
- package/.turbo/turbo-build.log +16 -17
- package/.turbo/turbo-lint.log +11 -12
- package/.turbo/turbo-test.log +66 -1
- package/CHANGELOG.md +49 -0
- package/dist/cli.js +14 -1
- package/dist/index.js +14 -1
- package/package.json +1 -1
- package/src/index.ts +21 -1
- package/templates/cjs/.env.example +5 -9
- package/templates/cjs/ecosystem.config.js +2 -2
- package/templates/cjs/package.json +5 -5
- package/templates/cjs/src/controllers/user.js +2 -2
- package/templates/cjs/src/cron-app.js +40 -0
- package/templates/cjs/src/cron-framework.js +44 -0
- package/templates/cjs/src/swagger.js +13 -18
- package/templates/cjs/src/utils/config.js +33 -13
- package/templates/cjs/src/{app.js → web-app.js} +41 -53
- package/templates/cjs/src/web-framework.js +23 -0
- package/templates/mjs/.env.example +5 -9
- package/templates/mjs/ecosystem.config.js +2 -2
- package/templates/mjs/package.json +5 -5
- package/templates/mjs/src/controllers/user.js +2 -2
- package/templates/mjs/src/cron-app.js +45 -0
- package/templates/mjs/src/cron-framework.js +44 -0
- package/templates/mjs/src/swagger.js +13 -18
- package/templates/mjs/src/utils/config.js +29 -13
- package/templates/mjs/src/{app.js → web-app.js} +40 -56
- package/templates/mjs/src/web-framework.js +23 -0
- package/templates/ts/.env.example +5 -9
- package/templates/ts/ecosystem.config.js +2 -2
- package/templates/ts/package.json +5 -5
- package/templates/ts/src/controllers/user.ts +2 -2
- package/templates/ts/src/cron-app.ts +45 -0
- package/templates/ts/src/cron-framework.ts +44 -0
- package/templates/ts/src/swagger.ts +13 -19
- package/templates/ts/src/utils/config.ts +29 -13
- package/templates/ts/src/{app.ts → web-app.ts} +40 -63
- package/templates/ts/src/web-framework.ts +23 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/templates/cjs/src/cronWorker.js +0 -80
- package/templates/cjs/src/index.js +0 -7
- package/templates/cjs/src/services/database.js +0 -15
- package/templates/mjs/src/cronWorker.js +0 -86
- package/templates/mjs/src/index.js +0 -8
- package/templates/mjs/src/services/database.js +0 -16
- package/templates/ts/src/cronWorker.ts +0 -85
- package/templates/ts/src/index.ts +0 -8
- package/templates/ts/src/services/database.ts +0 -16
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import 'dotenv/config'
|
|
2
|
-
|
|
3
|
-
import path from 'path'
|
|
4
|
-
import { fileURLToPath } from 'url'
|
|
5
|
-
import logger from './utils/logger.js'
|
|
6
|
-
import { checkRequiredEnv } from './utils/config.js'
|
|
7
|
-
|
|
8
|
-
const __filename = fileURLToPath(import.meta.url)
|
|
9
|
-
const __dirname = path.dirname(__filename)
|
|
10
|
-
|
|
11
|
-
async function startCronWorker() {
|
|
12
|
-
logger.info('[cron-worker] Starting cron worker process...')
|
|
13
|
-
|
|
14
|
-
if (!checkRequiredEnv()) {
|
|
15
|
-
logger.error('[cron-worker] Configuration validation failed, exiting...')
|
|
16
|
-
process.exit(1)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const { CronFramework } = await import('skweb-framework')
|
|
20
|
-
|
|
21
|
-
const framework = new CronFramework({
|
|
22
|
-
db: {
|
|
23
|
-
host: process.env.DB_HOST || '127.0.0.1',
|
|
24
|
-
port: Number(process.env.DB_PORT) || 3306,
|
|
25
|
-
username: process.env.DB_USER || 'root',
|
|
26
|
-
password: process.env.DB_PASS || '',
|
|
27
|
-
database: process.env.DB_NAME || 'test-project',
|
|
28
|
-
dialect: process.env.DB_DIALECT || 'mysql',
|
|
29
|
-
charset: process.env.DB_CHARSET || 'utf8mb4',
|
|
30
|
-
underscored: true,
|
|
31
|
-
logging: process.env.DEBUG_DB === 'true' ? (msg) => logger.debug(msg) : false
|
|
32
|
-
},
|
|
33
|
-
redis: {
|
|
34
|
-
host: process.env.REDIS_HOST || '127.0.0.1',
|
|
35
|
-
port: Number(process.env.REDIS_PORT) || 6379,
|
|
36
|
-
password: process.env.REDIS_PASSWORD || undefined
|
|
37
|
-
},
|
|
38
|
-
channel: 'cron:task:cmd',
|
|
39
|
-
logger,
|
|
40
|
-
onSaveTask: async (taskData) => {
|
|
41
|
-
const SysCronTask = framework.db?.sequelize?.models.SysCronTask
|
|
42
|
-
if (SysCronTask) {
|
|
43
|
-
await SysCronTask.update(
|
|
44
|
-
{ cache: taskData.cache, data: taskData.data },
|
|
45
|
-
{ where: { id: taskData.taskId } }
|
|
46
|
-
)
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
loadTasks: async () => {
|
|
50
|
-
const SysCronTask = framework.db?.sequelize?.models.SysCronTask
|
|
51
|
-
if (!SysCronTask) return []
|
|
52
|
-
return (await SysCronTask.findAll()).map((t) => ({
|
|
53
|
-
id: String(t.id),
|
|
54
|
-
cronTime: t.cronTime,
|
|
55
|
-
method: t.method
|
|
56
|
-
}))
|
|
57
|
-
}
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
await framework.setup({
|
|
61
|
-
modelsDir: path.join(__dirname, './models'),
|
|
62
|
-
cronActionsDir: path.join(__dirname, './cronActions')
|
|
63
|
-
})
|
|
64
|
-
await framework.start()
|
|
65
|
-
logger.info('[cron-worker] Cron worker started')
|
|
66
|
-
|
|
67
|
-
// 未捕获异常:打印堆栈后直接退出。OS / 进程管理器负责回收资源。
|
|
68
|
-
process.on('uncaughtException', (err) => {
|
|
69
|
-
logger.error(`[cron-worker] uncaughtException: ${err.stack || err.message}`)
|
|
70
|
-
process.exit(1)
|
|
71
|
-
})
|
|
72
|
-
process.on('unhandledRejection', (reason) => {
|
|
73
|
-
logger.error(`[cron-worker] unhandledRejection: ${reason instanceof Error ? reason.stack : String(reason)}`)
|
|
74
|
-
process.exit(1)
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const isMainModule = import.meta.url === `file://${process.argv[1]}`
|
|
79
|
-
if (isMainModule) {
|
|
80
|
-
startCronWorker().catch((err) => {
|
|
81
|
-
logger.error('[cron-worker] Fatal error:', err)
|
|
82
|
-
process.exit(1)
|
|
83
|
-
})
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export { startCronWorker }
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Database } from 'skweb-sequelize'
|
|
2
|
-
|
|
3
|
-
const db = new Database({
|
|
4
|
-
host: process.env.DB_HOST || '127.0.0.1',
|
|
5
|
-
port: Number(process.env.DB_PORT) || 3306,
|
|
6
|
-
username: process.env.DB_USER || 'root',
|
|
7
|
-
password: process.env.DB_PASS || '',
|
|
8
|
-
database: process.env.DB_NAME || '{{name}}',
|
|
9
|
-
dialect: process.env.DB_DIALECT || 'mysql',
|
|
10
|
-
charset: process.env.DB_CHARSET || 'utf8mb4',
|
|
11
|
-
underscored: true,
|
|
12
|
-
logging: process.env.DEBUG_DB === 'true'
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
export { db }
|
|
16
|
-
export default db
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import 'dotenv/config'
|
|
2
|
-
|
|
3
|
-
import path from 'path'
|
|
4
|
-
import { fileURLToPath } from 'url'
|
|
5
|
-
import { CronFramework } from 'skweb-framework'
|
|
6
|
-
import logger from './utils/logger.js'
|
|
7
|
-
import { checkRequiredEnv } from './utils/config.js'
|
|
8
|
-
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url)
|
|
10
|
-
const __dirname = path.dirname(__filename)
|
|
11
|
-
|
|
12
|
-
async function startCronWorker(): Promise<void> {
|
|
13
|
-
logger.info('[cron-worker] Starting cron worker process...')
|
|
14
|
-
|
|
15
|
-
if (!checkRequiredEnv()) {
|
|
16
|
-
logger.error('[cron-worker] Configuration validation failed, exiting...')
|
|
17
|
-
process.exit(1)
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const framework = new CronFramework({
|
|
21
|
-
db: {
|
|
22
|
-
host: process.env.DB_HOST || '127.0.0.1',
|
|
23
|
-
port: Number(process.env.DB_PORT) || 3306,
|
|
24
|
-
username: process.env.DB_USER || 'root',
|
|
25
|
-
password: process.env.DB_PASS || '',
|
|
26
|
-
database: process.env.DB_NAME || 'test-project',
|
|
27
|
-
dialect: (process.env.DB_DIALECT as 'mysql' | 'postgres' | 'sqlite' | 'mariadb') || 'mysql',
|
|
28
|
-
charset: process.env.DB_CHARSET || 'utf8mb4',
|
|
29
|
-
underscored: true,
|
|
30
|
-
logging: process.env.DEBUG_DB === 'true' ? (msg: string) => logger.debug(msg) : false
|
|
31
|
-
},
|
|
32
|
-
redis: {
|
|
33
|
-
host: process.env.REDIS_HOST || '127.0.0.1',
|
|
34
|
-
port: Number(process.env.REDIS_PORT) || 6379,
|
|
35
|
-
password: process.env.REDIS_PASSWORD || undefined
|
|
36
|
-
},
|
|
37
|
-
channel: 'cron:task:cmd',
|
|
38
|
-
logger,
|
|
39
|
-
onSaveTask: async (taskData: { taskId: string; cache: unknown; data: unknown }) => {
|
|
40
|
-
const SysCronTask = framework.dbInstance?.sequelize?.models.SysCronTask as any
|
|
41
|
-
if (SysCronTask) {
|
|
42
|
-
await SysCronTask.update(
|
|
43
|
-
{ cache: taskData.cache, data: taskData.data },
|
|
44
|
-
{ where: { id: taskData.taskId } }
|
|
45
|
-
)
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
loadTasks: async () => {
|
|
49
|
-
const SysCronTask = framework.dbInstance?.sequelize?.models.SysCronTask as any
|
|
50
|
-
if (!SysCronTask) return []
|
|
51
|
-
return (await SysCronTask.findAll()).map((t: any) => ({
|
|
52
|
-
id: String(t.id),
|
|
53
|
-
cronTime: t.cronTime,
|
|
54
|
-
method: t.method
|
|
55
|
-
}))
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
await framework.setup({
|
|
60
|
-
modelsDir: path.join(__dirname, './models'),
|
|
61
|
-
cronActionsDir: path.join(__dirname, './cronActions')
|
|
62
|
-
})
|
|
63
|
-
await framework.start()
|
|
64
|
-
logger.info('[cron-worker] Cron worker started')
|
|
65
|
-
|
|
66
|
-
// 未捕获异常:打印堆栈后直接退出。OS / 进程管理器负责回收资源。
|
|
67
|
-
process.on('uncaughtException', (err) => {
|
|
68
|
-
logger.error(`[cron-worker] uncaughtException: ${err.stack || err.message}`)
|
|
69
|
-
process.exit(1)
|
|
70
|
-
})
|
|
71
|
-
process.on('unhandledRejection', (reason) => {
|
|
72
|
-
logger.error(`[cron-worker] unhandledRejection: ${reason instanceof Error ? reason.stack : String(reason)}`)
|
|
73
|
-
process.exit(1)
|
|
74
|
-
})
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const isMainModule = import.meta.url === `file://${process.argv[1]}`
|
|
78
|
-
if (isMainModule) {
|
|
79
|
-
startCronWorker().catch((err) => {
|
|
80
|
-
logger.error('[cron-worker] Fatal error:', err)
|
|
81
|
-
process.exit(1)
|
|
82
|
-
})
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export { startCronWorker }
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Database } from 'skweb-sequelize'
|
|
2
|
-
|
|
3
|
-
const db = new Database({
|
|
4
|
-
host: process.env.DB_HOST || '127.0.0.1',
|
|
5
|
-
port: Number(process.env.DB_PORT) || 3306,
|
|
6
|
-
username: process.env.DB_USER || 'root',
|
|
7
|
-
password: process.env.DB_PASS || '',
|
|
8
|
-
database: process.env.DB_NAME || '{{name}}',
|
|
9
|
-
dialect: (process.env.DB_DIALECT as any) || 'mysql',
|
|
10
|
-
charset: process.env.DB_CHARSET || 'utf8mb4',
|
|
11
|
-
underscored: true,
|
|
12
|
-
logging: process.env.DEBUG_DB === 'true'
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
export { db }
|
|
16
|
-
export default db
|