@icebreakers/monorepo 3.1.12 → 3.1.13

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.
@@ -1,6 +1,44 @@
1
+ # Dependencies
1
2
  node_modules
3
+ **/node_modules/
4
+
5
+ # Build outputs
6
+ dist
7
+ **/dist/
8
+
9
+ # Version control
2
10
  .git
3
11
  .gitignore
12
+ .github
13
+
14
+ # Documentation
4
15
  *.md
5
- dist
6
- **/node_modules/
16
+ README*
17
+
18
+ # Testing
19
+ coverage
20
+ **/coverage/
21
+ **/*.test.ts
22
+ **/*.test.js
23
+ **/*.spec.ts
24
+ **/*.spec.js
25
+
26
+ # Build caches
27
+ .turbo
28
+ **/.turbo/
29
+ .vitepress/cache
30
+ **/.vitepress/cache
31
+
32
+ # Development
33
+ .vscode
34
+ .idea
35
+ *.log
36
+ .DS_Store
37
+
38
+ # CI/CD
39
+ .github/workflows
40
+
41
+ # Environment
42
+ .env
43
+ .env.*
44
+ !.env.example
@@ -20,10 +20,10 @@ jobs:
20
20
  os: [ubuntu-latest, windows-latest, macos-latest]
21
21
  node-version: [20, 22, 24]
22
22
  runs-on: ${{ matrix.os }}
23
- # To use Remote Caching, uncomment the next lines and follow the steps below.
24
- # env:
25
- # TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
26
- # TURBO_TEAM: ${{ vars.TURBO_TEAM }}
23
+ # Remote Caching enabled - configure TURBO_TOKEN and TURBO_TEAM in repository settings
24
+ env:
25
+ TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
26
+ TURBO_TEAM: ${{ vars.TURBO_TEAM }}
27
27
 
28
28
  steps:
29
29
  - name: Check out code
@@ -38,9 +38,17 @@ jobs:
38
38
  with:
39
39
  node-version: ${{ matrix.node-version }}
40
40
  cache: pnpm
41
+ cache-dependency-path: pnpm-lock.yaml
41
42
 
42
43
  - name: Install dependencies
43
- run: pnpm install
44
+ run: pnpm install --frozen-lockfile
45
+
46
+ - name: Security Audit
47
+ run: pnpm audit --audit-level=moderate
48
+ continue-on-error: true
49
+
50
+ - name: Lint
51
+ run: pnpm lint
44
52
 
45
53
  - name: Build
46
54
  run: pnpm build
@@ -3,7 +3,7 @@
3
3
  "type": "module",
4
4
  "version": "0.0.0",
5
5
  "private": true,
6
- "packageManager": "pnpm@10.26.1",
6
+ "packageManager": "pnpm@10.26.2",
7
7
  "author": "ice breaker <1324318532@qq.com>",
