@longmo-utils/node 1.0.0 → 1.0.1

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/dist/index.cjs CHANGED
@@ -125,8 +125,13 @@ async function getFiles(dirPath, extensions) {
125
125
  * @public
126
126
  */
127
127
  async function readJson(filePath) {
128
- const content = await node_fs.promises.readFile(filePath, "utf-8");
129
- return JSON.parse(content);
128
+ try {
129
+ const data = await node_fs.promises.readFile(filePath, "utf8");
130
+ return JSON.parse(data);
131
+ } catch (error) {
132
+ console.error("Error reading JSON file:", error);
133
+ throw error;
134
+ }
130
135
  }
131
136
 
132
137
  //#endregion
@@ -176,15 +181,23 @@ async function remove(filePath) {
176
181
  * 将数据写入 JSON 文件
177
182
  * @param filePath - 文件路径
178
183
  * @param data - 要写入的数据
184
+ * @param spaces - 缩进空格数
179
185
  * @example
180
186
  * ```ts
181
187
  * await writeJson('./config.json', { name: 'test' })
182
188
  * ```
183
189
  * @public
184
190
  */
185
- async function writeJson(filePath, data) {
186
- const content = JSON.stringify(data, null, 2);
187
- await node_fs.promises.writeFile(filePath, content, "utf-8");
191
+ async function writeJson(filePath, data, spaces = 2) {
192
+ try {
193
+ const dir = (0, node_path.dirname)(filePath);
194
+ await node_fs.promises.mkdir(dir, { recursive: true });
195
+ const jsonData = JSON.stringify(data, null, spaces);
196
+ await node_fs.promises.writeFile(filePath, jsonData, "utf8");
197
+ } catch (error) {
198
+ console.error("Error writing JSON file:", error);
199
+ throw error;
200
+ }
188
201
  }
189
202
 
190
203
  //#endregion
@@ -485,6 +498,34 @@ function isWindows() {
485
498
  return process.platform === "win32";
486
499
  }
487
500
 
501
+ //#endregion
502
+ //#region src/path/index.ts
503
+ /**
504
+ * 将给定的文件路径转换为 POSIX 风格。
505
+ *
506
+ * @param pathname - 原始文件路径,可以是 Windows 风格或 POSIX 风格
507
+ * @returns 转换后的 POSIX 风格路径,所有反斜杠 `\` 替换为正斜杠 `/`
508
+ *
509
+ * @example
510
+ * ```ts
511
+ * // Windows 路径转换为 POSIX
512
+ * toPosixPath('C:\\Users\\name\\file.txt'); // 'C:/Users/name/file.txt'
513
+ *
514
+ * @example
515
+ * ```ts
516
+ * // 混合路径转换
517
+ * toPosixPath('folder\\subfolder/file.txt'); // 'folder/subfolder/file.txt'
518
+ *
519
+ * @example
520
+ * ```ts
521
+ * // 已是 POSIX 风格的路径保持不变
522
+ * toPosixPath('/home/user/docs/file.txt'); // '/home/user/docs/file.txt'
523
+ * ```
524
+ */
525
+ function toPosixPath(pathname) {
526
+ return pathname.split(`\\`).join(node_path.posix.sep);
527
+ }
528
+
488
529
  //#endregion
489
530
  exports.copy = copy;
490
531
  exports.ensureDir = ensureDir;
@@ -511,5 +552,6 @@ exports.isWindows = isWindows;
511
552
  exports.readFileOrDefault = readFileOrDefault;
512
553
  exports.readJson = readJson;
513
554
  exports.remove = remove;
555
+ exports.toPosixPath = toPosixPath;
514
556
  exports.writeJson = writeJson;
515
557
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["fs","fs","fs","fs","fs","fs","fs"],"sources":["../src/fs/ensureDir.ts","../src/fs/copy.ts","../src/fs/exists.ts","../src/fs/getDirname.ts","../src/fs/getFiles.ts","../src/fs/readJson.ts","../src/fs/readFileOrDefault.ts","../src/fs/remove.ts","../src/fs/writeJson.ts","../src/env/getEnv.ts","../src/env/getEnvBool.ts","../src/env/getEnvMode.ts","../src/env/getEnvNumber.ts","../src/env/hasEnv.ts","../src/env/isDevelopment.ts","../src/env/isProduction.ts","../src/process/exit.ts","../src/process/getCwd.ts","../src/process/getMemoryUsage.ts","../src/process/getNodeVersion.ts","../src/process/getPid.ts","../src/process/getPlatform.ts","../src/process/getUptime.ts","../src/process/isLinux.ts","../src/process/isMac.ts","../src/process/isWindows.ts"],"sourcesContent":["import { promises as fs } from 'fs'\n\n/**\n * 确保目录存在,如果不存在则创建\n * @param dirPath - 目录路径\n * @example\n * ```ts\n * await ensureDir('./dist')\n * ```\n * @public\n */\nexport async function ensureDir(dirPath: string): Promise<void> {\n try {\n await fs.access(dirPath)\n } catch {\n await fs.mkdir(dirPath, { recursive: true })\n }\n}\n","import { promises as fs } from 'fs'\nimport { join, dirname } from 'path'\nimport { ensureDir } from './ensureDir'\n\n/**\n * 递归复制文件或目录\n * @param src - 源路径\n * @param dest - 目标路径\n * @example\n * ```ts\n * await copy('./src', './dist')\n * ```\n * @public\n */\nexport async function copy(src: string, dest: string): Promise<void> {\n const stat = await fs.stat(src)\n\n if (stat.isDirectory()) {\n await ensureDir(dest)\n const files = await fs.readdir(src)\n await Promise.all(\n files.map(async (file) => {\n const srcPath = join(src, file)\n const destPath = join(dest, file)\n await copy(srcPath, destPath)\n })\n )\n } else {\n await fs.mkdir(dirname(dest), { recursive: true })\n await fs.copyFile(src, dest)\n }\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 检查文件或目录是否存在\n * @param filePath - 文件或目录路径\n * @returns 是否存在\n * @example\n * ```ts\n * const isExist = await exists('./config.json')\n * ```\n * @public\n */\nexport async function exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath)\n return true\n } catch {\n return false\n }\n}\n","import { dirname } from 'path'\nimport { fileURLToPath } from 'url'\n\n/**\n * 获取当前模块的目录名\n * @param url - 模块的 URL\n * @returns 目录名\n * @example\n * ```ts\n * const __dirname = getDirname(import.meta.url)\n * ```\n * @public\n */\nexport function getDirname(url: string): string {\n return dirname(fileURLToPath(url))\n}\n","import { promises as fs } from 'fs'\nimport { join } from 'path'\n\n/**\n * 递归获取目录下的所有文件\n * @param dirPath - 目录路径\n * @param extensions - 可选的文件扩展名过滤器\n * @returns 文件路径数组\n * @example\n * ```ts\n * const allFiles = await getFiles('./src')\n * const tsFiles = await getFiles('./src', ['.ts', '.tsx'])\n * ```\n * @public\n */\nexport async function getFiles(\n dirPath: string,\n extensions?: string[]\n): Promise<string[]> {\n const files: string[] = []\n\n async function traverse(currentPath: string) {\n const entries = await fs.readdir(currentPath, { withFileTypes: true })\n\n for (const entry of entries) {\n const fullPath = join(currentPath, entry.name)\n\n if (entry.isDirectory()) {\n await traverse(fullPath)\n } else if (entry.isFile()) {\n if (!extensions || extensions.some((ext) => entry.name.endsWith(ext))) {\n files.push(fullPath)\n }\n }\n }\n }\n\n await traverse(dirPath)\n return files\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 读取 JSON 文件\n * @param filePath - 文件路径\n * @returns 解析后的 JSON 数据\n * @example\n * ```ts\n * const data = await readJson('./config.json')\n * ```\n * @public\n */\nexport async function readJson<T = any>(filePath: string): Promise<T> {\n const content = await fs.readFile(filePath, 'utf-8')\n return JSON.parse(content)\n}\n","import { exists } from './exists'\nimport { readJson } from './readJson'\n\n/**\n * 如果文件存在则读取,否则返回默认值\n * @param filePath - 文件路径\n * @param defaultValue - 默认值\n * @returns 文件内容或默认值\n * @example\n * ```ts\n * const config = await readFileOrDefault('./config.json', { theme: 'light' })\n * ```\n * @public\n */\nexport async function readFileOrDefault<T>(\n filePath: string,\n defaultValue: T\n): Promise<T> {\n const isExist = await exists(filePath)\n if (!isExist) {\n return defaultValue\n }\n return readJson<T>(filePath)\n}\n","import { promises as fs } from 'fs'\nimport { join } from 'path'\n\n/**\n * 递归删除文件或目录\n * @param filePath - 文件或目录路径\n * @example\n * ```ts\n * await remove('./temp')\n * ```\n * @public\n */\nexport async function remove(filePath: string): Promise<void> {\n try {\n const stat = await fs.stat(filePath)\n if (stat.isDirectory()) {\n const files = await fs.readdir(filePath)\n await Promise.all(\n files.map(async (file) => {\n const fullPath = join(filePath, file)\n await remove(fullPath)\n })\n )\n await fs.rmdir(filePath)\n } else {\n await fs.unlink(filePath)\n }\n } catch {\n // File doesn't exist, ignore\n }\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 将数据写入 JSON 文件\n * @param filePath - 文件路径\n * @param data - 要写入的数据\n * @example\n * ```ts\n * await writeJson('./config.json', { name: 'test' })\n * ```\n * @public\n */\nexport async function writeJson(filePath: string, data: any): Promise<void> {\n const content = JSON.stringify(data, null, 2)\n await fs.writeFile(filePath, content, 'utf-8')\n}\n","/**\n * 获取环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值\n * @returns 环境变量值\n * @example\n * ```ts\n * const value = getEnv('API_URL', 'http://localhost:3000')\n * ```\n * @public\n */\nexport function getEnv(key: string, defaultValue?: string): string {\n return process.env[key] || defaultValue || ''\n}\n","/**\n * 获取布尔类型的环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值(默认: false)\n * @returns 布尔值\n * @example\n * ```ts\n * const enabled = getEnvBool('DEBUG', false)\n * // DEBUG=true 或 DEBUG=1 返回 true\n * // DEBUG=false 或 DEBUG=0 返回 false\n * ```\n * @public\n */\nexport function getEnvBool(key: string, defaultValue: boolean = false): boolean {\n const value = process.env[key]?.toLowerCase()\n if (value === 'true' || value === '1') return true\n if (value === 'false' || value === '0') return false\n return defaultValue\n}\n","/**\n * 获取当前环境模式(development、production、test)\n * @returns 环境模式\n * @example\n * ```ts\n * const mode = getEnvMode()\n * console.log(mode) // 'development' | 'production' | 'test'\n * ```\n * @public\n */\nexport function getEnvMode(): string {\n return process.env.NODE_ENV || 'development'\n}\n","/**\n * 获取数字类型的环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值(默认: 0)\n * @returns 数字值\n * @example\n * ```ts\n * const port = getEnvNumber('PORT', 3000)\n * ```\n * @public\n */\nexport function getEnvNumber(key: string, defaultValue: number = 0): number {\n const value = process.env[key]\n const parsed = value ? parseInt(value, 10) : NaN\n return isNaN(parsed) ? defaultValue : parsed\n}\n","/**\n * 检查环境变量是否已设置\n * @param key - 环境变量键\n * @returns 是否已设置\n * @example\n * ```ts\n * if (hasEnv('API_KEY')) {\n * console.log('API_KEY is set')\n * }\n * ```\n * @public\n */\nexport function hasEnv(key: string): boolean {\n return typeof process.env[key] !== 'undefined'\n}\n","import { getEnvMode } from './getEnvMode'\n\n/**\n * 检查当前环境是否为开发环境\n * @returns 是否为开发环境\n * @example\n * ```ts\n * if (isDevelopment()) {\n * console.log('Running in development mode')\n * }\n * ```\n * @public\n */\nexport function isDevelopment(): boolean {\n return getEnvMode() === 'development'\n}\n","import { getEnvMode } from './getEnvMode'\n\n/**\n * 检查当前环境是否为生产环境\n * @returns 是否为生产环境\n * @example\n * ```ts\n * if (isProduction()) {\n * console.log('Running in production mode')\n * }\n * ```\n * @public\n */\nexport function isProduction(): boolean {\n return getEnvMode() === 'production'\n}\n","/**\n * 退出当前进程\n * @param code - 退出码(默认: 0)\n * @returns never\n * @example\n * ```ts\n * exit(0) // 正常退出\n * exit(1) // 异常退出\n * ```\n * @public\n */\nexport function exit(code: number = 0): never {\n process.exit(code)\n}\n","/**\n * 获取当前工作目录\n * @returns 当前工作目录路径\n * @example\n * ```ts\n * const cwd = getCwd()\n * console.log(cwd) // '/path/to/current/directory'\n * ```\n * @public\n */\nexport function getCwd(): string {\n return process.cwd()\n}\n","/**\n * 获取内存使用信息\n * @returns 内存使用信息对象\n * @example\n * ```ts\n * const usage = getMemoryUsage()\n * console.log(usage)\n * // {\n * // rss: 12345678,\n * // heapTotal: 8765432,\n * // heapUsed: 4321098,\n * // external: 123456,\n * // arrayBuffers: 12345\n * // }\n * ```\n * @public\n */\nexport function getMemoryUsage(): NodeJS.MemoryUsage {\n return process.memoryUsage()\n}\n","/**\n * 获取 Node.js 版本\n * @returns Node.js 版本字符串\n * @example\n * ```ts\n * const version = getNodeVersion()\n * console.log(version) // 'v18.0.0'\n * ```\n * @public\n */\nexport function getNodeVersion(): string {\n return process.version\n}\n","/**\n * 获取进程 ID\n * @returns 进程 ID\n * @example\n * ```ts\n * const pid = getPid()\n * console.log(pid) // 12345\n * ```\n * @public\n */\nexport function getPid(): number {\n return process.pid\n}\n","/**\n * 获取当前平台\n * @returns 平台名称(win32、darwin、linux 等)\n * @example\n * ```ts\n * const platform = getPlatform()\n * console.log(platform) // 'win32' | 'darwin' | 'linux'\n * ```\n * @public\n */\nexport function getPlatform(): NodeJS.Platform {\n return process.platform\n}\n","/**\n * 获取进程运行时间(秒)\n * @returns 运行时间(秒)\n * @example\n * ```ts\n * const uptime = getUptime()\n * console.log(uptime) // 3600\n * ```\n * @public\n */\nexport function getUptime(): number {\n return process.uptime()\n}\n","/**\n * 检查当前平台是否为 Linux\n * @returns 是否为 Linux\n * @example\n * ```ts\n * if (isLinux()) {\n * console.log('Running on Linux')\n * }\n * ```\n * @public\n */\nexport function isLinux(): boolean {\n return process.platform === 'linux'\n}\n","/**\n * 检查当前平台是否为 macOS\n * @returns 是否为 macOS\n * @example\n * ```ts\n * if (isMac()) {\n * console.log('Running on macOS')\n * }\n * ```\n * @public\n */\nexport function isMac(): boolean {\n return process.platform === 'darwin'\n}\n","/**\n * 检查当前平台是否为 Windows\n * @returns 是否为 Windows\n * @example\n * ```ts\n * if (isWindows()) {\n * console.log('Running on Windows')\n * }\n * ```\n * @public\n */\nexport function isWindows(): boolean {\n return process.platform === 'win32'\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["fs","fs","fs","fs","fs","fs","fs","posix"],"sources":["../src/fs/ensureDir.ts","../src/fs/copy.ts","../src/fs/exists.ts","../src/fs/getDirname.ts","../src/fs/getFiles.ts","../src/fs/readJson.ts","../src/fs/readFileOrDefault.ts","../src/fs/remove.ts","../src/fs/writeJson.ts","../src/env/getEnv.ts","../src/env/getEnvBool.ts","../src/env/getEnvMode.ts","../src/env/getEnvNumber.ts","../src/env/hasEnv.ts","../src/env/isDevelopment.ts","../src/env/isProduction.ts","../src/process/exit.ts","../src/process/getCwd.ts","../src/process/getMemoryUsage.ts","../src/process/getNodeVersion.ts","../src/process/getPid.ts","../src/process/getPlatform.ts","../src/process/getUptime.ts","../src/process/isLinux.ts","../src/process/isMac.ts","../src/process/isWindows.ts","../src/path/index.ts"],"sourcesContent":["import { promises as fs } from 'fs'\n\n/**\n * 确保目录存在,如果不存在则创建\n * @param dirPath - 目录路径\n * @example\n * ```ts\n * await ensureDir('./dist')\n * ```\n * @public\n */\nexport async function ensureDir(dirPath: string): Promise<void> {\n try {\n await fs.access(dirPath)\n } catch {\n await fs.mkdir(dirPath, { recursive: true })\n }\n}\n","import { promises as fs } from 'fs'\nimport { join, dirname } from 'path'\nimport { ensureDir } from './ensureDir'\n\n/**\n * 递归复制文件或目录\n * @param src - 源路径\n * @param dest - 目标路径\n * @example\n * ```ts\n * await copy('./src', './dist')\n * ```\n * @public\n */\nexport async function copy(src: string, dest: string): Promise<void> {\n const stat = await fs.stat(src)\n\n if (stat.isDirectory()) {\n await ensureDir(dest)\n const files = await fs.readdir(src)\n await Promise.all(\n files.map(async (file) => {\n const srcPath = join(src, file)\n const destPath = join(dest, file)\n await copy(srcPath, destPath)\n })\n )\n } else {\n await fs.mkdir(dirname(dest), { recursive: true })\n await fs.copyFile(src, dest)\n }\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 检查文件或目录是否存在\n * @param filePath - 文件或目录路径\n * @returns 是否存在\n * @example\n * ```ts\n * const isExist = await exists('./config.json')\n * ```\n * @public\n */\nexport async function exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath)\n return true\n } catch {\n return false\n }\n}\n","import { dirname } from 'path'\nimport { fileURLToPath } from 'url'\n\n/**\n * 获取当前模块的目录名\n * @param url - 模块的 URL\n * @returns 目录名\n * @example\n * ```ts\n * const __dirname = getDirname(import.meta.url)\n * ```\n * @public\n */\nexport function getDirname(url: string): string {\n return dirname(fileURLToPath(url))\n}\n","import { promises as fs } from 'fs'\nimport { join } from 'path'\n\n/**\n * 递归获取目录下的所有文件\n * @param dirPath - 目录路径\n * @param extensions - 可选的文件扩展名过滤器\n * @returns 文件路径数组\n * @example\n * ```ts\n * const allFiles = await getFiles('./src')\n * const tsFiles = await getFiles('./src', ['.ts', '.tsx'])\n * ```\n * @public\n */\nexport async function getFiles(\n dirPath: string,\n extensions?: string[]\n): Promise<string[]> {\n const files: string[] = []\n\n async function traverse(currentPath: string) {\n const entries = await fs.readdir(currentPath, { withFileTypes: true })\n\n for (const entry of entries) {\n const fullPath = join(currentPath, entry.name)\n\n if (entry.isDirectory()) {\n await traverse(fullPath)\n } else if (entry.isFile()) {\n if (!extensions || extensions.some((ext) => entry.name.endsWith(ext))) {\n files.push(fullPath)\n }\n }\n }\n }\n\n await traverse(dirPath)\n return files\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 读取 JSON 文件\n * @param filePath - 文件路径\n * @returns 解析后的 JSON 数据\n * @example\n * ```ts\n * const data = await readJson('./config.json')\n * ```\n * @public\n */\nexport async function readJson<T = any>(filePath: string): Promise<T> {\n try {\n const data = await fs.readFile(filePath, 'utf8');\n return JSON.parse(data);\n } catch (error) {\n console.error('Error reading JSON file:', error);\n throw error;\n }\n}\n","import { exists } from './exists'\nimport { readJson } from './readJson'\n\n/**\n * 如果文件存在则读取,否则返回默认值\n * @param filePath - 文件路径\n * @param defaultValue - 默认值\n * @returns 文件内容或默认值\n * @example\n * ```ts\n * const config = await readFileOrDefault('./config.json', { theme: 'light' })\n * ```\n * @public\n */\nexport async function readFileOrDefault<T>(\n filePath: string,\n defaultValue: T\n): Promise<T> {\n const isExist = await exists(filePath)\n if (!isExist) {\n return defaultValue\n }\n return readJson<T>(filePath)\n}\n","import { promises as fs } from 'fs'\nimport { join } from 'path'\n\n/**\n * 递归删除文件或目录\n * @param filePath - 文件或目录路径\n * @example\n * ```ts\n * await remove('./temp')\n * ```\n * @public\n */\nexport async function remove(filePath: string): Promise<void> {\n try {\n const stat = await fs.stat(filePath)\n if (stat.isDirectory()) {\n const files = await fs.readdir(filePath)\n await Promise.all(\n files.map(async (file) => {\n const fullPath = join(filePath, file)\n await remove(fullPath)\n })\n )\n await fs.rmdir(filePath)\n } else {\n await fs.unlink(filePath)\n }\n } catch {\n // File doesn't exist, ignore\n }\n}\n","import { promises as fs } from 'fs'\nimport {dirname} from \"node:path\";\n\n/**\n * 将数据写入 JSON 文件\n * @param filePath - 文件路径\n * @param data - 要写入的数据\n * @param spaces - 缩进空格数\n * @example\n * ```ts\n * await writeJson('./config.json', { name: 'test' })\n * ```\n * @public\n */\nexport async function writeJson(filePath: string, data: any,spaces: number = 2,): Promise<void> {\n try {\n const dir = dirname(filePath);\n await fs.mkdir(dir, { recursive: true });\n const jsonData = JSON.stringify(data, null, spaces);\n await fs.writeFile(filePath, jsonData, 'utf8');\n } catch (error) {\n console.error('Error writing JSON file:', error);\n throw error;\n }\n}\n","/**\n * 获取环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值\n * @returns 环境变量值\n * @example\n * ```ts\n * const value = getEnv('API_URL', 'http://localhost:3000')\n * ```\n * @public\n */\nexport function getEnv(key: string, defaultValue?: string): string {\n return process.env[key] || defaultValue || ''\n}\n","/**\n * 获取布尔类型的环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值(默认: false)\n * @returns 布尔值\n * @example\n * ```ts\n * const enabled = getEnvBool('DEBUG', false)\n * // DEBUG=true 或 DEBUG=1 返回 true\n * // DEBUG=false 或 DEBUG=0 返回 false\n * ```\n * @public\n */\nexport function getEnvBool(key: string, defaultValue: boolean = false): boolean {\n const value = process.env[key]?.toLowerCase()\n if (value === 'true' || value === '1') return true\n if (value === 'false' || value === '0') return false\n return defaultValue\n}\n","/**\n * 获取当前环境模式(development、production、test)\n * @returns 环境模式\n * @example\n * ```ts\n * const mode = getEnvMode()\n * console.log(mode) // 'development' | 'production' | 'test'\n * ```\n * @public\n */\nexport function getEnvMode(): string {\n return process.env.NODE_ENV || 'development'\n}\n","/**\n * 获取数字类型的环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值(默认: 0)\n * @returns 数字值\n * @example\n * ```ts\n * const port = getEnvNumber('PORT', 3000)\n * ```\n * @public\n */\nexport function getEnvNumber(key: string, defaultValue: number = 0): number {\n const value = process.env[key]\n const parsed = value ? parseInt(value, 10) : NaN\n return isNaN(parsed) ? defaultValue : parsed\n}\n","/**\n * 检查环境变量是否已设置\n * @param key - 环境变量键\n * @returns 是否已设置\n * @example\n * ```ts\n * if (hasEnv('API_KEY')) {\n * console.log('API_KEY is set')\n * }\n * ```\n * @public\n */\nexport function hasEnv(key: string): boolean {\n return typeof process.env[key] !== 'undefined'\n}\n","import { getEnvMode } from './getEnvMode'\n\n/**\n * 检查当前环境是否为开发环境\n * @returns 是否为开发环境\n * @example\n * ```ts\n * if (isDevelopment()) {\n * console.log('Running in development mode')\n * }\n * ```\n * @public\n */\nexport function isDevelopment(): boolean {\n return getEnvMode() === 'development'\n}\n","import { getEnvMode } from './getEnvMode'\n\n/**\n * 检查当前环境是否为生产环境\n * @returns 是否为生产环境\n * @example\n * ```ts\n * if (isProduction()) {\n * console.log('Running in production mode')\n * }\n * ```\n * @public\n */\nexport function isProduction(): boolean {\n return getEnvMode() === 'production'\n}\n","/**\n * 退出当前进程\n * @param code - 退出码(默认: 0)\n * @returns never\n * @example\n * ```ts\n * exit(0) // 正常退出\n * exit(1) // 异常退出\n * ```\n * @public\n */\nexport function exit(code: number = 0): never {\n process.exit(code)\n}\n","/**\n * 获取当前工作目录\n * @returns 当前工作目录路径\n * @example\n * ```ts\n * const cwd = getCwd()\n * console.log(cwd) // '/path/to/current/directory'\n * ```\n * @public\n */\nexport function getCwd(): string {\n return process.cwd()\n}\n","/**\n * 获取内存使用信息\n * @returns 内存使用信息对象\n * @example\n * ```ts\n * const usage = getMemoryUsage()\n * console.log(usage)\n * // {\n * // rss: 12345678,\n * // heapTotal: 8765432,\n * // heapUsed: 4321098,\n * // external: 123456,\n * // arrayBuffers: 12345\n * // }\n * ```\n * @public\n */\nexport function getMemoryUsage(): NodeJS.MemoryUsage {\n return process.memoryUsage()\n}\n","/**\n * 获取 Node.js 版本\n * @returns Node.js 版本字符串\n * @example\n * ```ts\n * const version = getNodeVersion()\n * console.log(version) // 'v18.0.0'\n * ```\n * @public\n */\nexport function getNodeVersion(): string {\n return process.version\n}\n","/**\n * 获取进程 ID\n * @returns 进程 ID\n * @example\n * ```ts\n * const pid = getPid()\n * console.log(pid) // 12345\n * ```\n * @public\n */\nexport function getPid(): number {\n return process.pid\n}\n","/**\n * 获取当前平台\n * @returns 平台名称(win32、darwin、linux 等)\n * @example\n * ```ts\n * const platform = getPlatform()\n * console.log(platform) // 'win32' | 'darwin' | 'linux'\n * ```\n * @public\n */\nexport function getPlatform(): NodeJS.Platform {\n return process.platform\n}\n","/**\n * 获取进程运行时间(秒)\n * @returns 运行时间(秒)\n * @example\n * ```ts\n * const uptime = getUptime()\n * console.log(uptime) // 3600\n * ```\n * @public\n */\nexport function getUptime(): number {\n return process.uptime()\n}\n","/**\n * 检查当前平台是否为 Linux\n * @returns 是否为 Linux\n * @example\n * ```ts\n * if (isLinux()) {\n * console.log('Running on Linux')\n * }\n * ```\n * @public\n */\nexport function isLinux(): boolean {\n return process.platform === 'linux'\n}\n","/**\n * 检查当前平台是否为 macOS\n * @returns 是否为 macOS\n * @example\n * ```ts\n * if (isMac()) {\n * console.log('Running on macOS')\n * }\n * ```\n * @public\n */\nexport function isMac(): boolean {\n return process.platform === 'darwin'\n}\n","/**\n * 检查当前平台是否为 Windows\n * @returns 是否为 Windows\n * @example\n * ```ts\n * if (isWindows()) {\n * console.log('Running on Windows')\n * }\n * ```\n * @public\n */\nexport function isWindows(): boolean {\n return process.platform === 'win32'\n}\n","import { posix } from 'node:path';\n\n/**\n * 将给定的文件路径转换为 POSIX 风格。\n *\n * @param pathname - 原始文件路径,可以是 Windows 风格或 POSIX 风格\n * @returns 转换后的 POSIX 风格路径,所有反斜杠 `\\` 替换为正斜杠 `/`\n *\n * @example\n * ```ts\n * // Windows 路径转换为 POSIX\n * toPosixPath('C:\\\\Users\\\\name\\\\file.txt'); // 'C:/Users/name/file.txt'\n *\n * @example\n * ```ts\n * // 混合路径转换\n * toPosixPath('folder\\\\subfolder/file.txt'); // 'folder/subfolder/file.txt'\n *\n * @example\n * ```ts\n * // 已是 POSIX 风格的路径保持不变\n * toPosixPath('/home/user/docs/file.txt'); // '/home/user/docs/file.txt'\n * ```\n */\nfunction toPosixPath(pathname: string) {\n return pathname.split(`\\\\`).join(posix.sep);\n}\n\nexport { toPosixPath };\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -23,7 +23,7 @@ declare function readJson<T = any>(filePath: string): Promise<T>;
23
23
  declare function remove(filePath: string): Promise<void>;
24
24
  //#endregion
25
25
  //#region src/fs/writeJson.d.ts
26
- declare function writeJson(filePath: string, data: any): Promise<void>;
26
+ declare function writeJson(filePath: string, data: any, spaces?: number): Promise<void>;
27
27
  //#endregion
28
28
  //#region src/env/getEnv.d.ts
29
29
  declare function getEnv(key: string, defaultValue?: string): string;
@@ -76,5 +76,8 @@ declare function isMac(): boolean;
76
76
  //#region src/process/isWindows.d.ts
77
77
  declare function isWindows(): boolean;
78
78
  //#endregion
79
- export { copy, ensureDir, exists, exit, getCwd, getDirname, getEnv, getEnvBool, getEnvMode, getEnvNumber, getFiles, getMemoryUsage, getNodeVersion, getPid, getPlatform, getUptime, hasEnv, isDevelopment, isLinux, isMac, isProduction, isWindows, readFileOrDefault, readJson, remove, writeJson };
79
+ //#region src/path/index.d.ts
80
+ declare function toPosixPath(pathname: string): string;
81
+ //#endregion
82
+ export { copy, ensureDir, exists, exit, getCwd, getDirname, getEnv, getEnvBool, getEnvMode, getEnvNumber, getFiles, getMemoryUsage, getNodeVersion, getPid, getPlatform, getUptime, hasEnv, isDevelopment, isLinux, isMac, isProduction, isWindows, readFileOrDefault, readJson, remove, toPosixPath, writeJson };
80
83
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/fs/copy.ts","../src/fs/ensureDir.ts","../src/fs/exists.ts","../src/fs/getDirname.ts","../src/fs/getFiles.ts","../src/fs/readFileOrDefault.ts","../src/fs/readJson.ts","../src/fs/remove.ts","../src/fs/writeJson.ts","../src/env/getEnv.ts","../src/env/getEnvBool.ts","../src/env/getEnvMode.ts","../src/env/getEnvNumber.ts","../src/env/hasEnv.ts","../src/env/isDevelopment.ts","../src/env/isProduction.ts","../src/process/exit.ts","../src/process/getCwd.ts","../src/process/getMemoryUsage.ts","../src/process/getNodeVersion.ts","../src/process/getPid.ts","../src/process/getPlatform.ts","../src/process/getUptime.ts","../src/process/isLinux.ts","../src/process/isMac.ts","../src/process/isWindows.ts"],"mappings":";iBAcsB,IAAA,CAAK,GAAA,UAAa,IAAA,WAAe,OAAA;;;iBCHjC,SAAA,CAAU,OAAA,WAAkB,OAAA;;;iBCC5B,MAAA,CAAO,QAAA,WAAmB,OAAA;;;iBCChC,UAAA,CAAW,GAAA;;;iBCEL,QAAA,CACpB,OAAA,UACA,UAAA,cACC,OAAA;;;iBCJmB,iBAAA,GAAA,CACpB,QAAA,UACA,YAAA,EAAc,CAAA,GACb,OAAA,CAAQ,CAAA;;;iBCLW,QAAA,SAAA,CAAkB,QAAA,WAAmB,OAAA,CAAQ,CAAA;;;iBCA7C,MAAA,CAAO,QAAA,WAAmB,OAAA;;;iBCA1B,SAAA,CAAU,QAAA,UAAkB,IAAA,QAAY,OAAA;;;iBCD9C,MAAA,CAAO,GAAA,UAAa,YAAA;;;iBCEpB,UAAA,CAAW,GAAA,UAAa,YAAA;;;iBCHxB,UAAA,CAAA;;;iBCCA,YAAA,CAAa,GAAA,UAAa,YAAA;;;iBCC1B,MAAA,CAAO,GAAA;;;iBCCP,aAAA,CAAA;;;iBCAA,YAAA,CAAA;;;iBCFA,IAAA,CAAK,IAAA;;;iBCDL,MAAA,CAAA;;;iBCOA,cAAA,CAAA,GAAkB,MAAA,CAAO,WAAA;;;iBCPzB,cAAA,CAAA;;;iBCAA,MAAA,CAAA;;;iBCAA,WAAA,CAAA,GAAe,MAAA,CAAO,QAAA;;;iBCAtB,SAAA,CAAA;;;iBCCA,OAAA,CAAA;;;iBCAA,KAAA,CAAA;;;iBCAA,SAAA,CAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/fs/copy.ts","../src/fs/ensureDir.ts","../src/fs/exists.ts","../src/fs/getDirname.ts","../src/fs/getFiles.ts","../src/fs/readFileOrDefault.ts","../src/fs/readJson.ts","../src/fs/remove.ts","../src/fs/writeJson.ts","../src/env/getEnv.ts","../src/env/getEnvBool.ts","../src/env/getEnvMode.ts","../src/env/getEnvNumber.ts","../src/env/hasEnv.ts","../src/env/isDevelopment.ts","../src/env/isProduction.ts","../src/process/exit.ts","../src/process/getCwd.ts","../src/process/getMemoryUsage.ts","../src/process/getNodeVersion.ts","../src/process/getPid.ts","../src/process/getPlatform.ts","../src/process/getUptime.ts","../src/process/isLinux.ts","../src/process/isMac.ts","../src/process/isWindows.ts","../src/path/index.ts"],"mappings":";iBAcsB,IAAA,CAAK,GAAA,UAAa,IAAA,WAAe,OAAA;;;iBCHjC,SAAA,CAAU,OAAA,WAAkB,OAAA;;;iBCC5B,MAAA,CAAO,QAAA,WAAmB,OAAA;;;iBCChC,UAAA,CAAW,GAAA;;;iBCEL,QAAA,CACpB,OAAA,UACA,UAAA,cACC,OAAA;;;iBCJmB,iBAAA,GAAA,CACpB,QAAA,UACA,YAAA,EAAc,CAAA,GACb,OAAA,CAAQ,CAAA;;;iBCLW,QAAA,SAAA,CAAkB,QAAA,WAAmB,OAAA,CAAQ,CAAA;;;iBCA7C,MAAA,CAAO,QAAA,WAAmB,OAAA;;;iBCE1B,SAAA,CAAU,QAAA,UAAkB,IAAA,OAAU,MAAA,YAAsB,OAAA;;;iBCHlE,MAAA,CAAO,GAAA,UAAa,YAAA;;;iBCEpB,UAAA,CAAW,GAAA,UAAa,YAAA;;;iBCHxB,UAAA,CAAA;;;iBCCA,YAAA,CAAa,GAAA,UAAa,YAAA;;;iBCC1B,MAAA,CAAO,GAAA;;;iBCCP,aAAA,CAAA;;;iBCAA,YAAA,CAAA;;;iBCFA,IAAA,CAAK,IAAA;;;iBCDL,MAAA,CAAA;;;iBCOA,cAAA,CAAA,GAAkB,MAAA,CAAO,WAAA;;;iBCPzB,cAAA,CAAA;;;iBCAA,MAAA,CAAA;;;iBCAA,WAAA,CAAA,GAAe,MAAA,CAAO,QAAA;;;iBCAtB,SAAA,CAAA;;;iBCCA,OAAA,CAAA;;;iBCAA,KAAA,CAAA;;;iBCAA,SAAA,CAAA;;;iBCaP,WAAA,CAAY,QAAA"}
package/dist/index.d.mts CHANGED
@@ -23,7 +23,7 @@ declare function readJson<T = any>(filePath: string): Promise<T>;
23
23
  declare function remove(filePath: string): Promise<void>;
24
24
  //#endregion
25
25
  //#region src/fs/writeJson.d.ts
26
- declare function writeJson(filePath: string, data: any): Promise<void>;
26
+ declare function writeJson(filePath: string, data: any, spaces?: number): Promise<void>;
27
27
  //#endregion
28
28
  //#region src/env/getEnv.d.ts
29
29
  declare function getEnv(key: string, defaultValue?: string): string;
@@ -76,5 +76,8 @@ declare function isMac(): boolean;
76
76
  //#region src/process/isWindows.d.ts
77
77
  declare function isWindows(): boolean;
78
78
  //#endregion
79
- export { copy, ensureDir, exists, exit, getCwd, getDirname, getEnv, getEnvBool, getEnvMode, getEnvNumber, getFiles, getMemoryUsage, getNodeVersion, getPid, getPlatform, getUptime, hasEnv, isDevelopment, isLinux, isMac, isProduction, isWindows, readFileOrDefault, readJson, remove, writeJson };
79
+ //#region src/path/index.d.ts
80
+ declare function toPosixPath(pathname: string): string;
81
+ //#endregion
82
+ export { copy, ensureDir, exists, exit, getCwd, getDirname, getEnv, getEnvBool, getEnvMode, getEnvNumber, getFiles, getMemoryUsage, getNodeVersion, getPid, getPlatform, getUptime, hasEnv, isDevelopment, isLinux, isMac, isProduction, isWindows, readFileOrDefault, readJson, remove, toPosixPath, writeJson };
80
83
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/fs/copy.ts","../src/fs/ensureDir.ts","../src/fs/exists.ts","../src/fs/getDirname.ts","../src/fs/getFiles.ts","../src/fs/readFileOrDefault.ts","../src/fs/readJson.ts","../src/fs/remove.ts","../src/fs/writeJson.ts","../src/env/getEnv.ts","../src/env/getEnvBool.ts","../src/env/getEnvMode.ts","../src/env/getEnvNumber.ts","../src/env/hasEnv.ts","../src/env/isDevelopment.ts","../src/env/isProduction.ts","../src/process/exit.ts","../src/process/getCwd.ts","../src/process/getMemoryUsage.ts","../src/process/getNodeVersion.ts","../src/process/getPid.ts","../src/process/getPlatform.ts","../src/process/getUptime.ts","../src/process/isLinux.ts","../src/process/isMac.ts","../src/process/isWindows.ts"],"mappings":";iBAcsB,IAAA,CAAK,GAAA,UAAa,IAAA,WAAe,OAAA;;;iBCHjC,SAAA,CAAU,OAAA,WAAkB,OAAA;;;iBCC5B,MAAA,CAAO,QAAA,WAAmB,OAAA;;;iBCChC,UAAA,CAAW,GAAA;;;iBCEL,QAAA,CACpB,OAAA,UACA,UAAA,cACC,OAAA;;;iBCJmB,iBAAA,GAAA,CACpB,QAAA,UACA,YAAA,EAAc,CAAA,GACb,OAAA,CAAQ,CAAA;;;iBCLW,QAAA,SAAA,CAAkB,QAAA,WAAmB,OAAA,CAAQ,CAAA;;;iBCA7C,MAAA,CAAO,QAAA,WAAmB,OAAA;;;iBCA1B,SAAA,CAAU,QAAA,UAAkB,IAAA,QAAY,OAAA;;;iBCD9C,MAAA,CAAO,GAAA,UAAa,YAAA;;;iBCEpB,UAAA,CAAW,GAAA,UAAa,YAAA;;;iBCHxB,UAAA,CAAA;;;iBCCA,YAAA,CAAa,GAAA,UAAa,YAAA;;;iBCC1B,MAAA,CAAO,GAAA;;;iBCCP,aAAA,CAAA;;;iBCAA,YAAA,CAAA;;;iBCFA,IAAA,CAAK,IAAA;;;iBCDL,MAAA,CAAA;;;iBCOA,cAAA,CAAA,GAAkB,MAAA,CAAO,WAAA;;;iBCPzB,cAAA,CAAA;;;iBCAA,MAAA,CAAA;;;iBCAA,WAAA,CAAA,GAAe,MAAA,CAAO,QAAA;;;iBCAtB,SAAA,CAAA;;;iBCCA,OAAA,CAAA;;;iBCAA,KAAA,CAAA;;;iBCAA,SAAA,CAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/fs/copy.ts","../src/fs/ensureDir.ts","../src/fs/exists.ts","../src/fs/getDirname.ts","../src/fs/getFiles.ts","../src/fs/readFileOrDefault.ts","../src/fs/readJson.ts","../src/fs/remove.ts","../src/fs/writeJson.ts","../src/env/getEnv.ts","../src/env/getEnvBool.ts","../src/env/getEnvMode.ts","../src/env/getEnvNumber.ts","../src/env/hasEnv.ts","../src/env/isDevelopment.ts","../src/env/isProduction.ts","../src/process/exit.ts","../src/process/getCwd.ts","../src/process/getMemoryUsage.ts","../src/process/getNodeVersion.ts","../src/process/getPid.ts","../src/process/getPlatform.ts","../src/process/getUptime.ts","../src/process/isLinux.ts","../src/process/isMac.ts","../src/process/isWindows.ts","../src/path/index.ts"],"mappings":";iBAcsB,IAAA,CAAK,GAAA,UAAa,IAAA,WAAe,OAAA;;;iBCHjC,SAAA,CAAU,OAAA,WAAkB,OAAA;;;iBCC5B,MAAA,CAAO,QAAA,WAAmB,OAAA;;;iBCChC,UAAA,CAAW,GAAA;;;iBCEL,QAAA,CACpB,OAAA,UACA,UAAA,cACC,OAAA;;;iBCJmB,iBAAA,GAAA,CACpB,QAAA,UACA,YAAA,EAAc,CAAA,GACb,OAAA,CAAQ,CAAA;;;iBCLW,QAAA,SAAA,CAAkB,QAAA,WAAmB,OAAA,CAAQ,CAAA;;;iBCA7C,MAAA,CAAO,QAAA,WAAmB,OAAA;;;iBCE1B,SAAA,CAAU,QAAA,UAAkB,IAAA,OAAU,MAAA,YAAsB,OAAA;;;iBCHlE,MAAA,CAAO,GAAA,UAAa,YAAA;;;iBCEpB,UAAA,CAAW,GAAA,UAAa,YAAA;;;iBCHxB,UAAA,CAAA;;;iBCCA,YAAA,CAAa,GAAA,UAAa,YAAA;;;iBCC1B,MAAA,CAAO,GAAA;;;iBCCP,aAAA,CAAA;;;iBCAA,YAAA,CAAA;;;iBCFA,IAAA,CAAK,IAAA;;;iBCDL,MAAA,CAAA;;;iBCOA,cAAA,CAAA,GAAkB,MAAA,CAAO,WAAA;;;iBCPzB,cAAA,CAAA;;;iBCAA,MAAA,CAAA;;;iBCAA,WAAA,CAAA,GAAe,MAAA,CAAO,QAAA;;;iBCAtB,SAAA,CAAA;;;iBCCA,OAAA,CAAA;;;iBCAA,KAAA,CAAA;;;iBCAA,SAAA,CAAA;;;iBCaP,WAAA,CAAY,QAAA"}
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { promises } from "node:fs";
2
- import { dirname, join } from "node:path";
2
+ import { dirname, join, posix } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
 
5
5
  //#region src/fs/ensureDir.ts
@@ -125,8 +125,13 @@ async function getFiles(dirPath, extensions) {
125
125
  * @public
126
126
  */
127
127
  async function readJson(filePath) {
128
- const content = await promises.readFile(filePath, "utf-8");
129
- return JSON.parse(content);
128
+ try {
129
+ const data = await promises.readFile(filePath, "utf8");
130
+ return JSON.parse(data);
131
+ } catch (error) {
132
+ console.error("Error reading JSON file:", error);
133
+ throw error;
134
+ }
130
135
  }
131
136
 
132
137
  //#endregion
@@ -176,15 +181,23 @@ async function remove(filePath) {
176
181
  * 将数据写入 JSON 文件
177
182
  * @param filePath - 文件路径
178
183
  * @param data - 要写入的数据
184
+ * @param spaces - 缩进空格数
179
185
  * @example
180
186
  * ```ts
181
187
  * await writeJson('./config.json', { name: 'test' })
182
188
  * ```
183
189
  * @public
184
190
  */
185
- async function writeJson(filePath, data) {
186
- const content = JSON.stringify(data, null, 2);
187
- await promises.writeFile(filePath, content, "utf-8");
191
+ async function writeJson(filePath, data, spaces = 2) {
192
+ try {
193
+ const dir = dirname(filePath);
194
+ await promises.mkdir(dir, { recursive: true });
195
+ const jsonData = JSON.stringify(data, null, spaces);
196
+ await promises.writeFile(filePath, jsonData, "utf8");
197
+ } catch (error) {
198
+ console.error("Error writing JSON file:", error);
199
+ throw error;
200
+ }
188
201
  }
189
202
 
190
203
  //#endregion
@@ -486,5 +499,33 @@ function isWindows() {
486
499
  }
487
500
 
488
501
  //#endregion
489
- export { copy, ensureDir, exists, exit, getCwd, getDirname, getEnv, getEnvBool, getEnvMode, getEnvNumber, getFiles, getMemoryUsage, getNodeVersion, getPid, getPlatform, getUptime, hasEnv, isDevelopment, isLinux, isMac, isProduction, isWindows, readFileOrDefault, readJson, remove, writeJson };
502
+ //#region src/path/index.ts
503
+ /**
504
+ * 将给定的文件路径转换为 POSIX 风格。
505
+ *
506
+ * @param pathname - 原始文件路径,可以是 Windows 风格或 POSIX 风格
507
+ * @returns 转换后的 POSIX 风格路径,所有反斜杠 `\` 替换为正斜杠 `/`
508
+ *
509
+ * @example
510
+ * ```ts
511
+ * // Windows 路径转换为 POSIX
512
+ * toPosixPath('C:\\Users\\name\\file.txt'); // 'C:/Users/name/file.txt'
513
+ *
514
+ * @example
515
+ * ```ts
516
+ * // 混合路径转换
517
+ * toPosixPath('folder\\subfolder/file.txt'); // 'folder/subfolder/file.txt'
518
+ *
519
+ * @example
520
+ * ```ts
521
+ * // 已是 POSIX 风格的路径保持不变
522
+ * toPosixPath('/home/user/docs/file.txt'); // '/home/user/docs/file.txt'
523
+ * ```
524
+ */
525
+ function toPosixPath(pathname) {
526
+ return pathname.split(`\\`).join(posix.sep);
527
+ }
528
+
529
+ //#endregion
530
+ export { copy, ensureDir, exists, exit, getCwd, getDirname, getEnv, getEnvBool, getEnvMode, getEnvNumber, getFiles, getMemoryUsage, getNodeVersion, getPid, getPlatform, getUptime, hasEnv, isDevelopment, isLinux, isMac, isProduction, isWindows, readFileOrDefault, readJson, remove, toPosixPath, writeJson };
490
531
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["fs","fs","fs","fs","fs","fs","fs"],"sources":["../src/fs/ensureDir.ts","../src/fs/copy.ts","../src/fs/exists.ts","../src/fs/getDirname.ts","../src/fs/getFiles.ts","../src/fs/readJson.ts","../src/fs/readFileOrDefault.ts","../src/fs/remove.ts","../src/fs/writeJson.ts","../src/env/getEnv.ts","../src/env/getEnvBool.ts","../src/env/getEnvMode.ts","../src/env/getEnvNumber.ts","../src/env/hasEnv.ts","../src/env/isDevelopment.ts","../src/env/isProduction.ts","../src/process/exit.ts","../src/process/getCwd.ts","../src/process/getMemoryUsage.ts","../src/process/getNodeVersion.ts","../src/process/getPid.ts","../src/process/getPlatform.ts","../src/process/getUptime.ts","../src/process/isLinux.ts","../src/process/isMac.ts","../src/process/isWindows.ts"],"sourcesContent":["import { promises as fs } from 'fs'\n\n/**\n * 确保目录存在,如果不存在则创建\n * @param dirPath - 目录路径\n * @example\n * ```ts\n * await ensureDir('./dist')\n * ```\n * @public\n */\nexport async function ensureDir(dirPath: string): Promise<void> {\n try {\n await fs.access(dirPath)\n } catch {\n await fs.mkdir(dirPath, { recursive: true })\n }\n}\n","import { promises as fs } from 'fs'\nimport { join, dirname } from 'path'\nimport { ensureDir } from './ensureDir'\n\n/**\n * 递归复制文件或目录\n * @param src - 源路径\n * @param dest - 目标路径\n * @example\n * ```ts\n * await copy('./src', './dist')\n * ```\n * @public\n */\nexport async function copy(src: string, dest: string): Promise<void> {\n const stat = await fs.stat(src)\n\n if (stat.isDirectory()) {\n await ensureDir(dest)\n const files = await fs.readdir(src)\n await Promise.all(\n files.map(async (file) => {\n const srcPath = join(src, file)\n const destPath = join(dest, file)\n await copy(srcPath, destPath)\n })\n )\n } else {\n await fs.mkdir(dirname(dest), { recursive: true })\n await fs.copyFile(src, dest)\n }\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 检查文件或目录是否存在\n * @param filePath - 文件或目录路径\n * @returns 是否存在\n * @example\n * ```ts\n * const isExist = await exists('./config.json')\n * ```\n * @public\n */\nexport async function exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath)\n return true\n } catch {\n return false\n }\n}\n","import { dirname } from 'path'\nimport { fileURLToPath } from 'url'\n\n/**\n * 获取当前模块的目录名\n * @param url - 模块的 URL\n * @returns 目录名\n * @example\n * ```ts\n * const __dirname = getDirname(import.meta.url)\n * ```\n * @public\n */\nexport function getDirname(url: string): string {\n return dirname(fileURLToPath(url))\n}\n","import { promises as fs } from 'fs'\nimport { join } from 'path'\n\n/**\n * 递归获取目录下的所有文件\n * @param dirPath - 目录路径\n * @param extensions - 可选的文件扩展名过滤器\n * @returns 文件路径数组\n * @example\n * ```ts\n * const allFiles = await getFiles('./src')\n * const tsFiles = await getFiles('./src', ['.ts', '.tsx'])\n * ```\n * @public\n */\nexport async function getFiles(\n dirPath: string,\n extensions?: string[]\n): Promise<string[]> {\n const files: string[] = []\n\n async function traverse(currentPath: string) {\n const entries = await fs.readdir(currentPath, { withFileTypes: true })\n\n for (const entry of entries) {\n const fullPath = join(currentPath, entry.name)\n\n if (entry.isDirectory()) {\n await traverse(fullPath)\n } else if (entry.isFile()) {\n if (!extensions || extensions.some((ext) => entry.name.endsWith(ext))) {\n files.push(fullPath)\n }\n }\n }\n }\n\n await traverse(dirPath)\n return files\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 读取 JSON 文件\n * @param filePath - 文件路径\n * @returns 解析后的 JSON 数据\n * @example\n * ```ts\n * const data = await readJson('./config.json')\n * ```\n * @public\n */\nexport async function readJson<T = any>(filePath: string): Promise<T> {\n const content = await fs.readFile(filePath, 'utf-8')\n return JSON.parse(content)\n}\n","import { exists } from './exists'\nimport { readJson } from './readJson'\n\n/**\n * 如果文件存在则读取,否则返回默认值\n * @param filePath - 文件路径\n * @param defaultValue - 默认值\n * @returns 文件内容或默认值\n * @example\n * ```ts\n * const config = await readFileOrDefault('./config.json', { theme: 'light' })\n * ```\n * @public\n */\nexport async function readFileOrDefault<T>(\n filePath: string,\n defaultValue: T\n): Promise<T> {\n const isExist = await exists(filePath)\n if (!isExist) {\n return defaultValue\n }\n return readJson<T>(filePath)\n}\n","import { promises as fs } from 'fs'\nimport { join } from 'path'\n\n/**\n * 递归删除文件或目录\n * @param filePath - 文件或目录路径\n * @example\n * ```ts\n * await remove('./temp')\n * ```\n * @public\n */\nexport async function remove(filePath: string): Promise<void> {\n try {\n const stat = await fs.stat(filePath)\n if (stat.isDirectory()) {\n const files = await fs.readdir(filePath)\n await Promise.all(\n files.map(async (file) => {\n const fullPath = join(filePath, file)\n await remove(fullPath)\n })\n )\n await fs.rmdir(filePath)\n } else {\n await fs.unlink(filePath)\n }\n } catch {\n // File doesn't exist, ignore\n }\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 将数据写入 JSON 文件\n * @param filePath - 文件路径\n * @param data - 要写入的数据\n * @example\n * ```ts\n * await writeJson('./config.json', { name: 'test' })\n * ```\n * @public\n */\nexport async function writeJson(filePath: string, data: any): Promise<void> {\n const content = JSON.stringify(data, null, 2)\n await fs.writeFile(filePath, content, 'utf-8')\n}\n","/**\n * 获取环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值\n * @returns 环境变量值\n * @example\n * ```ts\n * const value = getEnv('API_URL', 'http://localhost:3000')\n * ```\n * @public\n */\nexport function getEnv(key: string, defaultValue?: string): string {\n return process.env[key] || defaultValue || ''\n}\n","/**\n * 获取布尔类型的环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值(默认: false)\n * @returns 布尔值\n * @example\n * ```ts\n * const enabled = getEnvBool('DEBUG', false)\n * // DEBUG=true 或 DEBUG=1 返回 true\n * // DEBUG=false 或 DEBUG=0 返回 false\n * ```\n * @public\n */\nexport function getEnvBool(key: string, defaultValue: boolean = false): boolean {\n const value = process.env[key]?.toLowerCase()\n if (value === 'true' || value === '1') return true\n if (value === 'false' || value === '0') return false\n return defaultValue\n}\n","/**\n * 获取当前环境模式(development、production、test)\n * @returns 环境模式\n * @example\n * ```ts\n * const mode = getEnvMode()\n * console.log(mode) // 'development' | 'production' | 'test'\n * ```\n * @public\n */\nexport function getEnvMode(): string {\n return process.env.NODE_ENV || 'development'\n}\n","/**\n * 获取数字类型的环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值(默认: 0)\n * @returns 数字值\n * @example\n * ```ts\n * const port = getEnvNumber('PORT', 3000)\n * ```\n * @public\n */\nexport function getEnvNumber(key: string, defaultValue: number = 0): number {\n const value = process.env[key]\n const parsed = value ? parseInt(value, 10) : NaN\n return isNaN(parsed) ? defaultValue : parsed\n}\n","/**\n * 检查环境变量是否已设置\n * @param key - 环境变量键\n * @returns 是否已设置\n * @example\n * ```ts\n * if (hasEnv('API_KEY')) {\n * console.log('API_KEY is set')\n * }\n * ```\n * @public\n */\nexport function hasEnv(key: string): boolean {\n return typeof process.env[key] !== 'undefined'\n}\n","import { getEnvMode } from './getEnvMode'\n\n/**\n * 检查当前环境是否为开发环境\n * @returns 是否为开发环境\n * @example\n * ```ts\n * if (isDevelopment()) {\n * console.log('Running in development mode')\n * }\n * ```\n * @public\n */\nexport function isDevelopment(): boolean {\n return getEnvMode() === 'development'\n}\n","import { getEnvMode } from './getEnvMode'\n\n/**\n * 检查当前环境是否为生产环境\n * @returns 是否为生产环境\n * @example\n * ```ts\n * if (isProduction()) {\n * console.log('Running in production mode')\n * }\n * ```\n * @public\n */\nexport function isProduction(): boolean {\n return getEnvMode() === 'production'\n}\n","/**\n * 退出当前进程\n * @param code - 退出码(默认: 0)\n * @returns never\n * @example\n * ```ts\n * exit(0) // 正常退出\n * exit(1) // 异常退出\n * ```\n * @public\n */\nexport function exit(code: number = 0): never {\n process.exit(code)\n}\n","/**\n * 获取当前工作目录\n * @returns 当前工作目录路径\n * @example\n * ```ts\n * const cwd = getCwd()\n * console.log(cwd) // '/path/to/current/directory'\n * ```\n * @public\n */\nexport function getCwd(): string {\n return process.cwd()\n}\n","/**\n * 获取内存使用信息\n * @returns 内存使用信息对象\n * @example\n * ```ts\n * const usage = getMemoryUsage()\n * console.log(usage)\n * // {\n * // rss: 12345678,\n * // heapTotal: 8765432,\n * // heapUsed: 4321098,\n * // external: 123456,\n * // arrayBuffers: 12345\n * // }\n * ```\n * @public\n */\nexport function getMemoryUsage(): NodeJS.MemoryUsage {\n return process.memoryUsage()\n}\n","/**\n * 获取 Node.js 版本\n * @returns Node.js 版本字符串\n * @example\n * ```ts\n * const version = getNodeVersion()\n * console.log(version) // 'v18.0.0'\n * ```\n * @public\n */\nexport function getNodeVersion(): string {\n return process.version\n}\n","/**\n * 获取进程 ID\n * @returns 进程 ID\n * @example\n * ```ts\n * const pid = getPid()\n * console.log(pid) // 12345\n * ```\n * @public\n */\nexport function getPid(): number {\n return process.pid\n}\n","/**\n * 获取当前平台\n * @returns 平台名称(win32、darwin、linux 等)\n * @example\n * ```ts\n * const platform = getPlatform()\n * console.log(platform) // 'win32' | 'darwin' | 'linux'\n * ```\n * @public\n */\nexport function getPlatform(): NodeJS.Platform {\n return process.platform\n}\n","/**\n * 获取进程运行时间(秒)\n * @returns 运行时间(秒)\n * @example\n * ```ts\n * const uptime = getUptime()\n * console.log(uptime) // 3600\n * ```\n * @public\n */\nexport function getUptime(): number {\n return process.uptime()\n}\n","/**\n * 检查当前平台是否为 Linux\n * @returns 是否为 Linux\n * @example\n * ```ts\n * if (isLinux()) {\n * console.log('Running on Linux')\n * }\n * ```\n * @public\n */\nexport function isLinux(): boolean {\n return process.platform === 'linux'\n}\n","/**\n * 检查当前平台是否为 macOS\n * @returns 是否为 macOS\n * @example\n * ```ts\n * if (isMac()) {\n * console.log('Running on macOS')\n * }\n * ```\n * @public\n */\nexport function isMac(): boolean {\n return process.platform === 'darwin'\n}\n","/**\n * 检查当前平台是否为 Windows\n * @returns 是否为 Windows\n * @example\n * ```ts\n * if (isWindows()) {\n * console.log('Running on Windows')\n * }\n * ```\n * @public\n */\nexport function isWindows(): boolean {\n return process.platform === 'win32'\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["fs","fs","fs","fs","fs","fs","fs"],"sources":["../src/fs/ensureDir.ts","../src/fs/copy.ts","../src/fs/exists.ts","../src/fs/getDirname.ts","../src/fs/getFiles.ts","../src/fs/readJson.ts","../src/fs/readFileOrDefault.ts","../src/fs/remove.ts","../src/fs/writeJson.ts","../src/env/getEnv.ts","../src/env/getEnvBool.ts","../src/env/getEnvMode.ts","../src/env/getEnvNumber.ts","../src/env/hasEnv.ts","../src/env/isDevelopment.ts","../src/env/isProduction.ts","../src/process/exit.ts","../src/process/getCwd.ts","../src/process/getMemoryUsage.ts","../src/process/getNodeVersion.ts","../src/process/getPid.ts","../src/process/getPlatform.ts","../src/process/getUptime.ts","../src/process/isLinux.ts","../src/process/isMac.ts","../src/process/isWindows.ts","../src/path/index.ts"],"sourcesContent":["import { promises as fs } from 'fs'\n\n/**\n * 确保目录存在,如果不存在则创建\n * @param dirPath - 目录路径\n * @example\n * ```ts\n * await ensureDir('./dist')\n * ```\n * @public\n */\nexport async function ensureDir(dirPath: string): Promise<void> {\n try {\n await fs.access(dirPath)\n } catch {\n await fs.mkdir(dirPath, { recursive: true })\n }\n}\n","import { promises as fs } from 'fs'\nimport { join, dirname } from 'path'\nimport { ensureDir } from './ensureDir'\n\n/**\n * 递归复制文件或目录\n * @param src - 源路径\n * @param dest - 目标路径\n * @example\n * ```ts\n * await copy('./src', './dist')\n * ```\n * @public\n */\nexport async function copy(src: string, dest: string): Promise<void> {\n const stat = await fs.stat(src)\n\n if (stat.isDirectory()) {\n await ensureDir(dest)\n const files = await fs.readdir(src)\n await Promise.all(\n files.map(async (file) => {\n const srcPath = join(src, file)\n const destPath = join(dest, file)\n await copy(srcPath, destPath)\n })\n )\n } else {\n await fs.mkdir(dirname(dest), { recursive: true })\n await fs.copyFile(src, dest)\n }\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 检查文件或目录是否存在\n * @param filePath - 文件或目录路径\n * @returns 是否存在\n * @example\n * ```ts\n * const isExist = await exists('./config.json')\n * ```\n * @public\n */\nexport async function exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath)\n return true\n } catch {\n return false\n }\n}\n","import { dirname } from 'path'\nimport { fileURLToPath } from 'url'\n\n/**\n * 获取当前模块的目录名\n * @param url - 模块的 URL\n * @returns 目录名\n * @example\n * ```ts\n * const __dirname = getDirname(import.meta.url)\n * ```\n * @public\n */\nexport function getDirname(url: string): string {\n return dirname(fileURLToPath(url))\n}\n","import { promises as fs } from 'fs'\nimport { join } from 'path'\n\n/**\n * 递归获取目录下的所有文件\n * @param dirPath - 目录路径\n * @param extensions - 可选的文件扩展名过滤器\n * @returns 文件路径数组\n * @example\n * ```ts\n * const allFiles = await getFiles('./src')\n * const tsFiles = await getFiles('./src', ['.ts', '.tsx'])\n * ```\n * @public\n */\nexport async function getFiles(\n dirPath: string,\n extensions?: string[]\n): Promise<string[]> {\n const files: string[] = []\n\n async function traverse(currentPath: string) {\n const entries = await fs.readdir(currentPath, { withFileTypes: true })\n\n for (const entry of entries) {\n const fullPath = join(currentPath, entry.name)\n\n if (entry.isDirectory()) {\n await traverse(fullPath)\n } else if (entry.isFile()) {\n if (!extensions || extensions.some((ext) => entry.name.endsWith(ext))) {\n files.push(fullPath)\n }\n }\n }\n }\n\n await traverse(dirPath)\n return files\n}\n","import { promises as fs } from 'fs'\n\n/**\n * 读取 JSON 文件\n * @param filePath - 文件路径\n * @returns 解析后的 JSON 数据\n * @example\n * ```ts\n * const data = await readJson('./config.json')\n * ```\n * @public\n */\nexport async function readJson<T = any>(filePath: string): Promise<T> {\n try {\n const data = await fs.readFile(filePath, 'utf8');\n return JSON.parse(data);\n } catch (error) {\n console.error('Error reading JSON file:', error);\n throw error;\n }\n}\n","import { exists } from './exists'\nimport { readJson } from './readJson'\n\n/**\n * 如果文件存在则读取,否则返回默认值\n * @param filePath - 文件路径\n * @param defaultValue - 默认值\n * @returns 文件内容或默认值\n * @example\n * ```ts\n * const config = await readFileOrDefault('./config.json', { theme: 'light' })\n * ```\n * @public\n */\nexport async function readFileOrDefault<T>(\n filePath: string,\n defaultValue: T\n): Promise<T> {\n const isExist = await exists(filePath)\n if (!isExist) {\n return defaultValue\n }\n return readJson<T>(filePath)\n}\n","import { promises as fs } from 'fs'\nimport { join } from 'path'\n\n/**\n * 递归删除文件或目录\n * @param filePath - 文件或目录路径\n * @example\n * ```ts\n * await remove('./temp')\n * ```\n * @public\n */\nexport async function remove(filePath: string): Promise<void> {\n try {\n const stat = await fs.stat(filePath)\n if (stat.isDirectory()) {\n const files = await fs.readdir(filePath)\n await Promise.all(\n files.map(async (file) => {\n const fullPath = join(filePath, file)\n await remove(fullPath)\n })\n )\n await fs.rmdir(filePath)\n } else {\n await fs.unlink(filePath)\n }\n } catch {\n // File doesn't exist, ignore\n }\n}\n","import { promises as fs } from 'fs'\nimport {dirname} from \"node:path\";\n\n/**\n * 将数据写入 JSON 文件\n * @param filePath - 文件路径\n * @param data - 要写入的数据\n * @param spaces - 缩进空格数\n * @example\n * ```ts\n * await writeJson('./config.json', { name: 'test' })\n * ```\n * @public\n */\nexport async function writeJson(filePath: string, data: any,spaces: number = 2,): Promise<void> {\n try {\n const dir = dirname(filePath);\n await fs.mkdir(dir, { recursive: true });\n const jsonData = JSON.stringify(data, null, spaces);\n await fs.writeFile(filePath, jsonData, 'utf8');\n } catch (error) {\n console.error('Error writing JSON file:', error);\n throw error;\n }\n}\n","/**\n * 获取环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值\n * @returns 环境变量值\n * @example\n * ```ts\n * const value = getEnv('API_URL', 'http://localhost:3000')\n * ```\n * @public\n */\nexport function getEnv(key: string, defaultValue?: string): string {\n return process.env[key] || defaultValue || ''\n}\n","/**\n * 获取布尔类型的环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值(默认: false)\n * @returns 布尔值\n * @example\n * ```ts\n * const enabled = getEnvBool('DEBUG', false)\n * // DEBUG=true 或 DEBUG=1 返回 true\n * // DEBUG=false 或 DEBUG=0 返回 false\n * ```\n * @public\n */\nexport function getEnvBool(key: string, defaultValue: boolean = false): boolean {\n const value = process.env[key]?.toLowerCase()\n if (value === 'true' || value === '1') return true\n if (value === 'false' || value === '0') return false\n return defaultValue\n}\n","/**\n * 获取当前环境模式(development、production、test)\n * @returns 环境模式\n * @example\n * ```ts\n * const mode = getEnvMode()\n * console.log(mode) // 'development' | 'production' | 'test'\n * ```\n * @public\n */\nexport function getEnvMode(): string {\n return process.env.NODE_ENV || 'development'\n}\n","/**\n * 获取数字类型的环境变量\n * @param key - 环境变量键\n * @param defaultValue - 默认值(默认: 0)\n * @returns 数字值\n * @example\n * ```ts\n * const port = getEnvNumber('PORT', 3000)\n * ```\n * @public\n */\nexport function getEnvNumber(key: string, defaultValue: number = 0): number {\n const value = process.env[key]\n const parsed = value ? parseInt(value, 10) : NaN\n return isNaN(parsed) ? defaultValue : parsed\n}\n","/**\n * 检查环境变量是否已设置\n * @param key - 环境变量键\n * @returns 是否已设置\n * @example\n * ```ts\n * if (hasEnv('API_KEY')) {\n * console.log('API_KEY is set')\n * }\n * ```\n * @public\n */\nexport function hasEnv(key: string): boolean {\n return typeof process.env[key] !== 'undefined'\n}\n","import { getEnvMode } from './getEnvMode'\n\n/**\n * 检查当前环境是否为开发环境\n * @returns 是否为开发环境\n * @example\n * ```ts\n * if (isDevelopment()) {\n * console.log('Running in development mode')\n * }\n * ```\n * @public\n */\nexport function isDevelopment(): boolean {\n return getEnvMode() === 'development'\n}\n","import { getEnvMode } from './getEnvMode'\n\n/**\n * 检查当前环境是否为生产环境\n * @returns 是否为生产环境\n * @example\n * ```ts\n * if (isProduction()) {\n * console.log('Running in production mode')\n * }\n * ```\n * @public\n */\nexport function isProduction(): boolean {\n return getEnvMode() === 'production'\n}\n","/**\n * 退出当前进程\n * @param code - 退出码(默认: 0)\n * @returns never\n * @example\n * ```ts\n * exit(0) // 正常退出\n * exit(1) // 异常退出\n * ```\n * @public\n */\nexport function exit(code: number = 0): never {\n process.exit(code)\n}\n","/**\n * 获取当前工作目录\n * @returns 当前工作目录路径\n * @example\n * ```ts\n * const cwd = getCwd()\n * console.log(cwd) // '/path/to/current/directory'\n * ```\n * @public\n */\nexport function getCwd(): string {\n return process.cwd()\n}\n","/**\n * 获取内存使用信息\n * @returns 内存使用信息对象\n * @example\n * ```ts\n * const usage = getMemoryUsage()\n * console.log(usage)\n * // {\n * // rss: 12345678,\n * // heapTotal: 8765432,\n * // heapUsed: 4321098,\n * // external: 123456,\n * // arrayBuffers: 12345\n * // }\n * ```\n * @public\n */\nexport function getMemoryUsage(): NodeJS.MemoryUsage {\n return process.memoryUsage()\n}\n","/**\n * 获取 Node.js 版本\n * @returns Node.js 版本字符串\n * @example\n * ```ts\n * const version = getNodeVersion()\n * console.log(version) // 'v18.0.0'\n * ```\n * @public\n */\nexport function getNodeVersion(): string {\n return process.version\n}\n","/**\n * 获取进程 ID\n * @returns 进程 ID\n * @example\n * ```ts\n * const pid = getPid()\n * console.log(pid) // 12345\n * ```\n * @public\n */\nexport function getPid(): number {\n return process.pid\n}\n","/**\n * 获取当前平台\n * @returns 平台名称(win32、darwin、linux 等)\n * @example\n * ```ts\n * const platform = getPlatform()\n * console.log(platform) // 'win32' | 'darwin' | 'linux'\n * ```\n * @public\n */\nexport function getPlatform(): NodeJS.Platform {\n return process.platform\n}\n","/**\n * 获取进程运行时间(秒)\n * @returns 运行时间(秒)\n * @example\n * ```ts\n * const uptime = getUptime()\n * console.log(uptime) // 3600\n * ```\n * @public\n */\nexport function getUptime(): number {\n return process.uptime()\n}\n","/**\n * 检查当前平台是否为 Linux\n * @returns 是否为 Linux\n * @example\n * ```ts\n * if (isLinux()) {\n * console.log('Running on Linux')\n * }\n * ```\n * @public\n */\nexport function isLinux(): boolean {\n return process.platform === 'linux'\n}\n","/**\n * 检查当前平台是否为 macOS\n * @returns 是否为 macOS\n * @example\n * ```ts\n * if (isMac()) {\n * console.log('Running on macOS')\n * }\n * ```\n * @public\n */\nexport function isMac(): boolean {\n return process.platform === 'darwin'\n}\n","/**\n * 检查当前平台是否为 Windows\n * @returns 是否为 Windows\n * @example\n * ```ts\n * if (isWindows()) {\n * console.log('Running on Windows')\n * }\n * ```\n * @public\n */\nexport function isWindows(): boolean {\n return process.platform === 'win32'\n}\n","import { posix } from 'node:path';\n\n/**\n * 将给定的文件路径转换为 POSIX 风格。\n *\n * @param pathname - 原始文件路径,可以是 Windows 风格或 POSIX 风格\n * @returns 转换后的 POSIX 风格路径,所有反斜杠 `\\` 替换为正斜杠 `/`\n *\n * @example\n * ```ts\n * // Windows 路径转换为 POSIX\n * toPosixPath('C:\\\\Users\\\\name\\\\file.txt'); // 'C:/Users/name/file.txt'\n *\n * @example\n * ```ts\n * // 混合路径转换\n * toPosixPath('folder\\\\subfolder/file.txt'); // 'folder/subfolder/file.txt'\n *\n * @example\n * ```ts\n * // 已是 POSIX 风格的路径保持不变\n * toPosixPath('/home/user/docs/file.txt'); // '/home/user/docs/file.txt'\n * ```\n */\nfunction toPosixPath(pathname: string) {\n return pathname.split(`\\\\`).join(posix.sep);\n}\n\nexport { toPosixPath };\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@longmo-utils/node",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Node.js-specific utility functions with file system dependencies",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",