@stdex/create 1.1.0 → 1.2.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/package.json +9 -8
- package/src/index.js +1 -0
- package/templates/base/index.js +3 -1
- package/templates/base/package.json +2 -2
- package/templates/miniprogram/package.json +3 -3
- package/templates/service/package.json +9 -5
- package/templates/service/src/cache.ts +2 -2
- package/templates/service/src/config.ts +2 -2
- package/templates/service/src/controllers/common.ts +1 -1
- package/templates/service/src/database.ts +3 -3
- package/templates/service/src/logger.ts +7 -8
- package/templates/service/src/tasks/common.ts +4 -3
- package/templates/service/src/tasks/demo-school.ts +7 -3
- package/templates/site/package.json +7 -4
- package/templates/site/src/app/index.tsx +2 -2
- package/templates/site/src/index.tsx +2 -2
- package/templates/site/src/lib/init-dayjs.ts +8 -0
- package/templates/site/src/lib/logging.ts +2 -8
- package/templates/site/src/views/dashboard.tsx +1 -1
- package/templates/site/src/views/school-detail.tsx +1 -1
- package/templates/site/src/views/school-ranking.tsx +1 -1
- package/templates/site/src/views/schools.tsx +1 -1
- package/templates/site/src/views/setting.tsx +1 -1
- package/templates/site/src/views/student-score.tsx +1 -1
- package/templates/site/src/views/students.tsx +1 -1
- package/templates/miniprogram/dist/app.js +0 -9
- package/templates/miniprogram/dist/app.json +0 -16
- package/templates/miniprogram/dist/app.wxss +0 -0
- package/templates/miniprogram/dist/lib/app-data.js +0 -51
- package/templates/miniprogram/dist/pages/index/index.js +0 -20
- package/templates/miniprogram/dist/pages/index/index.json +0 -3
- package/templates/miniprogram/dist/pages/index/index.wxml +0 -1
- package/templates/miniprogram/dist/pages/index/index.wxss +0 -11
- package/templates/miniprogram/dist/sitemap.json +0 -9
- /package/templates/service/{.env → _env} +0 -0
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stdex/create",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "npm init 项目模板 - Project Templates For 'npm init'",
|
|
5
|
-
"homepage": "https://github.com/anjianshi/stdex-create/",
|
|
5
|
+
"homepage": "https://github.com/anjianshi/stdex-packages/create/",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"create": "./src/index.js"
|
|
@@ -10,19 +10,20 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"src",
|
|
12
12
|
"templates",
|
|
13
|
-
"templates/**/.env",
|
|
14
13
|
"!templates/**/node_modules",
|
|
15
|
-
"!templates/**/.swc"
|
|
14
|
+
"!templates/**/.swc",
|
|
15
|
+
"!templates/**/.DS_Store",
|
|
16
|
+
"!templates/**/dist"
|
|
16
17
|
],
|
|
17
18
|
"bugs": {
|
|
18
|
-
"url": "https://github.com/anjianshi/stdex-
|
|
19
|
+
"url": "https://github.com/anjianshi/stdex-packages/issues",
|
|
19
20
|
"email": "anjianshi@gmail.com"
|
|
20
21
|
},
|
|
21
22
|
"license": "MIT",
|
|
22
23
|
"author": "anjianshi <anjianshi@gmail.com>",
|
|
23
24
|
"repository": {
|
|
24
25
|
"type": "git",
|
|
25
|
-
"url": "github:anjianshi/stdex-
|
|
26
|
+
"url": "github:anjianshi/stdex-packages"
|
|
26
27
|
},
|
|
27
28
|
"publishConfig": {
|
|
28
29
|
"registry": "https://registry.npmjs.org/",
|
|
@@ -32,8 +33,8 @@
|
|
|
32
33
|
"chalk": "^5.3.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"@stdex/presets-eslint-node": "
|
|
36
|
-
"@stdex/presets-prettier": "
|
|
36
|
+
"@stdex/presets-eslint-node": "1.2.0",
|
|
37
|
+
"@stdex/presets-prettier": "1.2.0"
|
|
37
38
|
},
|
|
38
39
|
"prettier": "@stdex/presets-prettier/prettierrc",
|
|
39
40
|
"scripts": {
|
package/src/index.js
CHANGED
|
@@ -106,6 +106,7 @@ fs.cpSync(templatePath, projectPath, {
|
|
|
106
106
|
const filesToRename = [
|
|
107
107
|
{ from: '_gitignore', to: '.gitignore' },
|
|
108
108
|
{ from: '_pnpm-workspace.yaml', to: 'pnpm-workspace.yaml' },
|
|
109
|
+
{ from: '_env', to: '.env' },
|
|
109
110
|
]
|
|
110
111
|
for (const item of filesToRename) {
|
|
111
112
|
const fromPath = path.join(projectPath, item.from)
|
package/templates/base/index.js
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"start": "node index.js"
|
|
9
9
|
},
|
|
10
10
|
"devDependencies": {
|
|
11
|
-
"@stdex/presets-eslint-base": "
|
|
12
|
-
"@stdex/presets-prettier": "
|
|
11
|
+
"@stdex/presets-eslint-base": "workspace:*",
|
|
12
|
+
"@stdex/presets-prettier": "workspace:*",
|
|
13
13
|
"eslint": "latest"
|
|
14
14
|
},
|
|
15
15
|
"prettier": "@stdex/presets-prettier/prettierrc"
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"build": "gulp build"
|
|
8
8
|
},
|
|
9
9
|
"devDependencies": {
|
|
10
|
-
"@stdex/presets-eslint-typescript": "
|
|
11
|
-
"@stdex/presets-prettier": "
|
|
12
|
-
"@stdex/presets-typescript": "
|
|
10
|
+
"@stdex/presets-eslint-typescript": "workspace:*",
|
|
11
|
+
"@stdex/presets-prettier": "workspace:*",
|
|
12
|
+
"@stdex/presets-typescript": "workspace:*",
|
|
13
13
|
"@swc/core": "latest",
|
|
14
14
|
"gulp": "latest",
|
|
15
15
|
"gulp-rename": "latest",
|
|
@@ -16,10 +16,13 @@
|
|
|
16
16
|
"db-deploy": "prisma generate && prisma migrate deploy"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@stdex/
|
|
19
|
+
"@stdex/logging": "workspace:*",
|
|
20
|
+
"@stdex/utils": "workspace:*",
|
|
21
|
+
"@stdex/utils-node": "workspace:*",
|
|
20
22
|
"@prisma/adapter-pg": "latest",
|
|
21
23
|
"@prisma/client": "latest",
|
|
22
24
|
"dayjs": "latest",
|
|
25
|
+
"debug": "latest",
|
|
23
26
|
"dotenv": "latest",
|
|
24
27
|
"lodash": "latest",
|
|
25
28
|
"pg": "latest",
|
|
@@ -27,16 +30,17 @@
|
|
|
27
30
|
"starlight-server": "latest"
|
|
28
31
|
},
|
|
29
32
|
"devDependencies": {
|
|
30
|
-
"@stdex/presets-eslint-node": "
|
|
31
|
-
"@stdex/presets-prettier": "
|
|
32
|
-
"@stdex/presets-typescript": "
|
|
33
|
+
"@stdex/presets-eslint-node": "workspace:*",
|
|
34
|
+
"@stdex/presets-prettier": "workspace:*",
|
|
35
|
+
"@stdex/presets-typescript": "workspace:*",
|
|
36
|
+
"@types/debug": "latest",
|
|
33
37
|
"@types/lodash": "latest",
|
|
34
38
|
"@types/node": "latest",
|
|
35
39
|
"@types/pg": "latest",
|
|
36
40
|
"concurrently": "latest",
|
|
37
41
|
"eslint": "latest",
|
|
38
42
|
"nodemon": "latest",
|
|
39
|
-
"prisma": "
|
|
43
|
+
"prisma": "^7.10.1",
|
|
40
44
|
"tsc-alias": "latest",
|
|
41
45
|
"typescript": "^6.0.3"
|
|
42
46
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 维护基于 redis 的数据缓存
|
|
3
3
|
*/
|
|
4
|
-
import { type CacheOptions, Cache, initRedisLogging } from '@stdex/utils
|
|
4
|
+
import { type CacheOptions, Cache, initRedisLogging } from '@stdex/utils-node/redis-cache.js'
|
|
5
5
|
import { createClient, type RedisClientType } from 'redis'
|
|
6
6
|
import config from '@/config.js'
|
|
7
7
|
import { rootLogger } from '@/logger.js'
|
|
@@ -12,7 +12,7 @@ export const redis: RedisClientType = createClient({
|
|
|
12
12
|
})
|
|
13
13
|
|
|
14
14
|
export async function initRedis() {
|
|
15
|
-
initRedisLogging(redis)
|
|
15
|
+
initRedisLogging(redis, rootLogger.getChild('redis'))
|
|
16
16
|
await redis.connect()
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { EnvReader } from '@stdex/utils-node/env-reader.js'
|
|
3
|
+
import { getDirectoryPath } from '@stdex/utils-node/fs.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 环境信息
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
type AnyController,
|
|
4
4
|
Controller,
|
|
5
5
|
initializeControllers,
|
|
6
|
-
} from '@stdex/utils/
|
|
6
|
+
} from '@stdex/utils/controllers.js'
|
|
7
7
|
import { getTransactionContextedPrismaClient, type AppPrismaClient } from '@/database.js'
|
|
8
8
|
import { type Logger, rootLogger } from '@/logger.js'
|
|
9
9
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PrismaPg } from '@prisma/adapter-pg'
|
|
1
2
|
import {
|
|
2
3
|
getPrismaLoggingOptions,
|
|
3
4
|
adaptPrismaLogging,
|
|
@@ -8,8 +9,7 @@ import {
|
|
|
8
9
|
adaptPrismaDebugLogging,
|
|
9
10
|
getTransactionContextedPrismaClient as rawGetTransactionContextedPrismaClient,
|
|
10
11
|
type GetPrismaClientInTransaction,
|
|
11
|
-
} from '@stdex/utils
|
|
12
|
-
import { PrismaPg } from '@prisma/adapter-pg'
|
|
12
|
+
} from '@stdex/utils-node/prisma/index.js'
|
|
13
13
|
import config from '@/config.js'
|
|
14
14
|
import { rootLogger } from '@/logger.js'
|
|
15
15
|
import { PrismaClient } from '@/prisma/client.js'
|
|
@@ -27,7 +27,7 @@ const logger = rootLogger.getChild('prisma')
|
|
|
27
27
|
* 初始化基础 PrismaClient 实例
|
|
28
28
|
*/
|
|
29
29
|
if (config.DEBUG && config.DB_DEBUG) {
|
|
30
|
-
adaptPrismaDebugLogging(logger)
|
|
30
|
+
adaptPrismaDebugLogging((name: string) => logger.getChild(name))
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
const adapter = new PrismaPg({ connectionString: config.DB_URL })
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { logger as rootLogger } from '@stdex/
|
|
2
|
-
import {
|
|
1
|
+
import { type Logger, logger as rootLogger, adaptDebugLib } from '@stdex/logging'
|
|
2
|
+
import { FileHandler } from '@stdex/logging/handlers'
|
|
3
|
+
import debug from 'debug'
|
|
3
4
|
import config from '@/config.js'
|
|
4
5
|
|
|
5
|
-
export { Logger, rootLogger }
|
|
6
|
+
export { type Logger, rootLogger }
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
file: { dir: config.LOGS_DIR },
|
|
11
|
-
})
|
|
8
|
+
rootLogger.setLevel(config.DEBUG ? 'debug' : 'info')
|
|
9
|
+
rootLogger.addHandler(new FileHandler({ dir: config.LOGS_DIR }))
|
|
10
|
+
adaptDebugLib(debug, '*', rootLogger)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type Logger } from '@stdex/logging'
|
|
2
|
+
import { TaskManager } from '@stdex/utils/task-manager.js'
|
|
2
3
|
import {
|
|
3
4
|
type Controllers,
|
|
4
5
|
controllerClasses,
|
|
@@ -10,10 +11,10 @@ interface Context {
|
|
|
10
11
|
db: AppPrismaClient
|
|
11
12
|
controllers: Controllers
|
|
12
13
|
}
|
|
13
|
-
class AppTaskManager extends TaskManager<Context> {
|
|
14
|
+
class AppTaskManager extends TaskManager<Context, Logger> {
|
|
14
15
|
getContext(name: string) {
|
|
15
16
|
const db = getTransactionContextedPrismaClient()
|
|
16
|
-
const controllersLogger = this.
|
|
17
|
+
const controllersLogger = this.logger?.getChild(name).getChild('controllers')
|
|
17
18
|
const controllers = initializeAppControllers(controllerClasses, db, controllersLogger)
|
|
18
19
|
return {
|
|
19
20
|
db,
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { tasks } from './common.js'
|
|
2
2
|
|
|
3
|
-
tasks.run(
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
void tasks.run({
|
|
4
|
+
name: 'check-schools',
|
|
5
|
+
interval: 1000 * 60,
|
|
6
|
+
async executor({ db }, logger) {
|
|
7
|
+
const count = await db.school.count({})
|
|
8
|
+
logger?.info(`学校数量:${count}`)
|
|
9
|
+
},
|
|
6
10
|
})
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
},
|
|
11
11
|
"prettier": "@stdex/presets-prettier/prettierrc",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@stdex/
|
|
13
|
+
"@stdex/logging": "workspace:*",
|
|
14
|
+
"@stdex/utils": "workspace:*",
|
|
15
|
+
"@stdex/utils-frontend": "workspace:*",
|
|
14
16
|
"@ant-design/cssinjs": "latest",
|
|
15
17
|
"@ant-design/icons": "latest",
|
|
16
18
|
"@emotion/react": "latest",
|
|
@@ -22,9 +24,9 @@
|
|
|
22
24
|
"react-router": "latest"
|
|
23
25
|
},
|
|
24
26
|
"devDependencies": {
|
|
25
|
-
"@stdex/presets-eslint-react": "
|
|
26
|
-
"@stdex/presets-prettier": "
|
|
27
|
-
"@stdex/presets-typescript": "
|
|
27
|
+
"@stdex/presets-eslint-react": "workspace:*",
|
|
28
|
+
"@stdex/presets-prettier": "workspace:*",
|
|
29
|
+
"@stdex/presets-typescript": "workspace:*",
|
|
28
30
|
"@swc/plugin-emotion": "latest",
|
|
29
31
|
"@types/lodash": "latest",
|
|
30
32
|
"@types/node": "latest",
|
|
@@ -32,6 +34,7 @@
|
|
|
32
34
|
"@types/react-dom": "latest",
|
|
33
35
|
"@vitejs/plugin-react-swc": "latest",
|
|
34
36
|
"eslint": "latest",
|
|
37
|
+
"typescript": "^6.0.3",
|
|
35
38
|
"vite": "latest",
|
|
36
39
|
"vite-plugin-svgr": "latest"
|
|
37
40
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { EmotionCacheProvider } from '@stdex/utils/env-react/emotion'
|
|
2
|
-
import { initDayJs } from '@stdex/utils/init-dayjs'
|
|
3
1
|
import { StyleProvider } from '@ant-design/cssinjs'
|
|
2
|
+
import { EmotionCacheProvider } from '@stdex/utils-frontend/react/emotion.js'
|
|
4
3
|
import { ConfigProvider, App as AntdApp } from 'antd'
|
|
5
4
|
import zhCn from 'antd/locale/zh_CN'
|
|
6
5
|
import { createRoot } from 'react-dom/client'
|
|
7
6
|
import { RouterProvider } from 'react-router/dom'
|
|
7
|
+
import { initDayJs } from '@/lib/init-dayjs.js'
|
|
8
8
|
import { router } from './router'
|
|
9
9
|
|
|
10
10
|
import './style.css'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import '@stdex/utils/
|
|
2
|
-
import '@stdex/utils/
|
|
1
|
+
import '@stdex/utils-frontend/react/register-globals.js'
|
|
2
|
+
import '@stdex/utils-frontend/react/emotion-register-globals.js'
|
|
3
3
|
import { renderApp } from '@/app/index'
|
|
4
4
|
|
|
5
5
|
renderApp()
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { logger, LogLevel } from '@stdex/utils/logging/index.js'
|
|
1
|
+
import { logger, getLogger, LogLevel } from '@stdex/logging'
|
|
3
2
|
import { config } from '@/lib/config.js'
|
|
4
3
|
|
|
5
4
|
logger.setLevel(config.inDev ? LogLevel.Debug : LogLevel.Info)
|
|
6
|
-
logger
|
|
7
|
-
export { logger }
|
|
8
|
-
|
|
9
|
-
export function getLogger(name: string) {
|
|
10
|
-
return logger.getChild(name)
|
|
11
|
-
}
|
|
5
|
+
export { logger, getLogger }
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"pages": ["pages/index/index"],
|
|
3
|
-
"window": {},
|
|
4
|
-
"style": "v2",
|
|
5
|
-
"renderer": "skyline",
|
|
6
|
-
"rendererOptions": {
|
|
7
|
-
"skyline": {
|
|
8
|
-
"disableABTest": true,
|
|
9
|
-
"sdkVersionBegin": "3.0.0",
|
|
10
|
-
"sdkVersionEnd": "15.255.255"
|
|
11
|
-
}
|
|
12
|
-
},
|
|
13
|
-
"componentFramework": "glass-easel",
|
|
14
|
-
"sitemapLocation": "sitemap.json",
|
|
15
|
-
"lazyCodeLoading": "requiredComponents"
|
|
16
|
-
}
|
|
File without changes
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: all[name]
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
getAppData: function() {
|
|
13
|
-
return getAppData;
|
|
14
|
-
},
|
|
15
|
-
loadAppData: function() {
|
|
16
|
-
return loadAppData;
|
|
17
|
-
},
|
|
18
|
-
setAppData: function() {
|
|
19
|
-
return setAppData;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
const initialAppData = {
|
|
23
|
-
count: 0
|
|
24
|
-
};
|
|
25
|
-
// -------------------------------
|
|
26
|
-
const dataKey = 'app-data-v1';
|
|
27
|
-
function loadAppData() {
|
|
28
|
-
return wx.getStorageSync(dataKey) || initialAppData;
|
|
29
|
-
}
|
|
30
|
-
function getAppData() {
|
|
31
|
-
return getApp().globalData;
|
|
32
|
-
}
|
|
33
|
-
function setAppData(dataOrCallback) {
|
|
34
|
-
let data;
|
|
35
|
-
if (typeof dataOrCallback === 'function') {
|
|
36
|
-
const origData = getAppData();
|
|
37
|
-
const result = dataOrCallback(origData);
|
|
38
|
-
if (typeof result === 'object') data = result;
|
|
39
|
-
else data = origData;
|
|
40
|
-
} else {
|
|
41
|
-
data = dataOrCallback;
|
|
42
|
-
}
|
|
43
|
-
getApp().globalData = data;
|
|
44
|
-
wx.setStorage({
|
|
45
|
-
key: dataKey,
|
|
46
|
-
data,
|
|
47
|
-
fail (e) {
|
|
48
|
-
console.log('保存 appData 失败', e);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
const _appdata = require("../../lib/app-data");
|
|
6
|
-
Page({
|
|
7
|
-
data: {
|
|
8
|
-
count: (0, _appdata.getAppData)().count
|
|
9
|
-
},
|
|
10
|
-
click () {
|
|
11
|
-
const count = this.data.count + 1;
|
|
12
|
-
this.setData({
|
|
13
|
-
count
|
|
14
|
-
});
|
|
15
|
-
(0, _appdata.setAppData)((current)=>({
|
|
16
|
-
...current,
|
|
17
|
-
count
|
|
18
|
-
}));
|
|
19
|
-
}
|
|
20
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<view class="count" bind:tap="click">当前计数:{{count}}</view>
|
|
File without changes
|