8
8
  "repository": {
9
9
  "type": "git",
@@ -21,6 +21,11 @@
21
21
  "test": "vitest run",
22
22
  "test:dev": "vitest",
23
23
  "lint": "turbo run lint",
24
+ "audit": "pnpm audit --audit-level=moderate",
25
+ "audit:fix": "pnpm audit --fix",
26
+ "typecheck": "turbo run typecheck",
27
+ "format": "eslint . --fix",
28
+ "validate": "pnpm run typecheck && pnpm run lint && pnpm run test",
24
29
  "release": "changeset",
25
30
  "publish-packages": "turbo run build lint test && changeset version && changeset publish",
26
31
  "------": "--------------",
@@ -44,7 +49,7 @@
44
49
  "@changesets/cli": "^2.29.8",
45
50
  "@commitlint/cli": "^20.2.0",
46
51
  "@icebreakers/commitlint-config": "^1.2.3",
47
- "@icebreakers/eslint-config": "^1.6.8",
52
+ "@icebreakers/eslint-config": "^1.6.9",
48
53
  "@icebreakers/monorepo": "workspace:*",
49
54
  "@icebreakers/stylelint-config": "^1.2.4",
50
55
  "@types/fs-extra": "^11.0.4",
@@ -65,11 +70,11 @@
65
70
  "pkg-types": "^2.3.0",
66
71
  "rimraf": "^6.1.2",
67
72
  "stylelint": "^16.26.1",
68
- "tsdown": "0.18.2",
73
+ "tsdown": "0.18.3",
69
74
  "tslib": "^2.8.1",
70
75
  "tsup": "^8.5.1",
71
76
  "tsx": "^4.21.0",
72
- "turbo": "^2.7.1",
77
+ "turbo": "^2.7.2",
73
78
  "type-fest": "^5.3.1",
74
79
  "typescript": "^5.9.3",
75
80
  "unbuild": "^3.6.1",
@@ -1,18 +1,51 @@
1
1
  {
2
2
  "compilerOptions": {
3
+ // 指定 ECMAScript 目标版本,ESNext 表示支持最新的 ES 特性
3
4
  "target": "ESNext",
5
+
6
+ // 指定模块系统,ESNext 使用原生 ES 模块 (import/export)
4
7
  "module": "ESNext",
8
+
9
+ // 模块解析策略,Bundler 模式适用于打包工具(如 Vite、Webpack),支持更宽松的解析规则
5
10
  "moduleResolution": "Bundler",
11
+
12
+ // 允许导入 .json 文件,并自动生成类型声明
6
13
  "resolveJsonModule": true,
14
+
15
+ // 指定要包含的类型声明文件,node 提供 Node.js API 类型,vitest/globals 提供测试全局变量类型
7
16
  "types": [
8
17
  "node",
9
18
  "vitest/globals"
10
19
  ],
20
+
21
+ // 允许编译 JavaScript 文件,使其可以被导入和进行类型检查
11
22
  "allowJs": true,
23
+
24
+ // 启用所有严格类型检查选项,包括 noImplicitAny、strictNullChecks 等
12
25
  "strict": true,
26
+
27
+ // 严格检查可选属性类型,区分 undefined 和缺失的属性
28
+ "exactOptionalPropertyTypes": true,
29
+
30
+ // 要求子类重写父类方法时必须使用 override 关键字
31
+ "noImplicitOverride": true,
32
+
33
+ // 禁止通过索引签名(如 obj['key'])访问未在索引签名中定义的属性
34
+ "noPropertyAccessFromIndexSignature": true,
35
+
36
+ // 访问索引签名时返回 undefined | T,而不是 T(防止未定义访问错误)
37
+ "noUncheckedIndexedAccess": true,
38
+
39
+ // 不生成输出文件(仅用于类型检查,实际由打包工具处理编译)
13
40
  "noEmit": true,
41
+
42
+ // 允许从没有默认导出的模块中默认导入(如 import React from 'react')
14
43
  "allowSyntheticDefaultImports": true,
44
+
45
+ // 启用 ES 模块互操作性,为 CommonJS 模块提供 synthetic default imports
15
46
  "esModuleInterop": true,
47
+
48
+ // 跳过库文件的类型检查,提高编译速度(库文件通常已经有类型声明)
16
49
  "skipLibCheck": true
17
50
  }
18
51
  }
package/assets/turbo.json CHANGED
@@ -5,28 +5,68 @@
5
5
  "dependsOn": [
6
6
  "^build"
7
7
  ],
8
+ "inputs": [
9
+ "src/**",
10
+ "lib/**",
11
+ "package.json",
12
+ "tsconfig*.json",
13
+ "*.config.{js,ts,mjs,mts}"
14
+ ],
8
15
  "outputs": [
9
- "dist/**"
16
+ "dist/**",
17
+ "bin/**"
10
18
  ]
11
19
  },
12
20
  "lint": {
13
21
  "dependsOn": [
14
22
  "^lint"
15
23
  ],
24
+ "inputs": [
25
+ "src/**",
26
+ "lib/**",
27
+ "test/**",
28
+ "*.config.{js,ts}",
29
+ ".eslintrc*",
30
+ ".stylelintrc*"
31
+ ],
16
32
  "outputs": []
17
33
  },
18
34
  "dev": {
19
- "cache": false
35
+ "cache": false,
36
+ "persistent": true
20
37
  },
21
38
  "test": {
22
39
  "dependsOn": [
23
40
  "^test"
24
41
  ],
42
+ "inputs": [
43
+ "src/**",
44
+ "lib/**",
45
+ "test/**",
46
+ "package.json",
47
+ "vitest.config.{js,ts}",
48
+ "tsconfig*.json"
49
+ ],
25
50
  "outputs": [
26
51
  "coverage/**"
27
52
  ]
28
53
  },
29
- "release": {},
54
+ "typecheck": {
55
+ "dependsOn": [
56
+ "^typecheck"
57
+ ],
58
+ "inputs": [
59
+ "src/**",
60
+ "lib/**",
61
+ "test/**",
62
+ "package.json",
63
+ "tsconfig*.json"
64
+ ],
65
+ "outputs": []
66
+ },
67
+ "release": {
68
+ "cache": false
69
+ },
30
70
  "sync": {
31
71
  "cache": false
32
72
  }
