dnmp 0.0.0-alpha.0.3 → 0.0.0-alpha.0.5

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/cli.mjs CHANGED
@@ -5,12 +5,12 @@ import { readFile, writeFile } from "node:fs/promises";
5
5
  import { resolve } from "node:path";
6
6
  import { cancel, confirm, intro, isCancel, outro, select, text } from "@clack/prompts";
7
7
  import { findUp } from "find-up";
8
- import fs, { readFileSync } from "node:fs";
8
+ import { readFileSync } from "node:fs";
9
9
  import { glob } from "glob";
10
10
  import { parse } from "yaml";
11
11
  import boxen from "boxen";
12
- import { createJiti } from "jiti";
13
12
  import { x } from "tinyexec";
13
+ import { createJiti } from "jiti";
14
14
  import semver from "semver";
15
15
 
16
16
  //#region rolldown:runtime
@@ -110,52 +110,54 @@ var require_picocolors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
110
110
  }));
111
111
 
112
112
  //#endregion
113
- //#region src/constant.ts
113
+ //#region src/runCommand.ts
114
114
  var import_picocolors = /* @__PURE__ */ __toESM(require_picocolors());
115
- const CACHE_FOLDER_NAME = ".cache";
116
- const CACHE_FILE_NAME = "token.ts";
117
- const CACHE_TOKEN_FILE_PATH = `${CACHE_FOLDER_NAME}/${CACHE_FILE_NAME}`;
118
- const CUSTOM_RELEASE_PREFIX = "custom";
119
- const CANCEL_PROCESS = "Current operation canceled.";
120
-
121
- //#endregion
122
- //#region src/utils.ts
123
- const checkDirExist = (dirPath) => {
124
- return fs.existsSync(dirPath);
125
- };
126
- const createDir = (dirPath) => {
127
- if (!checkDirExist(dirPath)) fs.mkdirSync(dirPath);
128
- };
129
- const printWarning = (message) => console.log(boxen(message, {
130
- title: "Warning",
131
- padding: 1,
132
- borderStyle: "round",
133
- borderColor: "yellow"
134
- }));
135
- const isCancelProcess = (value, message = CANCEL_PROCESS) => {
136
- if (isCancel(value)) {
137
- cancel(message);
138
- return process.exit(0);
139
- }
140
- };
141
- const loaderTs = async (path) => {
142
- return await createJiti(path).import(path, { default: true });
115
+ const runCommand = async (config, command, args) => {
116
+ await x(command, args, { nodeOptions: {
117
+ stdio: "inherit",
118
+ cwd: config.cwd
119
+ } });
143
120
  };
144
121
 
145
122
  //#endregion
146
123
  //#region src/token.ts
147
124
  const setToken = async (config, token$1) => {
148
- createDir(resolve(config.cwd, CACHE_FOLDER_NAME));
149
- await writeFile(config.token.file, `export default "${token$1}"`);
125
+ await runCommand(config, "npm", [
126
+ "config",
127
+ "set",
128
+ "//registry.npmjs.org/:_authToken",
129
+ token$1
130
+ ]);
150
131
  };
151
132
  const loaderToken = async (config) => {
152
- return await loaderTs(config.token.file);
133
+ const [, tokenValue] = (await readFile((await x("npm", [
134
+ "config",
135
+ "get",
136
+ "userconfig"
137
+ ], { nodeOptions: {
138
+ cwd: config.cwd,
139
+ stdio: "pipe"
140
+ } })).stdout.trim(), "utf-8")).match(/\/\/registry.npmjs.org\/:_authToken=(.*)/) || [];
141
+ const token$1 = tokenValue?.trim() || null;
142
+ if (!token$1) {
143
+ console.log(boxen(`_authToken not found in your .npmrc file,
144
+ you can use the following codemod:
145
+ Run "dnmp set <token> or npm config set //registry.npmjs.org/:_authToken=<token>"`, {
146
+ title: "Warning",
147
+ padding: 1,
148
+ margin: 0,
149
+ borderStyle: "round",
150
+ borderColor: "yellow"
151
+ }));
152
+ process$1.exit(0);
153
+ }
154
+ return token$1;
153
155
  };
154
156
 
155
157
  //#endregion
156
158
  //#region package.json
157
159
  var name = "dnmp";
158
- var version = "0.0.0-alpha.0.3";
160
+ var version = "0.0.0-alpha.0.5";
159
161
 
160
162
  //#endregion
161
163
  //#region src/config.ts
@@ -163,11 +165,7 @@ const CURRENT_PATH = resolve(import.meta.dirname, "../");
163
165
  const defaultConfig = {
164
166
  root: "",
165
167
  cwd: "",
166
- token: {
167
- name: "token.ts",
168
- file: resolve(CURRENT_PATH, `${CACHE_TOKEN_FILE_PATH}`),
169
- value: ""
170
- },
168
+ token: "",
171
169
  release: "",
172
170
  currentVersion: "",
173
171
  monorepo: {
@@ -195,7 +193,7 @@ const isMonorepo = async (config) => {
195
193
  packageContexts: [],
196
194
  packages: []
197
195
  };
198
- const is = !!(workspacePath ? parse(readFileSync(workspacePath, "utf-8")) : { packages: [] })?.packages.length;
196
+ const is = !!(workspacePath ? parse(readFileSync(workspacePath, "utf-8")) : { packages: [] })?.packages?.length || false;
199
197
  const { packages: workSpacePackages } = parse(readFileSync(workspacePath, "utf-8"));
200
198
  let packages = [];
201
199
  let packageContexts = [];
@@ -228,12 +226,20 @@ const resolveConfig = async () => {
228
226
  cwd: process$2.cwd(),
229
227
  root: CURRENT_PATH
230
228
  }));
231
- config.token.value = await loaderToken(config) || "";
229
+ config.token = await loaderToken(config) || "";
232
230
  config.monorepo = await isMonorepo(config);
233
231
  config.packages = resolve(config.cwd, "package.json");
234
232
  return config;
235
233
  };
236
234
 
235
+ //#endregion
236
+ //#region src/constant.ts
237
+ const CACHE_FOLDER_NAME = ".cache";
238
+ const CACHE_FILE_NAME = "token.ts";
239
+ const CACHE_TOKEN_FILE_PATH = `${CACHE_FOLDER_NAME}/${CACHE_FILE_NAME}`;
240
+ const CUSTOM_RELEASE_PREFIX = "custom";
241
+ const CANCEL_PROCESS = "Current operation canceled.";
242
+
237
243
  //#endregion
238
244
  //#region src/git.ts
