@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.
Files changed (35) hide show
  1. package/package.json +9 -8
  2. package/src/index.js +1 -0
  3. package/templates/base/index.js +3 -1
  4. package/templates/base/package.json +2 -2
  5. package/templates/miniprogram/package.json +3 -3
  6. package/templates/service/package.json +9 -5
  7. package/templates/service/src/cache.ts +2 -2
  8. package/templates/service/src/config.ts +2 -2
  9. package/templates/service/src/controllers/common.ts +1 -1
  10. package/templates/service/src/database.ts +3 -3
  11. package/templates/service/src/logger.ts +7 -8
  12. package/templates/service/src/tasks/common.ts +4 -3
  13. package/templates/service/src/tasks/demo-school.ts +7 -3
  14. package/templates/site/package.json +7 -4
  15. package/templates/site/src/app/index.tsx +2 -2
  16. package/templates/site/src/index.tsx +2 -2
  17. package/templates/site/src/lib/init-dayjs.ts +8 -0
  18. package/templates/site/src/lib/logging.ts +2 -8
  19. package/templates/site/src/views/dashboard.tsx +1 -1
  20. package/templates/site/src/views/school-detail.tsx +1 -1
  21. package/templates/site/src/views/school-ranking.tsx +1 -1
  22. package/templates/site/src/views/schools.tsx +1 -1
  23. package/templates/site/src/views/setting.tsx +1 -1
  24. package/templates/site/src/views/student-score.tsx +1 -1
  25. package/templates/site/src/views/students.tsx +1 -1
  26. package/templates/miniprogram/dist/app.js +0 -9
  27. package/templates/miniprogram/dist/app.json +0 -16
  28. package/templates/miniprogram/dist/app.wxss +0 -0
  29. package/templates/miniprogram/dist/lib/app-data.js +0 -51
  30. package/templates/miniprogram/dist/pages/index/index.js +0 -20
  31. package/templates/miniprogram/dist/pages/index/index.json +0 -3
  32. package/templates/miniprogram/dist/pages/index/index.wxml +0 -1
  33. package/templates/miniprogram/dist/pages/index/index.wxss +0 -11
  34. package/templates/miniprogram/dist/sitemap.json +0 -9
  35. /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.1.0",
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-create/issues",
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-create"
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": "^1.0.2",
36
- "@stdex/presets-prettier": "^1.0.2"
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)
@@ -1 +1,3 @@
1
- console.log('hello world')
1
+ export function run() {
2
+ return 1
3
+ }
@@ -8,8 +8,8 @@
8
8
  "start": "node index.js"
9
9
  },