package/dist/cli.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_upgrade = require('./upgrade-DOEN4Wos.cjs');
1
+ const require_upgrade = require('./upgrade-DmloQL5e.cjs');
2
2
  let node_process = require("node:process");
3
3
  node_process = require_upgrade.__toESM(node_process);
4
4
  let _inquirer_input = require("@inquirer/input");
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { A as createTimestampFolderName, E as cleanProjects, F as logger, M as generateAgenticTemplate, N as generateAgenticTemplates, P as loadAgenticTasks, T as version, c as getCreateChoices, i as init, j as defaultAgenticBaseDir, k as resolveCommandConfig, n as syncNpmMirror, o as createNewProject, r as setVscodeBinaryMirror, s as defaultTemplate, t as upgradeMonorepo, w as name } from "./upgrade-B-J_xIMc.mjs";
1
+ import { A as createTimestampFolderName, E as cleanProjects, F as logger, M as generateAgenticTemplate, N as generateAgenticTemplates, P as loadAgenticTasks, T as version, c as getCreateChoices, i as init, j as defaultAgenticBaseDir, k as resolveCommandConfig, n as syncNpmMirror, o as createNewProject, r as setVscodeBinaryMirror, s as defaultTemplate, t as upgradeMonorepo, w as name } from "./upgrade-D_D08NHx.mjs";
2
2
  import process from "node:process";
3
3
  import input from "@inquirer/input";
4
4
  import select from "@inquirer/select";
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_upgrade = require('./upgrade-DOEN4Wos.cjs');
1
+ const require_upgrade = require('./upgrade-DmloQL5e.cjs');
2
2
 
3
3
  exports.GitClient = require_upgrade.GitClient;
4
4
  exports.assetsDir = require_upgrade.assetsDir;
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { A as createTimestampFolderName, C as templatesDir, D as defineMonorepoConfig, E as cleanProjects, F as logger, I as getWorkspaceData, L as getWorkspacePackages, M as generateAgenticTemplate, N as generateAgenticTemplates, O as loadMonorepoConfig, P as loadAgenticTasks, R as GitClient, S as rootDir, T as version, _ as toWorkspaceGitignorePath, a as createContext, b as assetsDir, c as getCreateChoices, d as escapeStringRegexp, f as isMatch, g as toPublishGitignorePath, h as isGitignoreFile, i as init, j as defaultAgenticBaseDir, k as resolveCommandConfig, l as getTemplateMap, m as isFileChanged, n as syncNpmMirror, o as createNewProject, p as getFileHash, r as setVscodeBinaryMirror, t as upgradeMonorepo, u as templateMap, v as updateIssueTemplateConfig, w as name, x as packageDir, y as isIgnorableFsError } from "./upgrade-B-J_xIMc.mjs";
1
+ import { A as createTimestampFolderName, C as templatesDir, D as defineMonorepoConfig, E as cleanProjects, F as logger, I as getWorkspaceData, L as getWorkspacePackages, M as generateAgenticTemplate, N as generateAgenticTemplates, O as loadMonorepoConfig, P as loadAgenticTasks, R as GitClient, S as rootDir, T as version, _ as toWorkspaceGitignorePath, a as createContext, b as assetsDir, c as getCreateChoices, d as escapeStringRegexp, f as isMatch, g as toPublishGitignorePath, h as isGitignoreFile, i as init, j as defaultAgenticBaseDir, k as resolveCommandConfig, l as getTemplateMap, m as isFileChanged, n as syncNpmMirror, o as createNewProject, p as getFileHash, r as setVscodeBinaryMirror, t as upgradeMonorepo, u as templateMap, v as updateIssueTemplateConfig, w as name, x as packageDir, y as isIgnorableFsError } from "./upgrade-D_D08NHx.mjs";
2
2
 
3
3
  export { GitClient, assetsDir, cleanProjects, createContext, createNewProject, createTimestampFolderName, defaultAgenticBaseDir, defineMonorepoConfig, escapeStringRegexp, generateAgenticTemplate, generateAgenticTemplates, getCreateChoices, getFileHash, getTemplateMap, getWorkspaceData, getWorkspacePackages, init, isFileChanged, isGitignoreFile, isIgnorableFsError, isMatch, loadAgenticTasks, loadMonorepoConfig, logger, name, packageDir, resolveCommandConfig, rootDir, setVscodeBinaryMirror, syncNpmMirror, templateMap, templatesDir, toPublishGitignorePath, toWorkspaceGitignorePath, updateIssueTemplateConfig, upgradeMonorepo, version };
@@ -585,16 +585,24 @@ async function cleanProjects(cwd, overrides) {
585
585
  else cleanDirs = await checkbox({
586
586
  message: "请选择需要清理的目录",
587
587
  choices: filteredPackages.map((x) => {
588
- return {
588
+ const baseChoice = {
589
589
  name: path.relative(workspaceDir, x.rootDir),
590
590
  value: x.rootDir,
591
- checked: true,
592
- description: x.manifest.name
591
+ checked: true
593
592
  };
593
+ return x.manifest.name ? {
594
+ ...baseChoice,
595
+ description: x.manifest.name
596
+ } : baseChoice;
594
597
  })
595
598
  });
596
599
  const readmeZh = path.resolve(workspaceDir, "README.zh-CN.md");
597
- const candidates = Array.from(new Set([...cleanDirs.filter(Boolean), readmeZh]));
600
+ const qoderDir = path.resolve(workspaceDir, ".qoder");
601
+ const candidates = Array.from(new Set([
602
+ ...cleanDirs.filter(Boolean),
603
+ readmeZh,
604
+ qoderDir
605
+ ]));
598
606
  await Promise.all(candidates.map(async (dir) => {
599
607
  if (await fs.pathExists(dir)) await fs.remove(dir);
600
608
  }));
@@ -607,7 +615,7 @@ async function cleanProjects(cwd, overrides) {
607
615
  //#endregion
608
616
  //#region package.json
609
617
  var name = "@icebreakers/monorepo";
610
- var version = "3.1.12";
618
+ var version = "3.1.13";
611
619
 
612
620
  //#endregion
613
621
  //#region src/constants.ts
@@ -597,16 +597,24 @@ async function cleanProjects(cwd, overrides) {
597
597
  else cleanDirs = await (0, _inquirer_checkbox.default)({
598
598
  message: "请选择需要清理的目录",
599
599
  choices: filteredPackages.map((x) => {
600
- return {
600
+ const baseChoice = {
601
601
  name: pathe.default.relative(workspaceDir, x.rootDir),
602
602
  value: x.rootDir,
603
- checked: true,
604
- description: x.manifest.name
603
+ checked: true
605
604
  };
605
+ return x.manifest.name ? {
606
+ ...baseChoice,
607
+ description: x.manifest.name
608
+ } : baseChoice;
606
609
  })
607
610
  });
608
611
  const readmeZh = pathe.default.resolve(workspaceDir, "README.zh-CN.md");
609
- const candidates = Array.from(new Set([...cleanDirs.filter(Boolean), readmeZh]));
612
+ const qoderDir = pathe.default.resolve(workspaceDir, ".qoder");
613
+ const candidates = Array.from(new Set([
614
+ ...cleanDirs.filter(Boolean),
615
+ readmeZh,
616
+ qoderDir
617
+ ]));
610
618
  await Promise.all(candidates.map(async (dir) => {
611
619
  if (await fs_extra.default.pathExists(dir)) await fs_extra.default.remove(dir);
612
620
  }));
@@ -619,7 +627,7 @@ async function cleanProjects(cwd, overrides) {
619
627
  //#endregion
620
628
  //#region package.json
621
629
  var name = "@icebreakers/monorepo";
622
- var version = "3.1.12";
630
+ var version = "3.1.13";
623
631
 
624
632
  //#endregion
625
633
  //#region src/constants.ts
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@icebreakers/monorepo",
3
3
  "type": "module",
4
- "version": "3.1.12",
4
+ "version": "3.1.13",
5
5
  "description": "The icebreaker's monorepo manager",
6
6
  "author": "ice breaker <1324318532@qq.com>",
7
7
  "license": "MIT",
@@ -64,8 +64,8 @@
64
64
  "@pnpm/find-workspace-dir": "^1000.1.3",
65
65
  "@pnpm/logger": "^1001.0.1",
66
66
  "@pnpm/types": "^1001.2.0",
67
- "@pnpm/worker": "^1000.5.0",
68
- "@pnpm/workspace.find-packages": "^1000.0.51",
67
+ "@pnpm/worker": "^1000.6.0",
68
+ "@pnpm/workspace.find-packages": "^1000.0.52",
69
69
  "@pnpm/workspace.read-manifest": "^1000.2.9",
70
70
  "c12": "^3.3.3",
71
71
  "commander": "^14.0.2",
@@ -24,6 +24,9 @@
24
24
  "lint": "eslint .",
25
25
  "lint:fix": "eslint . --fix"
26
26
  },
27
+ "dependencies": {
28
+ "consola": "^3.4.2"
29
+ },
27
30
  "publishConfig": {
28
31
  "bin": {
29
32
  "ice": "./bin/index.js"
@@ -1,8 +1,9 @@
1
1
  import process from 'node:process'
2
2
  import { pathToFileURL } from 'node:url'
3
+ import { consola } from 'consola'
3
4
 
4
5
  export function runCli(argv: string[] = process.argv) {
5
- console.log('[@icebreakers/cli]: ', argv)
6
+ consola.info('[@icebreakers/cli]:', argv)
6
7
  }
7
8
 
8
9
  const executedFile = process.argv[1]
@@ -35,8 +35,9 @@
35
35
  "@tailwindcss/vite": "^4.1.18",
36
36
  "@trpc/server": "^11.8.1",
37
37
  "@vitejs/plugin-vue": "^6.0.3",
38
- "@vitejs/plugin-vue-jsx": "^5.1.2",
38
+ "@vitejs/plugin-vue-jsx": "^5.1.3",
39
39
  "@vue/tsconfig": "^0.8.1",
40
+ "consola": "^3.4.2",
40
41
  "hono": "^4.11.1",
41
42
  "tailwindcss": "^4.1.18",
42
43
  "typescript": "~5.9.3",
@@ -44,7 +45,7 @@
44
45
  "vite": "^7.3.0",
45
46
  "vite-plugin-vue-devtools": "^8.0.5",
46
47
  "vite-tsconfig-paths": "^6.0.3",
47
- "vue-tsc": "3.2.0",
48
+ "vue-tsc": "3.2.1",
48
49
  "wrangler": "^4.56.0",
49
50
  "zod": "^4.2.1"
50
51
  }
@@ -31,12 +31,26 @@ export default defineConfig({
31
31
  ensureVitePlugin(cloudflare()),
32
32
  ensureVitePlugin(VueDevTools()),
33
33
  ],
34
+ build: {
35
+ target: 'esnext',
36
+ minify: 'esbuild',
37
+ chunkSizeWarningLimit: 1000,
38
+ rollupOptions: {
39
+ output: {
40
+ manualChunks: {
41
+ 'vue-vendor': ['vue', 'vue-router', 'pinia'],
42
+ 'query-vendor': ['@tanstack/vue-query'],
43
+ 'trpc-vendor': ['@trpc/client'],
44
+ },
45
+ },
46
+ },
47
+ },
34
48
  server: {
35
49
  // proxy: {
36
50
  // '/api': {
37
51
  // target: `http://localhost:8787`,
38
52
  // changeOrigin: true,
39
- // // rewrite: path => path.replace(/^\/api/, ''),
53
+ // // rewrite: path => path.replace(/^/api/, ''),
40
54
  // },
41
55
  // },
42
56
  },
@@ -1,5 +1,5 @@
1
- /* eslint-disable no-console */
2
1
  import { serve } from '@hono/node-server'
2
+ import { consola } from 'consola'
3
3
  import { logger } from 'hono/logger'
4
4
  import { app } from './app'
5
5
  import { port } from './config'
@@ -10,4 +10,4 @@ serve({
10
10
  port,
11
11
  })
12
12
 
13
- console.log(`Server listening on http://localhost:${port}`)
13
+ consola.success(`Server listening on http://localhost:${port}`)
@@ -52,6 +52,7 @@
52
52
  },
53
53
  "devDependencies": {
54
54
  "@hono/node-server": "^1.19.7",
55
+ "consola": "^3.4.2",
55
56
  "hono": "^4.11.1",
56
57
  "wrangler": "^4.56.0",
57
58
  "zod": "^4.2.1"
@@ -1,5 +1,5 @@
1
- /* eslint-disable no-console */
2
1
  import { serve } from '@hono/node-server'
2
+ import { consola } from 'consola'
3
3
  import { logger } from 'hono/logger'
4
4
  import { app } from './app'
5
5
  import { port } from './config'
@@ -10,4 +10,4 @@ serve({
10
10
  port,
11
11
  })
12
12
 
13
- console.log(`Server listening on http://localhost:${port}`)
13
+ consola.success(`Server listening on http://localhost:${port}`)
@@ -56,6 +56,6 @@
56
56
  "vite-plugin-dts": "^4.5.4",
57
57
  "vue": "^3.5.26",
58
58
  "vue-router": "^4.6.4",
59
- "vue-tsc": "^3.2.0"
59
+ "vue-tsc": "^3.2.1"
60
60
  }
61
61
  }