239
245
  const gitCommit = async (config) => {
@@ -272,6 +278,24 @@ const updateFiles = async (config) => {
272
278
  else await updatePackageJson(config.packages, config.release);
273
279
  };
274
280
 
281
+ //#endregion
282
+ //#region src/utils.ts
283
+ const printWarning = (message) => console.log(boxen(message, {
284
+ title: "Warning",
285
+ padding: 1,
286
+ borderStyle: "round",
287
+ borderColor: "yellow"
288
+ }));
289
+ const isCancelProcess = (value, message = CANCEL_PROCESS) => {
290
+ if (isCancel(value)) {
291
+ cancel(message);
292
+ return process.exit(0);
293
+ }
294
+ };
295
+ const loaderTs = async (path) => {
296
+ return await createJiti(path).import(path, { default: true });
297
+ };
298
+
275
299
  //#endregion
276
300
  //#region src/version/current.ts
277
301
  const getCurrentVersion = async (config) => {
@@ -487,7 +511,7 @@ const updateAllPackagesVersion = async (config) => {
487
511
  const bumpVersion = async () => {
488
512
  const config = await resolveConfig();
489
513
  intro(import_picocolors.default.bgCyan(` dnmp ${version} `));
490
- if (!config.token.value) {
514
+ if (!config.token) {
491
515
  outro("请先设置 release token");
492
516
  return process$1.exit(0);
493
517
  }
@@ -497,12 +521,6 @@ const bumpVersion = async () => {
497
521
  await getCurrentVersion(config);
498
522
  await promptForNewVersion(config);
499
523
  }
500
- console.log("npm", [
501
- "publish",
502
- `--//registry.npmjs.org/:_authToken=${config.token.value}`,
503
- "--access",
504
- "public"
505
- ].join(" "));
506
524
  const isConfirmUpdate = await confirm({
507
525
  message: "是否确认更新 package.json ?",
508
526
  initialValue: true
@@ -515,6 +533,12 @@ const bumpVersion = async () => {
515
533
  await updateFiles(config);
516
534
  await gitCommit(config);
517
535
  await gitTags(config);
536
+ await runCommand(config, "npm", [
537
+ "publish",
538
+ `--//registry.npmjs.org/:_authToken=${config.token}`,
539
+ "--access",
540
+ "public"
541
+ ]);
518
542
  outro("Done.");
519
543
  };
520
544
 
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":["token","defaultConfig: IConfigOptions","packageContexts: IPackageContexts[]","process","version","version","DEFAULT_STYLE: UIStyle","pc","UI_STYLE_MAP: Record<string, UIStyle>","finalVersion: string","pc","resolvePackage: IUpdatePackages","process","token","error: any","setToken","token","error: any"],"sources":["../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js","../src/constant.ts","../src/utils.ts","../src/token.ts","../package.json","../src/config.ts","../src/git.ts","../src/update-files.ts","../src/version/current.ts","../src/version/new.version.ts","../src/command/bump.ts","../src/command/token.ts","../src/cli.ts"],"sourcesContent":["let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","export const CACHE_FOLDER_NAME = '.cache'\nexport const CACHE_FILE_NAME = 'token.ts'\nexport const CACHE_TOKEN_FILE_PATH = `${CACHE_FOLDER_NAME}/${CACHE_FILE_NAME}`\nexport const CUSTOM_RELEASE_PREFIX = 'custom'\nexport const CANCEL_PROCESS = 'Current operation canceled.'\n","import fs from 'node:fs'\nimport { cancel, isCancel } from '@clack/prompts'\nimport boxen from 'boxen'\nimport { createJiti } from 'jiti'\nimport { CANCEL_PROCESS } from '@/constant.ts'\n\nexport const checkDirExist = (dirPath: string) => {\n return fs.existsSync(dirPath)\n}\n\nexport const createDir = (dirPath: string) => {\n if (!checkDirExist(dirPath)) {\n fs.mkdirSync(dirPath)\n }\n}\n\nexport const printWarning = (message: string) =>\n console.log(boxen(message, {\n title: 'Warning',\n padding: 1,\n borderStyle: 'round',\n borderColor: 'yellow',\n }))\n\nexport const isCancelProcess = (value: unknown, message: string = CANCEL_PROCESS) => {\n if (isCancel(value)) {\n cancel(message)\n return process.exit(0)\n }\n}\n\nexport const loaderTs = async (path: string): Promise<string> => {\n const loader = createJiti(path)\n return await loader.import(path, { default: true })\n}\n","import type { IConfigOptions } from '@/types'\nimport { writeFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { CACHE_FOLDER_NAME } from '@/constant.ts'\nimport { createDir, loaderTs } from '@/utils.ts'\n\nexport const setToken = async (config: IConfigOptions, token: string): Promise<void> => {\n createDir(resolve(config.cwd, CACHE_FOLDER_NAME))\n await writeFile(config.token.file, `export default \"${token}\"`)\n}\n\nexport const loaderToken = async (config: IConfigOptions): Promise<string> => {\n return await loaderTs(config.token.file)\n}\n","","import type { IConfigOptions, IPackage, IPackageContexts } from '@/types'\nimport { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport * as process from 'node:process'\nimport { findUp } from 'find-up'\nimport { glob } from 'glob'\nimport { parse } from 'yaml'\nimport { CACHE_TOKEN_FILE_PATH } from '@/constant.ts'\nimport { loaderToken } from '@/token.ts'\nimport { name } from '../package.json'\n\nconst CURRENT_PATH = resolve(import.meta.dirname, '../')\n\nconst defaultConfig: IConfigOptions = {\n root: '',\n cwd: '',\n token: {\n name: 'token.ts',\n file: resolve(CURRENT_PATH, `${CACHE_TOKEN_FILE_PATH}`),\n value: '',\n },\n release: '',\n currentVersion: '',\n monorepo: {\n is: false,\n workspacePath: '',\n packages: [],\n packageContexts: [],\n updatePackages: [],\n },\n packages: '',\n}\n\nconst collectPackageFiles = async (config: IConfigOptions, packages: string[]) => {\n const files = ['package.json']\n files.push(...await glob(packages, {\n cwd: config.cwd,\n ignore: ['**/node_modules/**'],\n }))\n\n return [...files]\n}\n\nexport const isMonorepo = async (\n config: IConfigOptions,\n): Promise<IConfigOptions['monorepo']> => {\n const workspacePath = await findUp('pnpm-workspace.yaml', {\n cwd: config.cwd,\n }) as string\n\n if (!workspacePath) {\n return {\n is: false,\n workspacePath: '',\n packageContexts: [],\n packages: [],\n }\n }\n\n const workspaceYaml = workspacePath ? parse(readFileSync(workspacePath, 'utf-8')) : { packages: [] }\n\n const is = !!workspaceYaml?.packages.length\n\n const { packages: workSpacePackages } = parse(readFileSync(workspacePath, 'utf-8'))\n\n let packages = []\n let packageContexts: IPackageContexts[] = []\n if (workSpacePackages) {\n packages = workSpacePackages.map(\n (item: string) =>\n item.indexOf('*')\n ? `${item.replace('/*', '')}/**/package.json`\n : `${item}/**/package.json`,\n )\n\n const packageFiles = await collectPackageFiles(config, packages)\n packageContexts = packageFiles.map((file) => {\n const files = JSON.parse(readFileSync(resolve(config.cwd, file), 'utf-8')) as IPackage\n\n return {\n name: `${files.name}`,\n file,\n version: files?.version || '',\n context: files,\n }\n }) as IPackageContexts[]\n }\n\n return {\n is,\n workspacePath,\n packageContexts,\n packages,\n }\n}\n\nexport const resolveConfig = async (): Promise<IConfigOptions> => {\n const { loadConfig } = await import('c12')\n\n const config = await loadConfig<IConfigOptions>({\n name,\n defaultConfig,\n }).then(r => ({\n ...r.config,\n cwd: process.cwd(),\n root: CURRENT_PATH,\n }))\n\n config.token.value = await loaderToken(config) || ''\n\n config.monorepo = await isMonorepo(config)\n\n config.packages = resolve(config.cwd, 'package.json')\n\n return config\n}\n","import type { IConfigOptions } from '@/types'\nimport { x } from 'tinyexec'\n\nexport const gitCommit = async (config: IConfigOptions) => {\n const args = []\n\n args.push('--message', `release: v${config.release}`)\n\n args.push('--allow-empty')\n\n // if (typeof config.packages === 'object') {\n // args.push(config.packages.map(r => basename(r)).join(' '))\n // }\n // else {\n args.push(config.packages)\n // }\n\n await x('git', ['commit', ...args], {\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n}\n\nexport const gitTags = async (config: IConfigOptions) => {\n await x('git', [\n 'tag',\n '--annotate',\n '--message',\n '',\n `v${config.release}`,\n ], {\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n}\n\nexport const gitPush = async (config: IConfigOptions) => {\n await x('git', ['push', '--tags'], {\n throwOnError: true,\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n}\n","import type { IConfigOptions } from '@/types'\nimport { readFile, writeFile } from 'node:fs/promises'\n\nconst JSON_SPACING = 2\n\nconst updatePackageJson = async (path: string, version: string) => {\n const updatePackage = JSON.parse(await readFile(path, 'utf-8'))\n updatePackage.version = version\n await writeFile(path, JSON.stringify(updatePackage, null, JSON_SPACING))\n}\n\nexport const updateFiles = async (config: IConfigOptions) => {\n if (config.monorepo.is) {\n for (const pkg of config.monorepo.updatePackages!) {\n await updatePackageJson(pkg.path, pkg.newVersion)\n }\n }\n else {\n await updatePackageJson(config.packages, config.release)\n }\n}\n","import type { IConfigOptions } from '@/types'\nimport { readFile } from 'node:fs/promises'\n\nexport const getCurrentVersion = async (config: IConfigOptions) => {\n const { packages } = config\n\n if (typeof packages === 'object') {\n // TODO load monorepo package version\n }\n else {\n const manifest = JSON.parse(await readFile(packages, {\n encoding: 'utf-8',\n })) as {\n version?: string\n }\n\n config.currentVersion = manifest.version || ''\n }\n}\n","import type { releaseType, ReleaseTypes } from '@/release-type.ts'\nimport type { IConfigOptions, IUpdatePackages } from '@/types'\nimport { cancel, isCancel, select, text } from '@clack/prompts'\nimport pc from 'picocolors'\nimport semver from 'semver'\nimport { CUSTOM_RELEASE_PREFIX } from '@/constant.ts'\nimport { isCancelProcess } from '@/utils.ts'\n\n// https://semver.org/\n\nconst PADDING = 13\nexport const validateVersion = (version: string) => !!semver.valid(version)\n\ninterface UIStyle {\n label: string\n color: (t: string) => string\n}\n\nconst DEFAULT_STYLE: UIStyle = { label: 'next', color: pc.cyan }\n\nconst UI_STYLE_MAP: Record<string, UIStyle> = {\n major: { label: 'major', color: pc.cyan },\n minor: { label: 'minor', color: pc.cyan },\n patch: { label: 'patch', color: pc.cyan },\n next: { label: 'next', color: pc.cyan },\n rc: { label: 'rc', color: pc.green },\n beta: { label: 'pre-beta', color: pc.magenta },\n alpha: { label: 'alpha', color: pc.yellow },\n}\n\n// --- 工具函数 ---\n\n/**\n * 核心逻辑:增量处理预发布版本\n * 解决 TS2345: 使用 readonly 修饰符接受 semver 的返回类型\n */\nconst processIncrementalPre = (preParts: readonly (string | number)[], base: string, prefix: string, expectedLen: number, fallback: string): string => {\n if (preParts[0] !== prefix) {\n return `${base}-${fallback}`\n }\n\n const newPre = [...preParts].slice(0, expectedLen)\n while (newPre.length < expectedLen) {\n newPre.push(0)\n }\n\n const lastIdx = expectedLen - 1\n const lastVal = newPre[lastIdx]\n const numericVal = typeof lastVal === 'number' ? lastVal : Number.parseInt(String(lastVal), 10)\n\n const isExtension = preParts.length < expectedLen\n // 逻辑:如果是补位产生的 0,则起始为 1;如果是已有的数字,则递增\n newPre[lastIdx] = isExtension ? 1 : (Number.isNaN(numericVal) ? 1 : numericVal + 1)\n\n return `${base}-${newPre.join('.')}`\n}\n\nexport const getNextVersions = (version: string): ReleaseTypes => {\n const s = semver.parse(version)\n if (!s)\n throw new Error(`[Invalid SemVer]: ${version}`)\n\n const { major: M, minor: m, patch: p, prerelease: pre } = s\n const base = `${M}.${m}.${p}`\n\n return {\n 'major': `${M + 1}.0.0`,\n 'minor': `${M}.${m + 1}.0`,\n 'patch': `${M}.${m}.${p + 1}`,\n 'next': `${M}.${m}.${p + 1}`,\n 'rc': processIncrementalPre(pre, base, 'rc', 2, 'rc.1'),\n 'beta-major': processIncrementalPre(pre, base, 'beta', 2, 'beta.1'),\n 'beta-minor': processIncrementalPre(pre, base, 'beta', 3, 'beta.0.1'),\n 'beta-patch': processIncrementalPre(pre, base, 'beta', 4, 'beta.0.0.1'),\n 'pre-beta': `${base}-beta`,\n 'alpha-beta': `${base}-alpha.beta`,\n 'alpha-major': processIncrementalPre(pre, base, 'alpha', 2, 'alpha.1'),\n 'alpha-minor': processIncrementalPre(pre, base, 'alpha', 3, 'alpha.0.1'),\n 'alpha-patch': processIncrementalPre(pre, base, 'alpha', 4, 'alpha.0.0.1'),\n }\n}\n\nexport async function promptForNewVersion(config: IConfigOptions): Promise<string | void>\nexport async function promptForNewVersion(config: IConfigOptions, pkg: IUpdatePackages, index: number): Promise<string | void>\nexport async function promptForNewVersion(config: IConfigOptions, pkg?: IUpdatePackages, index?: number): Promise<string | void> {\n const version = config.monorepo.is && pkg !== undefined ? pkg.newVersion : config.currentVersion\n\n const next = getNextVersions(version)\n\n // 动态生成选项\n const options = (Object.keys(next) as releaseType[]).map((key) => {\n const versionStr = next[key]\n\n // 1. 获取前缀(如 'alpha')\n const prefix = key.split('-')[0] ?? 'next'\n\n // 2. 彻底解决 TS18048: 即使 prefix 在 Map 里,TS 仍认为可能返回 undefined\n // 使用空值合并运算符 (??) 确保 style 永远是 UIStyle 类型\n const style = UI_STYLE_MAP[prefix] ?? DEFAULT_STYLE\n\n const label = style.label.padStart(PADDING, ' ')\n\n // 渲染版本颜色,同样处理关键字匹配的安全性\n const coloredVersion = versionStr.replace(/(rc|beta|alpha)/g, (match) => {\n const matchStyle = UI_STYLE_MAP[match] ?? DEFAULT_STYLE\n return matchStyle.color(match)\n })\n\n return {\n value: key as string,\n label: `${label} ${coloredVersion}`,\n }\n })\n\n options.push({\n value: CUSTOM_RELEASE_PREFIX,\n label: `${'custom'.padStart(PADDING, ' ')} ...`,\n })\n\n const release = await select({\n message: `Current version ${pc.bold(version)}`,\n options,\n initialValue: 'next',\n }) as releaseType | 'custom'\n\n isCancelProcess(release)\n\n let finalVersion: string\n\n if (release === CUSTOM_RELEASE_PREFIX) {\n const custom = await text({\n message: 'Enter the new version number',\n validate: val => !validateVersion(val) ? 'Invalid semver' : undefined,\n }) as string\n\n if (isCancel(custom)) {\n cancel('No version entered')\n return process.exit(0)\n }\n finalVersion = custom\n }\n else {\n // 这里的 release 已经排除了 CUSTOM 且必定属于 releaseType\n finalVersion = next[release]\n }\n\n if (\n config.monorepo.is\n && pkg !== undefined\n && index !== undefined\n && Array.isArray(config.monorepo.updatePackages)\n ) {\n config.monorepo.updatePackages[index]!.newVersion = finalVersion\n }\n else {\n config.release = finalVersion\n }\n}\n","import type { IConfigOptions, IPackageContexts, IUpdatePackages } from '@/types'\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport process from 'node:process'\nimport { confirm, intro, outro, select } from '@clack/prompts'\nimport { findUp } from 'find-up'\nimport pc from 'picocolors'\nimport { resolveConfig } from '@/config.ts'\nimport { CANCEL_PROCESS } from '@/constant.ts'\nimport { gitCommit, gitTags } from '@/git.ts'\nimport { updateFiles } from '@/update-files.ts'\nimport { isCancelProcess, loaderTs } from '@/utils.ts'\nimport { getCurrentVersion } from '@/version/current.ts'\nimport { promptForNewVersion } from '@/version/new.version.ts'\nimport { version } from '../../package.json'\n\n/**\n * 创建包选择选项\n */\nconst createPackageOptions = (packageContexts: IPackageContexts[]) => {\n return packageContexts.map((file) => {\n return {\n value: file.name,\n label: file.name,\n hint: `${pc.red(file.version)} - ${file.file}`,\n }\n })\n}\n\n/**\n * 处理单个包的选择流程\n */\nconst processPackageSelection = async (\n config: IConfigOptions,\n selectedPackageName: string,\n packageContexts: IPackageContexts[],\n): Promise<void> => {\n const selectedPackage = packageContexts.find(opt => opt.name === selectedPackageName) as IPackageContexts\n\n const resolvePackage: IUpdatePackages = {\n name: selectedPackageName,\n path: resolve(config.cwd, selectedPackage.file),\n currentVersion: selectedPackage.version,\n newVersion: selectedPackage.version,\n };\n\n (config.monorepo.updatePackages ??= []).push(resolvePackage)\n\n await promptForNewVersion(config, resolvePackage, config.monorepo.updatePackages.length - 1)\n}\n\n/**\n * 处理 monorepo 包的选择逻辑\n */\nconst handleMonorepoPackageSelection = async (config: IConfigOptions): Promise<void> => {\n const options = createPackageOptions(config.monorepo.packageContexts)\n let availableOptions = [...options]\n\n while (availableOptions.length > 0) {\n const selectedPackage = await select({\n message: '请选择要升级版本的包:',\n options: availableOptions,\n }) as string\n\n isCancelProcess(selectedPackage)\n\n await processPackageSelection(config, selectedPackage, config.monorepo.packageContexts)\n\n // 从可用选项中移除已选择的包\n availableOptions = availableOptions.filter(opt => opt.value !== selectedPackage)\n\n if (availableOptions.length > 0) {\n const continueSelection = await confirm({\n message: '是否继续选择其他包?',\n initialValue: true,\n })\n isCancelProcess(continueSelection)\n\n if (!continueSelection) {\n break\n }\n }\n }\n}\n\n/**\n * 获取缓存文件路径\n */\nconst getCachePath = async (cwd: string): Promise<string | null> => {\n const path = await findUp('node_modules/.cache/dnmp.ts', {\n cwd,\n })\n return path || null\n}\n\n/**\n * 读取或设置统一更新版本选项\n */\nconst getOrUpdateAllUpdateVersion = async (config: IConfigOptions): Promise<boolean> => {\n const cachePath = await getCachePath(config.cwd)\n\n if (cachePath) {\n return Boolean(await loaderTs(cachePath))\n }\n\n const allUpdateVersion = await confirm({\n message: '是否以根 package.json 为主版本统一更新 workspace 所有版本',\n initialValue: true,\n }) as boolean\n\n isCancelProcess(allUpdateVersion, CANCEL_PROCESS)\n\n const cacheFilePath = resolve(config.cwd, './node_modules/.cache/dnmp.ts')\n await writeFile(cacheFilePath, `export default ${allUpdateVersion}`)\n\n return allUpdateVersion\n}\n\n/**\n * 读取包文件内容\n */\nconst readPackageFile = async (filePath: string): Promise<{ version: string }> => {\n return JSON.parse(await readFile(filePath, 'utf-8')) as { version: string }\n}\n\n/**\n * 统一更新所有包的版本\n */\nconst updateAllPackagesVersion = async (config: IConfigOptions): Promise<void> => {\n const pkg = await readPackageFile(config.packages)\n config.currentVersion = pkg.version\n\n await promptForNewVersion(config)\n\n for (const item of config.monorepo.packageContexts) {\n const resolvePkgPath = resolve(config.cwd, item.file)\n const packageInfo = await readPackageFile(resolvePkgPath);\n\n (config.monorepo.updatePackages ??= []).push({\n name: item.name,\n path: resolvePkgPath,\n currentVersion: packageInfo.version,\n newVersion: config.release,\n })\n }\n}\n\nexport const bumpVersion = async () => {\n const config = await resolveConfig()\n\n intro(pc.bgCyan(` dnmp ${version} `))\n\n if (!config.token.value) {\n outro('请先设置 release token')\n return process.exit(0)\n }\n\n if (config.monorepo.is) {\n const allUpdateVersion = await getOrUpdateAllUpdateVersion(config)\n\n if (allUpdateVersion) {\n await updateAllPackagesVersion(config)\n }\n else {\n await handleMonorepoPackageSelection(config)\n }\n }\n else {\n await getCurrentVersion(config)\n await promptForNewVersion(config)\n }\n\n console.log('npm', [\n 'publish',\n `--//registry.npmjs.org/:_authToken=${config.token.value}`,\n '--access',\n 'public',\n ].join(' '))\n\n const isConfirmUpdate = await confirm({\n message: '是否确认更新 package.json ?',\n initialValue: true,\n })\n\n isCancelProcess(isConfirmUpdate)\n\n if (!isConfirmUpdate) {\n outro('用户取消操作,后续进程停止')\n return process.exit(0)\n }\n\n await updateFiles(config)\n\n await gitCommit(config)\n await gitTags(config)\n\n // await runCommand(config, 'npm', [\n // 'publish',\n // `--//registry.npmjs.org/:_authToken=${config.token}`,\n // '--access',\n // 'public',\n // ])\n\n outro('Done.')\n}\n","import process from 'node:process'\nimport { resolveConfig } from '@/config.ts'\nimport { setToken } from '@/token.ts'\nimport { printWarning } from '@/utils.ts'\n\nexport const token = async (token: string = '') => {\n try {\n const config = await resolveConfig()\n await setToken(config, token)\n }\n catch (error: any) {\n printWarning(error.message)\n process.exit(0)\n }\n}\n","import * as process from 'node:process'\nimport cac from 'cac'\nimport { bumpVersion } from '@/command/bump.ts'\nimport { token as setToken } from '@/command/token.ts'\nimport { printWarning } from '@/utils.ts'\nimport { name, version } from '../package.json'\n\nconst cli = cac(name)\n\n// TODO 完成主目录下的 package.json 版本发布\n// TODO 完成 monorepo 相关版本,多选版本发布\n\ncli.command('')\n .action(async (options) => {\n await bumpVersion()\n })\n\ncli.command('set <token>', 'Set the local release Token')\n .action(async (token: string = '') => {\n await setToken(token)\n })\n\ncli.help()\ncli.version(version)\n\ntry {\n cli.parse()\n}\ncatch (error: any) {\n printWarning(error.message)\n process.exit(0)\n}\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA,IAAI,IAAI,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;CAC7D,IAAI,mBACH,EAAE,CAAC,CAAC,IAAI,YAAY,KAAK,SAAS,aAAa,MAC9C,CAAC,CAAC,IAAI,eAAe,KAAK,SAAS,UAAU,IAAI,EAAE,aAAa,YAAa,EAAE,UAAU,EAAE,EAAE,SAAS,IAAI,SAAS,UAAW,CAAC,CAAC,IAAI;CAEtI,IAAI,aAAa,MAAM,OAAO,UAAU,UACvC,UAAS;EACR,IAAI,SAAS,KAAK,OAAO,QAAQ,OAAO,QAAQ,OAAO,KAAK,OAAO;AACnE,SAAO,CAAC,QAAQ,OAAO,aAAa,QAAQ,OAAO,SAAS,MAAM,GAAG,QAAQ,OAAO,SAAS;;CAG/F,IAAI,gBAAgB,QAAQ,OAAO,SAAS,UAAU;EACrD,IAAI,SAAS,IAAI,SAAS;AAC1B,KAAG;AACF,aAAU,OAAO,UAAU,QAAQ,MAAM,GAAG;AAC5C,YAAS,QAAQ,MAAM;AACvB,WAAQ,OAAO,QAAQ,OAAO,OAAO;WAC7B,CAAC;AACV,SAAO,SAAS,OAAO,UAAU,OAAO;;CAGzC,IAAI,gBAAgB,UAAU,qBAAqB;EAClD,IAAI,IAAI,UAAU,kBAAkB;AACpC,SAAO;GACN,kBAAkB;GAClB,OAAO,EAAE,WAAW,UAAU;GAC9B,MAAM,EAAE,WAAW,YAAY,kBAAkB;GACjD,KAAK,EAAE,WAAW,YAAY,kBAAkB;GAChD,QAAQ,EAAE,WAAW,WAAW;GAChC,WAAW,EAAE,WAAW,WAAW;GACnC,SAAS,EAAE,WAAW,WAAW;GACjC,QAAQ,EAAE,WAAW,WAAW;GAChC,eAAe,EAAE,WAAW,WAAW;GAEvC,OAAO,EAAE,YAAY,WAAW;GAChC,KAAK,EAAE,YAAY,WAAW;GAC9B,OAAO,EAAE,YAAY,WAAW;GAChC,QAAQ,EAAE,YAAY,WAAW;GACjC,MAAM,EAAE,YAAY,WAAW;GAC/B,SAAS,EAAE,YAAY,WAAW;GAClC,MAAM,EAAE,YAAY,WAAW;GAC/B,OAAO,EAAE,YAAY,WAAW;GAChC,MAAM,EAAE,YAAY,WAAW;GAE/B,SAAS,EAAE,YAAY,WAAW;GAClC,OAAO,EAAE,YAAY,WAAW;GAChC,SAAS,EAAE,YAAY,WAAW;GAClC,UAAU,EAAE,YAAY,WAAW;GACnC,QAAQ,EAAE,YAAY,WAAW;GACjC,WAAW,EAAE,YAAY,WAAW;GACpC,QAAQ,EAAE,YAAY,WAAW;GACjC,SAAS,EAAE,YAAY,WAAW;GAElC,aAAa,EAAE,YAAY,WAAW;GACtC,WAAW,EAAE,YAAY,WAAW;GACpC,aAAa,EAAE,YAAY,WAAW;GACtC,cAAc,EAAE,YAAY,WAAW;GACvC,YAAY,EAAE,YAAY,WAAW;GACrC,eAAe,EAAE,YAAY,WAAW;GACxC,YAAY,EAAE,YAAY,WAAW;GACrC,aAAa,EAAE,YAAY,WAAW;GAEtC,eAAe,EAAE,aAAa,WAAW;GACzC,aAAa,EAAE,aAAa,WAAW;GACvC,eAAe,EAAE,aAAa,WAAW;GACzC,gBAAgB,EAAE,aAAa,WAAW;GAC1C,cAAc,EAAE,aAAa,WAAW;GACxC,iBAAiB,EAAE,aAAa,WAAW;GAC3C,cAAc,EAAE,aAAa,WAAW;GACxC,eAAe,EAAE,aAAa,WAAW;GACzC;;AAGF,QAAO,UAAU,cAAc;AAC/B,QAAO,QAAQ,eAAe;;;;;;AC1E9B;AACA;AACA;AACA;AACA;;;;ACEA,MAAa,iBAAiB,YAAoB;AAC9C,QAAO,GAAG,WAAW,QAAQ;;AAGjC,MAAa,aAAa,YAAoB;AAC1C,KAAI,CAAC,cAAc,QAAQ,CACvB,IAAG,UAAU,QAAQ;;AAI7B,MAAa,gBAAgB,YACzB,QAAQ,IAAI,MAAM,SAAS;CACvB,OAAO;CACP,SAAS;CACT,aAAa;CACb,aAAa;CAChB,CAAC,CAAC;AAEP,MAAa,mBAAmB,OAAgB,UAAkB,mBAAmB;AACjF,KAAI,SAAS,MAAM,EAAE;AACjB,SAAO,QAAQ;AACf,SAAO,QAAQ,KAAK,EAAE;;;AAI9B,MAAa,WAAW,OAAO,SAAkC;AAE7D,QAAO,MADQ,WAAW,KAAK,CACX,OAAO,MAAM,EAAE,SAAS,MAAM,CAAC;;;;;AC3BvD,MAAa,WAAW,OAAO,QAAwB,YAAiC;AACpF,WAAU,QAAQ,OAAO,KAAK,kBAAkB,CAAC;AACjD,OAAM,UAAU,OAAO,MAAM,MAAM,mBAAmBA,QAAM,GAAG;;AAGnE,MAAa,cAAc,OAAO,WAA4C;AAC1E,QAAO,MAAM,SAAS,OAAO,MAAM,KAAK;;;;;;;;;;AED5C,MAAM,eAAe,QAAQ,OAAO,KAAK,SAAS,MAAM;AAExD,MAAMC,gBAAgC;CAClC,MAAM;CACN,KAAK;CACL,OAAO;EACH,MAAM;EACN,MAAM,QAAQ,cAAc,GAAG,wBAAwB;EACvD,OAAO;EACV;CACD,SAAS;CACT,gBAAgB;CAChB,UAAU;EACN,IAAI;EACJ,eAAe;EACf,UAAU,EAAE;EACZ,iBAAiB,EAAE;EACnB,gBAAgB,EAAE;EACrB;CACD,UAAU;CACb;AAED,MAAM,sBAAsB,OAAO,QAAwB,aAAuB;CAC9E,MAAM,QAAQ,CAAC,eAAe;AAC9B,OAAM,KAAK,GAAG,MAAM,KAAK,UAAU;EAC/B,KAAK,OAAO;EACZ,QAAQ,CAAC,qBAAqB;EACjC,CAAC,CAAC;AAEH,QAAO,CAAC,GAAG,MAAM;;AAGrB,MAAa,aAAa,OACtB,WACsC;CACtC,MAAM,gBAAgB,MAAM,OAAO,uBAAuB,EACtD,KAAK,OAAO,KACf,CAAC;AAEF,KAAI,CAAC,cACD,QAAO;EACH,IAAI;EACJ,eAAe;EACf,iBAAiB,EAAE;EACnB,UAAU,EAAE;EACf;CAKL,MAAM,KAAK,CAAC,EAFU,gBAAgB,MAAM,aAAa,eAAe,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,GAExE,SAAS;CAErC,MAAM,EAAE,UAAU,sBAAsB,MAAM,aAAa,eAAe,QAAQ,CAAC;CAEnF,IAAI,WAAW,EAAE;CACjB,IAAIC,kBAAsC,EAAE;AAC5C,KAAI,mBAAmB;AACnB,aAAW,kBAAkB,KACxB,SACG,KAAK,QAAQ,IAAI,GACX,GAAG,KAAK,QAAQ,MAAM,GAAG,CAAC,oBAC1B,GAAG,KAAK,kBACrB;AAGD,qBADqB,MAAM,oBAAoB,QAAQ,SAAS,EACjC,KAAK,SAAS;GACzC,MAAM,QAAQ,KAAK,MAAM,aAAa,QAAQ,OAAO,KAAK,KAAK,EAAE,QAAQ,CAAC;AAE1E,UAAO;IACH,MAAM,GAAG,MAAM;IACf;IACA,SAAS,OAAO,WAAW;IAC3B,SAAS;IACZ;IACH;;AAGN,QAAO;EACH;EACA;EACA;EACA;EACH;;AAGL,MAAa,gBAAgB,YAAqC;CAC9D,MAAM,EAAE,eAAe,MAAM,OAAO;CAEpC,MAAM,SAAS,MAAM,WAA2B;EAC5C;EACA;EACH,CAAC,CAAC,MAAK,OAAM;EACV,GAAG,EAAE;EACL,KAAKC,UAAQ,KAAK;EAClB,MAAM;EACT,EAAE;AAEH,QAAO,MAAM,QAAQ,MAAM,YAAY,OAAO,IAAI;AAElD,QAAO,WAAW,MAAM,WAAW,OAAO;AAE1C,QAAO,WAAW,QAAQ,OAAO,KAAK,eAAe;AAErD,QAAO;;;;;AC/GX,MAAa,YAAY,OAAO,WAA2B;CACvD,MAAM,OAAO,EAAE;AAEf,MAAK,KAAK,aAAa,aAAa,OAAO,UAAU;AAErD,MAAK,KAAK,gBAAgB;AAM1B,MAAK,KAAK,OAAO,SAAS;AAG1B,OAAM,EAAE,OAAO,CAAC,UAAU,GAAG,KAAK,EAAE,EAChC,aAAa;EACT,KAAK,OAAO;EACZ,OAAO;EACV,EACJ,CAAC;;AAGN,MAAa,UAAU,OAAO,WAA2B;AACrD,OAAM,EAAE,OAAO;EACX;EACA;EACA;EACA;EACA,IAAI,OAAO;EACd,EAAE,EACC,aAAa;EACT,KAAK,OAAO;EACZ,OAAO;EACV,EACJ,CAAC;;;;;AClCN,MAAM,eAAe;AAErB,MAAM,oBAAoB,OAAO,MAAc,cAAoB;CAC/D,MAAM,gBAAgB,KAAK,MAAM,MAAM,SAAS,MAAM,QAAQ,CAAC;AAC/D,eAAc,UAAUC;AACxB,OAAM,UAAU,MAAM,KAAK,UAAU,eAAe,MAAM,aAAa,CAAC;;AAG5E,MAAa,cAAc,OAAO,WAA2B;AACzD,KAAI,OAAO,SAAS,GAChB,MAAK,MAAM,OAAO,OAAO,SAAS,eAC9B,OAAM,kBAAkB,IAAI,MAAM,IAAI,WAAW;KAIrD,OAAM,kBAAkB,OAAO,UAAU,OAAO,QAAQ;;;;;ACfhE,MAAa,oBAAoB,OAAO,WAA2B;CAC/D,MAAM,EAAE,aAAa;AAErB,KAAI,OAAO,aAAa,UAAU,OAU9B,QAAO,iBANU,KAAK,MAAM,MAAM,SAAS,UAAU,EACjD,UAAU,SACb,CAAC,CAAC,CAI8B,WAAW;;;;;ACNpD,MAAM,UAAU;AAChB,MAAa,mBAAmB,cAAoB,CAAC,CAAC,OAAO,MAAMC,UAAQ;AAO3E,MAAMC,gBAAyB;CAAE,OAAO;CAAQ,OAAOC,0BAAG;CAAM;AAEhE,MAAMC,eAAwC;CAC1C,OAAO;EAAE,OAAO;EAAS,OAAOD,0BAAG;EAAM;CACzC,OAAO;EAAE,OAAO;EAAS,OAAOA,0BAAG;EAAM;CACzC,OAAO;EAAE,OAAO;EAAS,OAAOA,0BAAG;EAAM;CACzC,MAAM;EAAE,OAAO;EAAQ,OAAOA,0BAAG;EAAM;CACvC,IAAI;EAAE,OAAO;EAAM,OAAOA,0BAAG;EAAO;CACpC,MAAM;EAAE,OAAO;EAAY,OAAOA,0BAAG;EAAS;CAC9C,OAAO;EAAE,OAAO;EAAS,OAAOA,0BAAG;EAAQ;CAC9C;;;;;AAQD,MAAM,yBAAyB,UAAwC,MAAc,QAAgB,aAAqB,aAA6B;AACnJ,KAAI,SAAS,OAAO,OAChB,QAAO,GAAG,KAAK,GAAG;CAGtB,MAAM,SAAS,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,YAAY;AAClD,QAAO,OAAO,SAAS,YACnB,QAAO,KAAK,EAAE;CAGlB,MAAM,UAAU,cAAc;CAC9B,MAAM,UAAU,OAAO;CACvB,MAAM,aAAa,OAAO,YAAY,WAAW,UAAU,OAAO,SAAS,OAAO,QAAQ,EAAE,GAAG;AAI/F,QAAO,WAFa,SAAS,SAAS,cAEN,IAAK,OAAO,MAAM,WAAW,GAAG,IAAI,aAAa;AAEjF,QAAO,GAAG,KAAK,GAAG,OAAO,KAAK,IAAI;;AAGtC,MAAa,mBAAmB,cAAkC;CAC9D,MAAM,IAAI,OAAO,MAAMF,UAAQ;AAC/B,KAAI,CAAC,EACD,OAAM,IAAI,MAAM,qBAAqBA,YAAU;CAEnD,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,QAAQ;CAC1D,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG;AAE1B,QAAO;EACH,SAAS,GAAG,IAAI,EAAE;EAClB,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE;EACvB,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAC1B,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EACzB,MAAM,sBAAsB,KAAK,MAAM,MAAM,GAAG,OAAO;EACvD,cAAc,sBAAsB,KAAK,MAAM,QAAQ,GAAG,SAAS;EACnE,cAAc,sBAAsB,KAAK,MAAM,QAAQ,GAAG,WAAW;EACrE,cAAc,sBAAsB,KAAK,MAAM,QAAQ,GAAG,aAAa;EACvE,YAAY,GAAG,KAAK;EACpB,cAAc,GAAG,KAAK;EACtB,eAAe,sBAAsB,KAAK,MAAM,SAAS,GAAG,UAAU;EACtE,eAAe,sBAAsB,KAAK,MAAM,SAAS,GAAG,YAAY;EACxE,eAAe,sBAAsB,KAAK,MAAM,SAAS,GAAG,cAAc;EAC7E;;AAKL,eAAsB,oBAAoB,QAAwB,KAAuB,OAAwC;CAC7H,MAAMA,YAAU,OAAO,SAAS,MAAM,QAAQ,SAAY,IAAI,aAAa,OAAO;CAElF,MAAM,OAAO,gBAAgBA,UAAQ;CAGrC,MAAM,UAAW,OAAO,KAAK,KAAK,CAAmB,KAAK,QAAQ;EAC9D,MAAM,aAAa,KAAK;AAiBxB,SAAO;GACH,OAAO;GACP,OAAO,IAZG,aAJC,IAAI,MAAM,IAAI,CAAC,MAAM,WAIE,eAElB,MAAM,SAAS,SAAS,IAAI,CAU5B,GAPG,WAAW,QAAQ,qBAAqB,UAAU;AAErE,YADmB,aAAa,UAAU,eACxB,MAAM,MAAM;KAChC;GAKD;GACH;AAEF,SAAQ,KAAK;EACT,OAAO;EACP,OAAO,GAAG,SAAS,SAAS,SAAS,IAAI,CAAC;EAC7C,CAAC;CAEF,MAAM,UAAU,MAAM,OAAO;EACzB,SAAS,mBAAmBE,0BAAG,KAAKF,UAAQ;EAC5C;EACA,cAAc;EACjB,CAAC;AAEF,iBAAgB,QAAQ;CAExB,IAAII;AAEJ,KAAI,YAAY,uBAAuB;EACnC,MAAM,SAAS,MAAM,KAAK;GACtB,SAAS;GACT,WAAU,QAAO,CAAC,gBAAgB,IAAI,GAAG,mBAAmB;GAC/D,CAAC;AAEF,MAAI,SAAS,OAAO,EAAE;AAClB,UAAO,qBAAqB;AAC5B,UAAO,QAAQ,KAAK,EAAE;;AAE1B,iBAAe;OAIf,gBAAe,KAAK;AAGxB,KACI,OAAO,SAAS,MACb,QAAQ,UACR,UAAU,UACV,MAAM,QAAQ,OAAO,SAAS,eAAe,CAEhD,QAAO,SAAS,eAAe,OAAQ,aAAa;KAGpD,QAAO,UAAU;;;;;;;;ACxIzB,MAAM,wBAAwB,oBAAwC;AAClE,QAAO,gBAAgB,KAAK,SAAS;AACjC,SAAO;GACH,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,MAAM,GAAGC,0BAAG,IAAI,KAAK,QAAQ,CAAC,KAAK,KAAK;GAC3C;GACH;;;;;AAMN,MAAM,0BAA0B,OAC5B,QACA,qBACA,oBACgB;CAChB,MAAM,kBAAkB,gBAAgB,MAAK,QAAO,IAAI,SAAS,oBAAoB;CAErF,MAAMC,iBAAkC;EACpC,MAAM;EACN,MAAM,QAAQ,OAAO,KAAK,gBAAgB,KAAK;EAC/C,gBAAgB,gBAAgB;EAChC,YAAY,gBAAgB;EAC/B;AAED,EAAC,OAAO,SAAS,mBAAmB,EAAE,EAAE,KAAK,eAAe;AAE5D,OAAM,oBAAoB,QAAQ,gBAAgB,OAAO,SAAS,eAAe,SAAS,EAAE;;;;;AAMhG,MAAM,iCAAiC,OAAO,WAA0C;CAEpF,IAAI,mBAAmB,CAAC,GADR,qBAAqB,OAAO,SAAS,gBAAgB,CAClC;AAEnC,QAAO,iBAAiB,SAAS,GAAG;EAChC,MAAM,kBAAkB,MAAM,OAAO;GACjC,SAAS;GACT,SAAS;GACZ,CAAC;AAEF,kBAAgB,gBAAgB;AAEhC,QAAM,wBAAwB,QAAQ,iBAAiB,OAAO,SAAS,gBAAgB;AAGvF,qBAAmB,iBAAiB,QAAO,QAAO,IAAI,UAAU,gBAAgB;AAEhF,MAAI,iBAAiB,SAAS,GAAG;GAC7B,MAAM,oBAAoB,MAAM,QAAQ;IACpC,SAAS;IACT,cAAc;IACjB,CAAC;AACF,mBAAgB,kBAAkB;AAElC,OAAI,CAAC,kBACD;;;;;;;AAShB,MAAM,eAAe,OAAO,QAAwC;AAIhE,QAHa,MAAM,OAAO,+BAA+B,EACrD,KACH,CAAC,IACa;;;;;AAMnB,MAAM,8BAA8B,OAAO,WAA6C;CACpF,MAAM,YAAY,MAAM,aAAa,OAAO,IAAI;AAEhD,KAAI,UACA,QAAO,QAAQ,MAAM,SAAS,UAAU,CAAC;CAG7C,MAAM,mBAAmB,MAAM,QAAQ;EACnC,SAAS;EACT,cAAc;EACjB,CAAC;AAEF,iBAAgB,kBAAkB,eAAe;AAGjD,OAAM,UADgB,QAAQ,OAAO,KAAK,gCAAgC,EAC3C,kBAAkB,mBAAmB;AAEpE,QAAO;;;;;AAMX,MAAM,kBAAkB,OAAO,aAAmD;AAC9E,QAAO,KAAK,MAAM,MAAM,SAAS,UAAU,QAAQ,CAAC;;;;;AAMxD,MAAM,2BAA2B,OAAO,WAA0C;AAE9E,QAAO,kBADK,MAAM,gBAAgB,OAAO,SAAS,EACtB;AAE5B,OAAM,oBAAoB,OAAO;AAEjC,MAAK,MAAM,QAAQ,OAAO,SAAS,iBAAiB;EAChD,MAAM,iBAAiB,QAAQ,OAAO,KAAK,KAAK,KAAK;EACrD,MAAM,cAAc,MAAM,gBAAgB,eAAe;AAEzD,GAAC,OAAO,SAAS,mBAAmB,EAAE,EAAE,KAAK;GACzC,MAAM,KAAK;GACX,MAAM;GACN,gBAAgB,YAAY;GAC5B,YAAY,OAAO;GACtB,CAAC;;;AAIV,MAAa,cAAc,YAAY;CACnC,MAAM,SAAS,MAAM,eAAe;AAEpC,OAAMD,0BAAG,OAAO,SAAS,QAAQ,GAAG,CAAC;AAErC,KAAI,CAAC,OAAO,MAAM,OAAO;AACrB,QAAM,qBAAqB;AAC3B,SAAOE,UAAQ,KAAK,EAAE;;AAG1B,KAAI,OAAO,SAAS,GAGhB,KAFyB,MAAM,4BAA4B,OAAO,CAG9D,OAAM,yBAAyB,OAAO;KAGtC,OAAM,+BAA+B,OAAO;MAG/C;AACD,QAAM,kBAAkB,OAAO;AAC/B,QAAM,oBAAoB,OAAO;;AAGrC,SAAQ,IAAI,OAAO;EACf;EACA,sCAAsC,OAAO,MAAM;EACnD;EACA;EACH,CAAC,KAAK,IAAI,CAAC;CAEZ,MAAM,kBAAkB,MAAM,QAAQ;EAClC,SAAS;EACT,cAAc;EACjB,CAAC;AAEF,iBAAgB,gBAAgB;AAEhC,KAAI,CAAC,iBAAiB;AAClB,QAAM,gBAAgB;AACtB,SAAOA,UAAQ,KAAK,EAAE;;AAG1B,OAAM,YAAY,OAAO;AAEzB,OAAM,UAAU,OAAO;AACvB,OAAM,QAAQ,OAAO;AASrB,OAAM,QAAQ;;;;;ACtMlB,MAAa,QAAQ,OAAO,UAAgB,OAAO;AAC/C,KAAI;AAEA,QAAM,SADS,MAAM,eAAe,EACbC,QAAM;UAE1BC,OAAY;AACf,eAAa,MAAM,QAAQ;AAC3B,YAAQ,KAAK,EAAE;;;;;;ACLvB,MAAM,MAAM,IAAI,KAAK;AAKrB,IAAI,QAAQ,GAAG,CACV,OAAO,OAAO,YAAY;AACvB,OAAM,aAAa;EACrB;AAEN,IAAI,QAAQ,eAAe,8BAA8B,CACpD,OAAO,OAAO,UAAgB,OAAO;AAClC,OAAMC,MAASC,QAAM;EACvB;AAEN,IAAI,MAAM;AACV,IAAI,QAAQ,QAAQ;AAEpB,IAAI;AACA,KAAI,OAAO;SAERC,OAAY;AACf,cAAa,MAAM,QAAQ;AAC3B,WAAQ,KAAK,EAAE"}
1
+ {"version":3,"file":"cli.mjs","names":["token","defaultConfig: IConfigOptions","packageContexts: IPackageContexts[]","process","version","version","DEFAULT_STYLE: UIStyle","pc","UI_STYLE_MAP: Record<string, UIStyle>","finalVersion: string","pc","resolvePackage: IUpdatePackages","process","token","error: any","setToken","token","error: any"],"sources":["../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js","../src/runCommand.ts","../src/token.ts","../package.json","../src/config.ts","../src/constant.ts","../src/git.ts","../src/update-files.ts","../src/utils.ts","../src/version/current.ts","../src/version/new.version.ts","../src/command/bump.ts","../src/command/token.ts","../src/cli.ts"],"sourcesContent":["let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","import type { IConfigOptions } from '@/types'\nimport { x } from 'tinyexec'\n\nexport const runCommand = async (config: IConfigOptions, command: string, args: string[]) => {\n await x(command, args, {\n nodeOptions: {\n stdio: 'inherit',\n cwd: config.cwd,\n },\n })\n}\n","import type { IConfigOptions } from '@/types'\nimport { readFile } from 'node:fs/promises'\nimport process from 'node:process'\nimport boxen from 'boxen'\nimport { x } from 'tinyexec'\nimport { runCommand } from '@/runCommand.ts'\n\nexport const setToken = async (config: IConfigOptions, token: string): Promise<void> => {\n await runCommand(config, 'npm', [\n 'config',\n 'set',\n '//registry.npmjs.org/:_authToken',\n token,\n ])\n}\n\nexport const loaderToken = async (config: IConfigOptions): Promise<string> => {\n const npmrcPath = await x('npm', ['config', 'get', 'userconfig'], {\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n\n const content = await readFile(npmrcPath.stdout.trim(), 'utf-8')\n const [, tokenValue] = content.match(/\\/\\/registry.npmjs.org\\/:_authToken=(.*)/) || []\n const token = tokenValue?.trim() || null\n if (!token) {\n console.log(boxen(\n `_authToken not found in your .npmrc file,\nyou can use the following codemod:\nRun \"dnmp set <token> or npm config set //registry.npmjs.org/:_authToken=<token>\"`,\n {\n title: 'Warning',\n padding: 1,\n margin: 0,\n borderStyle: 'round',\n borderColor: 'yellow',\n },\n ))\n process.exit(0)\n }\n return token\n}\n","","import type { IConfigOptions, IPackage, IPackageContexts } from '@/types'\nimport { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport * as process from 'node:process'\nimport { findUp } from 'find-up'\nimport { glob } from 'glob'\nimport { parse } from 'yaml'\nimport { loaderToken } from '@/token.ts'\nimport { name } from '../package.json'\n\nconst CURRENT_PATH = resolve(import.meta.dirname, '../')\n\nconst defaultConfig: IConfigOptions = {\n root: '',\n cwd: '',\n token: '',\n release: '',\n currentVersion: '',\n monorepo: {\n is: false,\n workspacePath: '',\n packages: [],\n packageContexts: [],\n updatePackages: [],\n },\n packages: '',\n}\n\nconst collectPackageFiles = async (config: IConfigOptions, packages: string[]) => {\n const files = ['package.json']\n files.push(...await glob(packages, {\n cwd: config.cwd,\n ignore: ['**/node_modules/**'],\n }))\n\n return [...files]\n}\n\nexport const isMonorepo = async (\n config: IConfigOptions,\n): Promise<IConfigOptions['monorepo']> => {\n const workspacePath = await findUp('pnpm-workspace.yaml', {\n cwd: config.cwd,\n }) as string\n\n if (!workspacePath) {\n return {\n is: false,\n workspacePath: '',\n packageContexts: [],\n packages: [],\n }\n }\n\n const workspaceYaml = workspacePath ? parse(readFileSync(workspacePath, 'utf-8')) : { packages: [] }\n\n const is = !!workspaceYaml?.packages?.length || false\n\n const { packages: workSpacePackages } = parse(readFileSync(workspacePath, 'utf-8'))\n\n let packages = []\n let packageContexts: IPackageContexts[] = []\n if (workSpacePackages) {\n packages = workSpacePackages.map(\n (item: string) =>\n item.indexOf('*')\n ? `${item.replace('/*', '')}/**/package.json`\n : `${item}/**/package.json`,\n )\n\n const packageFiles = await collectPackageFiles(config, packages)\n packageContexts = packageFiles.map((file) => {\n const files = JSON.parse(readFileSync(resolve(config.cwd, file), 'utf-8')) as IPackage\n\n return {\n name: `${files.name}`,\n file,\n version: files?.version || '',\n context: files,\n }\n }) as IPackageContexts[]\n }\n\n return {\n is,\n workspacePath,\n packageContexts,\n packages,\n }\n}\n\nexport const resolveConfig = async (): Promise<IConfigOptions> => {\n const { loadConfig } = await import('c12')\n\n const config = await loadConfig<IConfigOptions>({\n name,\n defaultConfig,\n }).then(r => ({\n ...r.config,\n cwd: process.cwd(),\n root: CURRENT_PATH,\n }))\n\n config.token = await loaderToken(config) || ''\n\n config.monorepo = await isMonorepo(config)\n\n config.packages = resolve(config.cwd, 'package.json')\n\n return config\n}\n","export const CACHE_FOLDER_NAME = '.cache'\nexport const CACHE_FILE_NAME = 'token.ts'\nexport const CACHE_TOKEN_FILE_PATH = `${CACHE_FOLDER_NAME}/${CACHE_FILE_NAME}`\nexport const CUSTOM_RELEASE_PREFIX = 'custom'\nexport const CANCEL_PROCESS = 'Current operation canceled.'\n","import type { IConfigOptions } from '@/types'\nimport { x } from 'tinyexec'\n\nexport const gitCommit = async (config: IConfigOptions) => {\n const args = []\n\n args.push('--message', `release: v${config.release}`)\n\n args.push('--allow-empty')\n\n // if (typeof config.packages === 'object') {\n // args.push(config.packages.map(r => basename(r)).join(' '))\n // }\n // else {\n args.push(config.packages)\n // }\n\n await x('git', ['commit', ...args], {\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n}\n\nexport const gitTags = async (config: IConfigOptions) => {\n await x('git', [\n 'tag',\n '--annotate',\n '--message',\n '',\n `v${config.release}`,\n ], {\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n}\n\nexport const gitPush = async (config: IConfigOptions) => {\n await x('git', ['push', '--tags'], {\n throwOnError: true,\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n}\n","import type { IConfigOptions } from '@/types'\nimport { readFile, writeFile } from 'node:fs/promises'\n\nconst JSON_SPACING = 2\n\nconst updatePackageJson = async (path: string, version: string) => {\n const updatePackage = JSON.parse(await readFile(path, 'utf-8'))\n updatePackage.version = version\n await writeFile(path, JSON.stringify(updatePackage, null, JSON_SPACING))\n}\n\nexport const updateFiles = async (config: IConfigOptions) => {\n if (config.monorepo.is) {\n for (const pkg of config.monorepo.updatePackages!) {\n await updatePackageJson(pkg.path, pkg.newVersion)\n }\n }\n else {\n await updatePackageJson(config.packages, config.release)\n }\n}\n","import fs from 'node:fs'\nimport { cancel, isCancel } from '@clack/prompts'\nimport boxen from 'boxen'\nimport { createJiti } from 'jiti'\nimport { CANCEL_PROCESS } from '@/constant.ts'\n\nexport const checkDirExist = (dirPath: string) => {\n return fs.existsSync(dirPath)\n}\n\nexport const createDir = (dirPath: string) => {\n if (!checkDirExist(dirPath)) {\n fs.mkdirSync(dirPath)\n }\n}\n\nexport const printWarning = (message: string) =>\n console.log(boxen(message, {\n title: 'Warning',\n padding: 1,\n borderStyle: 'round',\n borderColor: 'yellow',\n }))\n\nexport const isCancelProcess = (value: unknown, message: string = CANCEL_PROCESS) => {\n if (isCancel(value)) {\n cancel(message)\n return process.exit(0)\n }\n}\n\nexport const loaderTs = async (path: string): Promise<string> => {\n const loader = createJiti(path)\n return await loader.import(path, { default: true })\n}\n","import type { IConfigOptions } from '@/types'\nimport { readFile } from 'node:fs/promises'\n\nexport const getCurrentVersion = async (config: IConfigOptions) => {\n const { packages } = config\n\n if (typeof packages === 'object') {\n // TODO load monorepo package version\n }\n else {\n const manifest = JSON.parse(await readFile(packages, {\n encoding: 'utf-8',\n })) as {\n version?: string\n }\n\n config.currentVersion = manifest.version || ''\n }\n}\n","import type { releaseType, ReleaseTypes } from '@/release-type.ts'\nimport type { IConfigOptions, IUpdatePackages } from '@/types'\nimport { cancel, isCancel, select, text } from '@clack/prompts'\nimport pc from 'picocolors'\nimport semver from 'semver'\nimport { CUSTOM_RELEASE_PREFIX } from '@/constant.ts'\nimport { isCancelProcess } from '@/utils.ts'\n\n// https://semver.org/\n\nconst PADDING = 13\nexport const validateVersion = (version: string) => !!semver.valid(version)\n\ninterface UIStyle {\n label: string\n color: (t: string) => string\n}\n\nconst DEFAULT_STYLE: UIStyle = { label: 'next', color: pc.cyan }\n\nconst UI_STYLE_MAP: Record<string, UIStyle> = {\n major: { label: 'major', color: pc.cyan },\n minor: { label: 'minor', color: pc.cyan },\n patch: { label: 'patch', color: pc.cyan },\n next: { label: 'next', color: pc.cyan },\n rc: { label: 'rc', color: pc.green },\n beta: { label: 'pre-beta', color: pc.magenta },\n alpha: { label: 'alpha', color: pc.yellow },\n}\n\n// --- 工具函数 ---\n\n/**\n * 核心逻辑:增量处理预发布版本\n * 解决 TS2345: 使用 readonly 修饰符接受 semver 的返回类型\n */\nconst processIncrementalPre = (preParts: readonly (string | number)[], base: string, prefix: string, expectedLen: number, fallback: string): string => {\n if (preParts[0] !== prefix) {\n return `${base}-${fallback}`\n }\n\n const newPre = [...preParts].slice(0, expectedLen)\n while (newPre.length < expectedLen) {\n newPre.push(0)\n }\n\n const lastIdx = expectedLen - 1\n const lastVal = newPre[lastIdx]\n const numericVal = typeof lastVal === 'number' ? lastVal : Number.parseInt(String(lastVal), 10)\n\n const isExtension = preParts.length < expectedLen\n // 逻辑:如果是补位产生的 0,则起始为 1;如果是已有的数字,则递增\n newPre[lastIdx] = isExtension ? 1 : (Number.isNaN(numericVal) ? 1 : numericVal + 1)\n\n return `${base}-${newPre.join('.')}`\n}\n\nexport const getNextVersions = (version: string): ReleaseTypes => {\n const s = semver.parse(version)\n if (!s)\n throw new Error(`[Invalid SemVer]: ${version}`)\n\n const { major: M, minor: m, patch: p, prerelease: pre } = s\n const base = `${M}.${m}.${p}`\n\n return {\n 'major': `${M + 1}.0.0`,\n 'minor': `${M}.${m + 1}.0`,\n 'patch': `${M}.${m}.${p + 1}`,\n 'next': `${M}.${m}.${p + 1}`,\n 'rc': processIncrementalPre(pre, base, 'rc', 2, 'rc.1'),\n 'beta-major': processIncrementalPre(pre, base, 'beta', 2, 'beta.1'),\n 'beta-minor': processIncrementalPre(pre, base, 'beta', 3, 'beta.0.1'),\n 'beta-patch': processIncrementalPre(pre, base, 'beta', 4, 'beta.0.0.1'),\n 'pre-beta': `${base}-beta`,\n 'alpha-beta': `${base}-alpha.beta`,\n 'alpha-major': processIncrementalPre(pre, base, 'alpha', 2, 'alpha.1'),\n 'alpha-minor': processIncrementalPre(pre, base, 'alpha', 3, 'alpha.0.1'),\n 'alpha-patch': processIncrementalPre(pre, base, 'alpha', 4, 'alpha.0.0.1'),\n }\n}\n\nexport async function promptForNewVersion(config: IConfigOptions): Promise<string | void>\nexport async function promptForNewVersion(config: IConfigOptions, pkg: IUpdatePackages, index: number): Promise<string | void>\nexport async function promptForNewVersion(config: IConfigOptions, pkg?: IUpdatePackages, index?: number): Promise<string | void> {\n const version = config.monorepo.is && pkg !== undefined ? pkg.newVersion : config.currentVersion\n\n const next = getNextVersions(version)\n\n // 动态生成选项\n const options = (Object.keys(next) as releaseType[]).map((key) => {\n const versionStr = next[key]\n\n // 1. 获取前缀(如 'alpha')\n const prefix = key.split('-')[0] ?? 'next'\n\n // 2. 彻底解决 TS18048: 即使 prefix 在 Map 里,TS 仍认为可能返回 undefined\n // 使用空值合并运算符 (??) 确保 style 永远是 UIStyle 类型\n const style = UI_STYLE_MAP[prefix] ?? DEFAULT_STYLE\n\n const label = style.label.padStart(PADDING, ' ')\n\n // 渲染版本颜色,同样处理关键字匹配的安全性\n const coloredVersion = versionStr.replace(/(rc|beta|alpha)/g, (match) => {\n const matchStyle = UI_STYLE_MAP[match] ?? DEFAULT_STYLE\n return matchStyle.color(match)\n })\n\n return {\n value: key as string,\n label: `${label} ${coloredVersion}`,\n }\n })\n\n options.push({\n value: CUSTOM_RELEASE_PREFIX,\n label: `${'custom'.padStart(PADDING, ' ')} ...`,\n })\n\n const release = await select({\n message: `Current version ${pc.bold(version)}`,\n options,\n initialValue: 'next',\n }) as releaseType | 'custom'\n\n isCancelProcess(release)\n\n let finalVersion: string\n\n if (release === CUSTOM_RELEASE_PREFIX) {\n const custom = await text({\n message: 'Enter the new version number',\n validate: val => !validateVersion(val) ? 'Invalid semver' : undefined,\n }) as string\n\n if (isCancel(custom)) {\n cancel('No version entered')\n return process.exit(0)\n }\n finalVersion = custom\n }\n else {\n // 这里的 release 已经排除了 CUSTOM 且必定属于 releaseType\n finalVersion = next[release]\n }\n\n if (\n config.monorepo.is\n && pkg !== undefined\n && index !== undefined\n && Array.isArray(config.monorepo.updatePackages)\n ) {\n config.monorepo.updatePackages[index]!.newVersion = finalVersion\n }\n else {\n config.release = finalVersion\n }\n}\n","import type { IConfigOptions, IPackageContexts, IUpdatePackages } from '@/types'\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport process from 'node:process'\nimport { confirm, intro, outro, select } from '@clack/prompts'\nimport { findUp } from 'find-up'\nimport pc from 'picocolors'\nimport { resolveConfig } from '@/config.ts'\nimport { CANCEL_PROCESS } from '@/constant.ts'\nimport { gitCommit, gitTags } from '@/git.ts'\nimport { runCommand } from '@/runCommand.ts'\nimport { updateFiles } from '@/update-files.ts'\nimport { isCancelProcess, loaderTs } from '@/utils.ts'\nimport { getCurrentVersion } from '@/version/current.ts'\nimport { promptForNewVersion } from '@/version/new.version.ts'\nimport { version } from '../../package.json'\n\n/**\n * 创建包选择选项\n */\nconst createPackageOptions = (packageContexts: IPackageContexts[]) => {\n return packageContexts.map((file) => {\n return {\n value: file.name,\n label: file.name,\n hint: `${pc.red(file.version)} - ${file.file}`,\n }\n })\n}\n\n/**\n * 处理单个包的选择流程\n */\nconst processPackageSelection = async (\n config: IConfigOptions,\n selectedPackageName: string,\n packageContexts: IPackageContexts[],\n): Promise<void> => {\n const selectedPackage = packageContexts.find(opt => opt.name === selectedPackageName) as IPackageContexts\n\n const resolvePackage: IUpdatePackages = {\n name: selectedPackageName,\n path: resolve(config.cwd, selectedPackage.file),\n currentVersion: selectedPackage.version,\n newVersion: selectedPackage.version,\n };\n\n (config.monorepo.updatePackages ??= []).push(resolvePackage)\n\n await promptForNewVersion(config, resolvePackage, config.monorepo.updatePackages.length - 1)\n}\n\n/**\n * 处理 monorepo 包的选择逻辑\n */\nconst handleMonorepoPackageSelection = async (config: IConfigOptions): Promise<void> => {\n const options = createPackageOptions(config.monorepo.packageContexts)\n let availableOptions = [...options]\n\n while (availableOptions.length > 0) {\n const selectedPackage = await select({\n message: '请选择要升级版本的包:',\n options: availableOptions,\n }) as string\n\n isCancelProcess(selectedPackage)\n\n await processPackageSelection(config, selectedPackage, config.monorepo.packageContexts)\n\n // 从可用选项中移除已选择的包\n availableOptions = availableOptions.filter(opt => opt.value !== selectedPackage)\n\n if (availableOptions.length > 0) {\n const continueSelection = await confirm({\n message: '是否继续选择其他包?',\n initialValue: true,\n })\n isCancelProcess(continueSelection)\n\n if (!continueSelection) {\n break\n }\n }\n }\n}\n\n/**\n * 获取缓存文件路径\n */\nconst getCachePath = async (cwd: string): Promise<string | null> => {\n const path = await findUp('node_modules/.cache/dnmp.ts', {\n cwd,\n })\n return path || null\n}\n\n/**\n * 读取或设置统一更新版本选项\n */\nconst getOrUpdateAllUpdateVersion = async (config: IConfigOptions): Promise<boolean> => {\n const cachePath = await getCachePath(config.cwd)\n\n if (cachePath) {\n return Boolean(await loaderTs(cachePath))\n }\n\n const allUpdateVersion = await confirm({\n message: '是否以根 package.json 为主版本统一更新 workspace 所有版本',\n initialValue: true,\n }) as boolean\n\n isCancelProcess(allUpdateVersion, CANCEL_PROCESS)\n\n const cacheFilePath = resolve(config.cwd, './node_modules/.cache/dnmp.ts')\n await writeFile(cacheFilePath, `export default ${allUpdateVersion}`)\n\n return allUpdateVersion\n}\n\n/**\n * 读取包文件内容\n */\nconst readPackageFile = async (filePath: string): Promise<{ version: string }> => {\n return JSON.parse(await readFile(filePath, 'utf-8')) as { version: string }\n}\n\n/**\n * 统一更新所有包的版本\n */\nconst updateAllPackagesVersion = async (config: IConfigOptions): Promise<void> => {\n const pkg = await readPackageFile(config.packages)\n config.currentVersion = pkg.version\n\n await promptForNewVersion(config)\n\n for (const item of config.monorepo.packageContexts) {\n const resolvePkgPath = resolve(config.cwd, item.file)\n const packageInfo = await readPackageFile(resolvePkgPath);\n\n (config.monorepo.updatePackages ??= []).push({\n name: item.name,\n path: resolvePkgPath,\n currentVersion: packageInfo.version,\n newVersion: config.release,\n })\n }\n}\n\nexport const bumpVersion = async () => {\n const config = await resolveConfig()\n\n intro(pc.bgCyan(` dnmp ${version} `))\n\n if (!config.token) {\n outro('请先设置 release token')\n return process.exit(0)\n }\n\n if (config.monorepo.is) {\n const allUpdateVersion = await getOrUpdateAllUpdateVersion(config)\n\n if (allUpdateVersion) {\n await updateAllPackagesVersion(config)\n }\n else {\n await handleMonorepoPackageSelection(config)\n }\n }\n else {\n await getCurrentVersion(config)\n await promptForNewVersion(config)\n }\n\n const isConfirmUpdate = await confirm({\n message: '是否确认更新 package.json ?',\n initialValue: true,\n })\n\n isCancelProcess(isConfirmUpdate)\n\n if (!isConfirmUpdate) {\n outro('用户取消操作,后续进程停止')\n return process.exit(0)\n }\n\n await updateFiles(config)\n\n await gitCommit(config)\n await gitTags(config)\n\n await runCommand(config, 'npm', [\n 'publish',\n `--//registry.npmjs.org/:_authToken=${config.token}`,\n '--access',\n 'public',\n ])\n\n outro('Done.')\n}\n","import process from 'node:process'\nimport { resolveConfig } from '@/config.ts'\nimport { setToken } from '@/token.ts'\nimport { printWarning } from '@/utils.ts'\n\nexport const token = async (token: string = '') => {\n try {\n const config = await resolveConfig()\n await setToken(config, token)\n }\n catch (error: any) {\n printWarning(error.message)\n process.exit(0)\n }\n}\n","import * as process from 'node:process'\nimport cac from 'cac'\nimport { bumpVersion } from '@/command/bump.ts'\nimport { token as setToken } from '@/command/token.ts'\nimport { printWarning } from '@/utils.ts'\nimport { name, version } from '../package.json'\n\nconst cli = cac(name)\n\n// TODO 完成主目录下的 package.json 版本发布\n// TODO 完成 monorepo 相关版本,多选版本发布\n\ncli.command('')\n .action(async (options) => {\n await bumpVersion()\n })\n\ncli.command('set <token>', 'Set the local release Token')\n .action(async (token: string = '') => {\n await setToken(token)\n })\n\ncli.help()\ncli.version(version)\n\ntry {\n cli.parse()\n}\ncatch (error: any) {\n printWarning(error.message)\n process.exit(0)\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dnmp",
3
3
  "type": "module",
4
- "version": "0.0.0-alpha.0.3",
4
+ "version": "0.0.0-alpha.0.5",
5
5
  "packageManager": "pnpm@10.15.1",
6
6
  "description": "Interactive CLI that bumps your version numbers and more",
7
7
  "author": "lonewolfyx <olddrivero.king@qq.com>",