10
10
  "devDependencies": {
11
- "@stdex/presets-eslint-base": "latest",
12
- "@stdex/presets-prettier": "latest",
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": "latest",
11
- "@stdex/presets-prettier": "latest",
12
- "@stdex/presets-typescript": "latest",
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/utils": "latest",
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": "latest",
31
- "@stdex/presets-prettier": "latest",
32
- "@stdex/presets-typescript": "latest",
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": "latest",
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/env-service/redis-cache.js'
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 { getDirectoryPath } from '@stdex/utils/env-node/index.js'
3
- import { EnvReader } from '@stdex/utils/env-service/index.js'
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/env-service/index.js'
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/env-service/prisma/index.js'
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/utils/env-node/logging/index.js'
2
- import { Logger, initLogger } from 'starlight-server'
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
- initLogger(rootLogger, {
8
- level: config.DEBUG ? 'debug' : 'info',
9
- debugLib: '*',
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 { TaskManager } from '@stdex/utils/env-service/index.js'
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.baseLogger.getChild(name).getChild('controllers')
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('check-schools', 1000 * 60, async ({ db }, logger) => {
4
- const count = await db.school.count({})
5
- logger.info(`学校数量:${count}`)
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/utils": "latest",
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": "latest",
26
- "@stdex/presets-prettier": "latest",
27
- "@stdex/presets-typescript": "latest",
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/env-react/react-register-globals.js'
2
- import '@stdex/utils/env-react/emotion-register-globals.js'
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()
@@ -0,0 +1,8 @@
1
+ import dayjs from 'dayjs'
2
+ import objectSupport from 'dayjs/plugin/objectSupport.js'
3
+ import 'dayjs/locale/zh-cn.js'
4
+
5
+ export function initDayJs() {
6
+ dayjs.extend(objectSupport)
7
+ dayjs.locale('zh-cn')
8
+ }
@@ -1,11 +1,5 @@
1
- import { ConsoleHandler } from '@stdex/utils/env-browser/logging.js'
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.addHandler(new ConsoleHandler())
7
- export { logger }
8
-
9
- export function getLogger(name: string) {
10
- return logger.getChild(name)
11
- }
5
+ export { logger, getLogger }
@@ -1,4 +1,4 @@
1
- import { usePageTitle } from '@stdex/utils/env-react'
1
+ import { usePageTitle } from '@stdex/utils-frontend/react/hooks.js'
2
2
 
3
3
  export function Dashboard() {
4
4
  usePageTitle('信息概览')
@@ -1,4 +1,4 @@
1
- import { usePageTitle } from '@stdex/utils/env-react'
1
+ import { usePageTitle } from '@stdex/utils-frontend/react/hooks.js'
2
2
  import { useParams } from 'react-router'
3
3
  import { Breadcrumb } from '@/components/Breadcrumb'
4
4
 
@@ -1,4 +1,4 @@
1
- import { usePageTitle } from '@stdex/utils/env-react'
1
+ import { usePageTitle } from '@stdex/utils-frontend/react/hooks.js'
2
2
 
3
3
  export function SchoolRanking() {
4
4
  usePageTitle('学校排名')
@@ -1,5 +1,5 @@
1
+ import { usePageTitle } from '@stdex/utils-frontend/react/hooks.js'
1
2
  import { useNavigate } from 'react-router'
2
- import { usePageTitle } from '@stdex/utils/env-react'
3
3
 
4
4
  const schools = [
5
5
  { id: 1, name: '学校-1' },
@@ -1,4 +1,4 @@
1
- import { usePageTitle } from '@stdex/utils/env-react'
1
+ import { usePageTitle } from '@stdex/utils-frontend/react/hooks.js'
2
2
 
3
3
  export function Setting() {
4
4
  usePageTitle('系统设置')
@@ -1,4 +1,4 @@
1
- import { usePageTitle } from '@stdex/utils/env-react'
1
+ import { usePageTitle } from '@stdex/utils-frontend/react/hooks.js'
2
2
 
3
3
  export function StudentScore() {
4
4
  usePageTitle('成绩管理')
@@ -1,4 +1,4 @@
1
- import { usePageTitle } from '@stdex/utils/env-react'
1
+ import { usePageTitle } from '@stdex/utils-frontend/react/hooks.js'
2
2
 
3
3
  export function Students() {
4
4
  usePageTitle('学生列表')
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- const _appdata = require("./lib/app-data");
6
- App({
7
- globalData: (0, _appdata.loadAppData)(),
8
- onLaunch () {}
9
- });
@@ -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,3 +0,0 @@
1
- {
2
- "usingComponents": {}
3
- }
@@ -1 +0,0 @@
1
- <view class="count" bind:tap="click">当前计数:{{count}}</view>
@@ -1,11 +0,0 @@
1
- page {
2
- align-items: center;
3
- justify-content: center;
4
- }
5
-
6
- .count {
7
- background-color: #fcfcfc;
8
- border-radius: 12rpx;
9
- border: 1px solid #f0f0f0;
10
- padding: 100rpx 50rpx;
11
- }
@@ -1,9 +0,0 @@
1
- {
2
- "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
3
- "rules": [
4
- {
5
- "action": "allow",
6
- "page": "*"
7
- }
8
- ]
9
- }
File without changes