@ruan-cat/utils 4.18.0 → 4.20.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.
@@ -1,5 +1,6 @@
1
1
  import * as child_process from 'child_process';
2
2
  import { SpawnOptions } from 'node:child_process';
3
+ import { PnpmWorkspaceYamlSchema } from 'pnpm-workspace-yaml';
3
4
 
4
5
  /**
5
6
  * 路径转换工具
@@ -134,40 +135,14 @@ declare function executePromiseTasks(config: TasksConfig,
134
135
  */
135
136
  lastParams?: any): Promise<any>;
136
137
 
137
- /**
138
- * 判断目标项目是否是 monorepo 格式的项目
139
- * @description
140
- * 判别逻辑:
141
- * 1. 目标项目同时存在 `pnpm-workspace.yaml` 文件
142
- * 2. `pnpm-workspace.yaml` 提供了有效的 packages 匹配配置
143
- * 3. 至少能匹配到一个 package.json 文件
144
- *
145
- * @returns {boolean} 是否是 monorepo 项目
146
- * @throws {Error} 当 pnpm-workspace.yaml 格式错误时抛出错误
147
- */
148
- declare function isMonorepoProject(): boolean;
149
-
150
138
  /**
151
139
  * pnpm-workspace.yaml 文件的类型声明
152
140
  * @description
153
- * 设计理由
154
- *
155
- * 主要是为了让该文件被解析后,能够有一个基础的类型声明
141
+ * 现在是 pnpm-workspace-yaml 提供的 `PnpmWorkspaceYamlSchema` 类型
156
142
  *
157
- * 按理说这个东西应该有别人封装好的类型的,肯定因为我没找到。
158
- *
159
- * 未来应该找到这样的类型声明库,直接复用别人的就好了,不要自己写了。
143
+ * @see https://github.com/antfu/pnpm-workspace-utils/blob/main/packages/pnpm-workspace-yaml/src/index.ts#L4
160
144
  */
161
- interface PnpmWorkspace {
162
- /**
163
- * 包的匹配语法字符串
164
- *
165
- * @example
166
- * ["packages/**", "demos/**", "utils"]
167
- */
168
- packages?: string[];
169
- catalog?: string[];
170
- }
145
+ type PnpmWorkspace = PnpmWorkspaceYamlSchema;
171
146
 
172
147
  /**
173
148
  * `Prettify` 帮助程序是一种实用程序类型,它采用对象类型并使悬停叠加更具可读性。
@@ -184,4 +159,17 @@ type Prettify<T> = {
184
159
  */
185
160
  type ToNumberLike<T extends number> = T | `${T}`;
186
161
 
162
+ /**
163
+ * 判断目标项目是否是 monorepo 格式的项目
164
+ * @description
165
+ * 判别逻辑:
166
+ * 1. 目标项目同时存在 `pnpm-workspace.yaml` 文件
167
+ * 2. `pnpm-workspace.yaml` 提供了有效的 packages 匹配配置
168
+ * 3. 至少能匹配到一个 package.json 文件
169
+ *
170
+ * @returns {boolean} 是否是 monorepo 项目
171
+ * @throws {Error} 当 pnpm-workspace.yaml 格式错误时抛出错误
172
+ */
173
+ declare function isMonorepoProject(): boolean;
174
+
187
175
  export { type BaseTask, type Condition, type Conditions, type ParallelTasks, type PnpmWorkspace, type Prettify, type PrintListParams, type PromiseTasksConfig, type QueueTasks, type SimpleAsyncTask, type SingleTasks, type SpawnSyncSimpleParams, type Task, type TaskType, type TasksConfig, type ToNumberLike, defPrintCurrentCommand, definePromiseTasks, executePromiseTasks, generateSimpleAsyncTask, generateSpawnSync, initFlag, isConditionsEvery, isConditionsSome, isMonorepoProject, pathChange, printFormat, printList, runPromiseByConcurrency, runPromiseByQueue, taskTypes };
@@ -43,4 +43,17 @@ interface WriteYaml2mdParams<T = Record<string, any>> {
43
43
  */
44
44
  declare function writeYaml2md<T>(params: WriteYaml2mdParams<T>): void;
45
45
 
46
- export { type PackageInfo, type WriteYaml2mdParams, clean, defaultCleanTargets, getRuanCatPkgInfo, writeYaml2md };
46
+ /**
47
+ * 判断目标项目是否是 monorepo 格式的项目
48
+ * @description
49
+ * 判别逻辑:
50
+ * 1. 目标项目同时存在 `pnpm-workspace.yaml` 文件
51
+ * 2. `pnpm-workspace.yaml` 提供了有效的 packages 匹配配置
52
+ * 3. 至少能匹配到一个 package.json 文件
53
+ *
54
+ * @returns {boolean} 是否是 monorepo 项目
55
+ * @throws {Error} 当 pnpm-workspace.yaml 格式错误时抛出错误
56
+ */
57
+ declare function isMonorepoProject(): boolean;
58
+
59
+ export { type PackageInfo, type WriteYaml2mdParams, clean, defaultCleanTargets, getRuanCatPkgInfo, isMonorepoProject, writeYaml2md };
@@ -84,7 +84,7 @@ function generateSpawnSync(spawnSyncSimpleParams) {
84
84
  import { isPlainObject, isArray } from "lodash-es";
85
85
  import consola2 from "consola";
86
86
 
87
- // src/monorepo.ts
87
+ // src/monorepo/index.ts
88
88
  import { join } from "path";
89
89
  import * as fs from "fs";
90
90
  import { globSync } from "tinyglobby";
@@ -2713,8 +2713,40 @@ var jsYaml = {
2713
2713
  safeDump
2714
2714
  };
2715
2715
 
2716
- // src/monorepo.ts
2716
+ // src/monorepo/index.ts
2717
2717
  import { isUndefined } from "lodash-es";
2718
+ function pathChange(path) {
2719
+ return path.replace(/\\/g, "/");
2720
+ }
2721
+ function isMonorepoProject() {
2722
+ const workspaceConfigPath = join(process.cwd(), "pnpm-workspace.yaml");
2723
+ if (!fs.existsSync(workspaceConfigPath)) {
2724
+ return false;
2725
+ }
2726
+ let workspaceConfig;
2727
+ try {
2728
+ const workspaceFile = fs.readFileSync(workspaceConfigPath, "utf8");
2729
+ workspaceConfig = load(workspaceFile);
2730
+ } catch (error) {
2731
+ throw new Error(
2732
+ `\u89E3\u6790 pnpm-workspace.yaml \u6587\u4EF6\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u683C\u5F0F\u662F\u5426\u6B63\u786E\u3002\u9519\u8BEF\u4FE1\u606F\uFF1A${error instanceof Error ? error.message : String(error)}`
2733
+ );
2734
+ }
2735
+ const pkgPatterns = workspaceConfig.packages;
2736
+ if (isUndefined(pkgPatterns) || pkgPatterns.length === 0) {
2737
+ return false;
2738
+ }
2739
+ for (const pkgPattern of pkgPatterns) {
2740
+ const matchedPath = pathChange(join(process.cwd(), pkgPattern, "package.json"));
2741
+ const matchedPaths = globSync(matchedPath, {
2742
+ ignore: ["**/node_modules/**"]
2743
+ });
2744
+ if (matchedPaths.length > 0) {
2745
+ return true;
2746
+ }
2747
+ }
2748
+ return false;
2749
+ }
2718
2750
 
2719
2751
  // src/node-esm/scripts/clean.ts
2720
2752
  var defaultCleanTargets = [
@@ -2773,6 +2805,7 @@ export {
2773
2805
  clean,
2774
2806
  defaultCleanTargets,
2775
2807
  getRuanCatPkgInfo,
2808
+ isMonorepoProject,
2776
2809
  writeYaml2md
2777
2810
  };
2778
2811
  /*! Bundled license information: