@nemo-cli/package 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;cASa,GAAA;EAAA,IAAA;EAAA,OAAA;EAAA,QAAA;EAAA,OAAA;EAAA,MAAA;EAAA,WAAA;EAAA,UAAA,aAAoC,MAAA;AAAA;AAAA,cAEpC,IAAA,QAaZ,UAAA,CAbgB,OAAA;AAAA,cAeJ,GAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;cASa,GAAA;;;;;;;yBAAoC,MAAA;AAAA;AAAA,cAEpC,IAAA,QAaZ,UAAA,CAbgB,OAAA;AAAA,cAeJ,GAAA"}
package/dist/index.js CHANGED
@@ -47,7 +47,7 @@ const addHandle = async (dependencies, options) => {
47
47
  }).waitUntilExit();
48
48
  };
49
49
  const ensurePackage = async (input) => {
50
- const packageNames = (isString(input) ? [input] : input)?.map((input$1) => input$1.trim()) || [];
50
+ const packageNames = (isString(input) ? [input] : input)?.map((input) => input.trim()) || [];
51
51
  if (packageNames.length === 0) return (await createInput({
52
52
  message: "Enter dependency names (space or comma separated):",
53
53
  validate: (name) => !name ? "Please enter the package name you want to install" : void 0
@@ -69,9 +69,9 @@ const addCommand = (program) => {
69
69
  options: [{
70
70
  label: "Root",
71
71
  value: ROOT_VALUE
72
- }].concat(workspaceNames.map((pkg$1) => ({
73
- label: `${pkg$1.name} (${pkg$1.path})`,
74
- value: pkg$1.name
72
+ }].concat(workspaceNames.map((pkg) => ({
73
+ label: `${pkg.name} (${pkg.path})`,
74
+ value: pkg.name
75
75
  }))),
76
76
  required: true
77
77
  });
@@ -129,11 +129,11 @@ function listCommand(command) {
129
129
  }
130
130
  const selectedPackageInfo = await createSelect({
131
131
  message: "Select the target package to list its dependencies:",
132
- options: workspaceNames.map((pkg$1) => ({
133
- label: `${pkg$1.name} (path: ${pkg$1.path})`,
132
+ options: workspaceNames.map((pkg) => ({
133
+ label: `${pkg.name} (path: ${pkg.path})`,
134
134
  value: {
135
- name: pkg$1.name,
136
- path: pkg$1.path
135
+ name: pkg.name,
136
+ path: pkg.path
137
137
  }
138
138
  }))
139
139
  });
@@ -189,12 +189,12 @@ function removeCommand(command) {
189
189
  }
190
190
  const selectedPackageInfo = await createSelect({
191
191
  message: "Select the target package to remove dependencies from:",
192
- options: workspaceNames.map((pkg$1) => ({
192
+ options: workspaceNames.map((pkg) => ({
193
193
  value: {
194
- name: pkg$1.name,
195
- path: pkg$1.path
194
+ name: pkg.name,
195
+ path: pkg.path
196
196
  },
197
- label: `${pkg$1.name} (path: ${pkg$1.path})`
197
+ label: `${pkg.name} (path: ${pkg.path})`
198
198
  }))
199
199
  });
200
200
  if (!selectedPackageInfo?.name) {
@@ -265,11 +265,11 @@ function upgradeCommand(command) {
265
265
  }
266
266
  const selectedPackageInfo = await createSelect({
267
267
  message: "Select the target package to upgrade dependencies for:",
268
- options: workspaceNames.map((pkg$1) => ({
269
- label: `${pkg$1.name} (path: ${pkg$1.path})`,
268
+ options: workspaceNames.map((pkg) => ({
269
+ label: `${pkg.name} (path: ${pkg.path})`,
270
270
  value: {
271
- name: pkg$1.name,
272
- path: pkg$1.path
271
+ name: pkg.name,
272
+ path: pkg.path
273
273
  }
274
274
  }))
275
275
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["input","pkg","pkg","pkg","pkg"],"sources":["../src/constants.ts","../src/commands/add.ts","../src/commands/clean.ts","../src/commands/list.ts","../src/commands/remove.ts","../src/commands/upgrade.ts","../src/index.ts"],"sourcesContent":["import { createHelpExample } from '@nemo-cli/shared'\n\nexport const HELP_MESSAGE = {\n install: createHelpExample('np add commander @inquirer/prompts', 'np add typescript unbuild vitest --dev --exact'),\n main: createHelpExample('np --version', 'np --help', 'np <command> [options]'),\n clean: createHelpExample('np clean [dirname]'),\n up: createHelpExample('np up'), // Example for the refactored interactive upgrade command\n remove: createHelpExample('np remove'), // Example for the interactive remove command\n list: createHelpExample('np list'), // Example for the interactive list command\n add: createHelpExample('np add', 'np add -p my-package dep1 dep2'),\n}\n\nexport const ERROR_MESSAGE = {\n notRootWorkspace: \"It's not workspace root directory, Please open this command in the workspace root directory\",\n}\n","import { type Command, createCheckbox, createInput, getWorkspaceNames, isString } from '@nemo-cli/shared'\nimport { ErrorMessage, Message, ProcessMessage } from '@nemo-cli/ui'\nimport { HELP_MESSAGE } from '../constants'\n\ntype AddHandleOptions = {\n workspaces: string[]\n saveProd?: boolean\n exact?: boolean\n peer?: boolean\n}\n\nconst ROOT_VALUE = 'root'\nconst addHandle = async (dependencies: string[], options: AddHandleOptions) => {\n const { saveProd = true, exact = false, peer = false, workspaces } = options\n\n const flags = [\n saveProd ? '--save-prod' : '--save-dev',\n exact ? '--save-exact' : '',\n peer ? '--save-peer' : '',\n ].filter(Boolean)\n const isRootWorkspace = workspaces.find((item) => item === ROOT_VALUE)\n\n const filter = isRootWorkspace ? '-w' : workspaces.map((name) => `--filter=${name}`)\n\n const commandParts = [...flags, 'add', ...filter, ...dependencies]\n\n const instance = ProcessMessage({\n command: 'pnpm',\n commandArgs: commandParts,\n onSuccess: () => {\n Message({\n text: 'Dependencies added successfully',\n name: 'summer',\n })\n },\n onError: (_error) => {\n Message({\n text: 'Dependencies added failed',\n name: 'passion',\n })\n // spinner.stop(`An error occurred while adding dependencies: ${error}`)\n },\n })\n await instance.waitUntilExit()\n}\n\nconst ensurePackage = async (input: string | string[]): Promise<string[]> => {\n const inputList = isString(input) ? [input] : input\n const packageNames = inputList?.map((input) => input.trim()) || []\n\n if (packageNames.length === 0) {\n const packageName = await createInput({\n message: 'Enter dependency names (space or comma separated):',\n validate: (name) => (!name ? 'Please enter the package name you want to install' : undefined),\n })\n return packageName.split(/[\\s,,]+/).filter(Boolean)\n }\n return packageNames\n}\n\nexport const addCommand = (program: Command) => {\n program\n .command('add [dependencies...]')\n .alias('install')\n .alias('i')\n .description('Add dependencies to a specific workspace package.')\n .option('-D, --save-dev', 'Is Development dependencies')\n .option('-S, --save-prod', 'Is Productive dependencies')\n .option('-E, --exact', 'Is exact dependencies')\n .addHelpText('after', HELP_MESSAGE.install)\n .action(async (dependencies: string[], options: { saveDev?: boolean; saveProd?: boolean; exact?: boolean }) => {\n const workspaceNames = await getWorkspaceNames()\n if (!workspaceNames?.length) {\n ErrorMessage({\n text: 'No workspace packages found. Please check your pnpm-workspace.yaml or run from a workspace root.',\n name: 'summer',\n })\n return\n }\n\n const workspaceOptions = [{ label: 'Root', value: ROOT_VALUE }].concat(\n workspaceNames.map((pkg) => ({\n label: `${pkg.name} (${pkg.path})`,\n value: pkg.name,\n }))\n )\n\n const workspaces = await createCheckbox({\n message: 'Select a workspace to add dependencies to:',\n options: workspaceOptions,\n required: true,\n })\n\n const finalDependencies = await ensurePackage(dependencies)\n\n await addHandle(finalDependencies, { workspaces, ...options })\n })\n\n return program\n}\n\nexport default addCommand\n","import { type Command, createInput, emptyDirs, getWorkspaceDirs, log } from '@nemo-cli/shared'\n\nimport { HELP_MESSAGE } from '../constants'\n\nconst cleanHandle = (directory: string[]) => {\n try {\n emptyDirs(directory)\n log.success('pnpm clean success!', directory.join(', '))\n } catch (error) {\n log.error('pnpm clean', (error as Error).message ?? 'clean error!')\n process.exit(0)\n }\n}\nexport const cleanCommand = (command: Command) => {\n command\n .command('clean')\n .description('Clear workspace build directory')\n .argument('[dirname]', 'Build directory name')\n .addHelpText('after', HELP_MESSAGE.clean)\n .action(async (dirname) => {\n const workspaceDir = await getWorkspaceDirs()\n const _dirname = dirname || (await createInput({ message: 'Enter folder name in all workspace cleanup' }))\n const target = workspaceDir.packages.map((cwd) => `${cwd}/${_dirname}`)\n cleanHandle(target)\n })\n}\n","import path from 'node:path'\nimport type { Command } from '@nemo-cli/shared'\nimport { colors, createNote, createSelect, getPackageDependencies, getWorkspaceNames, log } from '@nemo-cli/shared'\n\nfunction displayDependencies(\n packageName: string,\n dependencies: Array<{\n name: string\n version: string\n type: 'dependencies' | 'devDependencies'\n }>\n) {\n log.info(`Dependencies for ${packageName}:`)\n\n const prodDeps = dependencies.filter((dep) => dep.type === 'dependencies')\n const devDeps = dependencies.filter((dep) => dep.type === 'devDependencies')\n\n if (prodDeps.length > 0) {\n createNote({\n message: prodDeps.map((d) => `- ${colors.green(d.name)} ${d.version}`).join('\\n'),\n title: 'Production',\n })\n } else {\n log.show(' Production: (No production dependencies)', { type: 'warn' })\n }\n\n if (devDeps.length > 0) {\n createNote({\n message: devDeps.map((d) => `- ${colors.green(d.name)} ${d.version}`).join('\\n'),\n title: 'Development',\n })\n } else {\n log.show(' Development: (No development dependencies)', { type: 'warn' })\n }\n}\n\nexport function listCommand(command: Command) {\n command\n .command('list')\n .alias('ls')\n .description('List dependencies of a specific workspace package.')\n .action(async () => {\n log.info('Fetching workspace packages...')\n const workspaceNames = await getWorkspaceNames()\n if (!workspaceNames || workspaceNames.length === 0) {\n log.error('No workspace packages found. Please check your pnpm-workspace.yaml or run from a workspace root.')\n return\n }\n\n const packageChoices = workspaceNames.map((pkg) => ({\n label: `${pkg.name} (path: ${pkg.path})`,\n value: { name: pkg.name, path: pkg.path },\n }))\n\n const selectedPackageInfo = await createSelect({\n message: 'Select the target package to list its dependencies:',\n options: packageChoices,\n })\n if (!selectedPackageInfo) {\n log.info('No package selected. Aborting list operation.')\n return\n }\n\n const workspaceRoot = process.cwd() // Assuming CLI runs from workspace root\n const selectedPackageDir = path.join(workspaceRoot, selectedPackageInfo.path)\n\n log.show(`Fetching dependencies for package ${selectedPackageInfo.name}...`)\n\n const dependencies = await getPackageDependencies(selectedPackageDir)\n\n if (!dependencies || dependencies.length === 0) {\n log.info(`No dependencies found in package ${selectedPackageInfo.name}.`)\n return\n }\n\n displayDependencies(selectedPackageInfo.name, dependencies)\n })\n}\n","import path from 'node:path'\nimport type { Command } from '@nemo-cli/shared'\nimport {\n createCheckbox,\n createSelect,\n createSpinner,\n getPackageDependencies,\n getWorkspaceNames,\n handleError,\n log,\n x,\n} from '@nemo-cli/shared'\n\nasync function removeHandle(packageName: string, dependencies: string[]) {\n if (!packageName || dependencies.length === 0) {\n log.error('Package name and at least one dependency to remove are required.')\n return\n }\n\n const depsString = dependencies.join(' ')\n log.info(`Attempting to remove dependencies [${depsString}] from package [${packageName}]...`)\n\n try {\n const commandParts = ['remove', ...dependencies, '--filter', packageName]\n log.info(`Executing command: pnpm remove ${depsString} --filter ${packageName}`)\n\n const { stdout, stderr, exitCode } = await x('pnpm', commandParts)\n\n if (stdout) {\n log.info(`Command output (stdout):\\n${stdout}`)\n }\n // pnpm often uses stderr for progress or warnings, not just errors for `remove`\n if (stderr) {\n log.warn(`Command output (stderr):\\n${stderr}`)\n }\n\n if (exitCode) {\n log.error(`Failed to remove dependencies. Command exited with code ${exitCode}.`)\n } else {\n log.success(`Successfully removed dependencies [${depsString}] from package [${packageName}].`)\n }\n } catch (error: unknown) {\n handleError(error, 'An error occurred while removing dependencies: ')\n }\n}\n\nexport function removeCommand(command: Command) {\n command\n .command('remove')\n .alias('rm')\n .description('Remove dependencies from a specific workspace package.')\n .action(async () => {\n log.info('Fetching workspace packages...')\n const workspaceNames = await getWorkspaceNames()\n if (!workspaceNames || workspaceNames.length === 0) {\n log.error('No workspace packages found. Please check your pnpm-workspace.yaml or run from a workspace root.')\n return\n }\n\n const packageChoices = workspaceNames.map((pkg) => ({\n value: { name: pkg.name, path: pkg.path },\n label: `${pkg.name} (path: ${pkg.path})`,\n }))\n\n const selectedPackageInfo = await createSelect({\n message: 'Select the target package to remove dependencies from:',\n options: packageChoices,\n })\n if (!selectedPackageInfo?.name) {\n log.info('No package selected. Aborting remove operation.')\n return\n }\n\n const workspaceRoot = process.cwd() // Assuming CLI runs from workspace root\n const selectedPackageDir = path.join(workspaceRoot, selectedPackageInfo.path)\n\n log.info(`Fetching dependencies for package ${selectedPackageInfo.name}...`)\n const dependencies = await getPackageDependencies(selectedPackageDir)\n\n if (!dependencies || dependencies.length === 0) {\n log.info(`No dependencies found in package ${selectedPackageInfo.name}. Nothing to remove.`)\n return\n }\n\n const dependencyChoices = dependencies.map((dep) => ({\n value: dep.name,\n label: `${dep.name} (current: ${dep.version}, type: ${dep.type})`,\n }))\n\n const selectedDependencies = await createCheckbox({\n message: `Select dependencies to remove from ${selectedPackageInfo.name} (space to select, enter to confirm):`,\n options: dependencyChoices,\n })\n\n if (!selectedDependencies || selectedDependencies.length === 0) {\n log.info('No dependencies selected for removal. Aborting.')\n return\n }\n const spinner = createSpinner('Removing dependencies...')\n await removeHandle(selectedPackageInfo.name, selectedDependencies)\n spinner.stop('Removed dependencies')\n })\n}\n","import path from 'node:path'\nimport type { Command } from '@nemo-cli/shared'\nimport {\n createCheckbox,\n createSelect,\n getPackageDependencies,\n getWorkspaceNames,\n handleError,\n log,\n x,\n} from '@nemo-cli/shared'\n\n// New upgradeHandle function\nasync function upgradeHandle(packageName: string, dependencies: string[]) {\n if (!packageName || dependencies.length === 0) {\n log.error('Package name and at least one dependency to upgrade are required.')\n return\n }\n\n log.info(\n `Attempting to upgrade dependencies [${dependencies.join(', ')}] in package [${packageName}] to their latest versions...`\n )\n\n for (const dep of dependencies) {\n const depWithVersion = `${dep}@latest`\n log.info(`Upgrading ${dep} in ${packageName} to @latest... (pnpm add ${depWithVersion} --filter ${packageName})`)\n try {\n const commandParts = ['add', depWithVersion, '--filter', packageName]\n const { stdout, stderr, exitCode } = await x('pnpm', commandParts)\n\n if (stdout) {\n log.info(`Output for ${depWithVersion} (stdout):\\n${stdout}`)\n }\n if (stderr) {\n // pnpm often uses stderr for progress or warnings, not just errors\n log.warn(`Output for ${depWithVersion} (stderr):\\n${stderr}`)\n }\n\n if (exitCode) {\n log.error(`Failed to upgrade ${dep} in ${packageName}. Command exited with code ${exitCode}.`)\n } else {\n log.success(`Successfully upgraded ${dep} in ${packageName}.`)\n }\n } catch (error: unknown) {\n handleError(error, `An error occurred while upgrading ${dep} in ${packageName}: `)\n }\n }\n log.info(`Finished upgrade process for package [${packageName}].`)\n}\n\n// Refactored upgradeCommand function\nexport function upgradeCommand(command: Command) {\n command\n .command('upgrade')\n .alias('up')\n .description('Upgrade dependencies in a specific workspace package.')\n // Old options (-L, -g) are removed as per requirements\n .action(async () => {\n log.info('Fetching workspace packages...')\n const workspaceNames = await getWorkspaceNames()\n if (!workspaceNames || workspaceNames.length === 0) {\n log.error('No workspace packages found. Please check your pnpm-workspace.yaml or run from a workspace root.')\n return\n }\n\n const packageChoices = workspaceNames.map((pkg) => ({\n label: `${pkg.name} (path: ${pkg.path})`,\n value: { name: pkg.name, path: pkg.path }, // Store both name and relative path\n }))\n\n const selectedPackageInfo = await createSelect({\n message: 'Select the target package to upgrade dependencies for:',\n options: packageChoices,\n })\n if (!selectedPackageInfo?.name) {\n log.info('No package selected. Aborting upgrade.')\n return\n }\n\n // Construct full path to the selected package's directory from workspace root\n // Assuming getWorkspacePackages returns paths relative to workspace root\n // And current working directory for getPackageDependencies should be absolute or relative to where the script runs.\n // For simplicity, we assume the shared functions handle path resolution correctly or this CLI runs from workspace root.\n // If packageInfo.path is relative to workspace root:\n const workspaceRoot = process.cwd() // Or find it dynamically if needed\n const selectedPackageDir = path.join(workspaceRoot, selectedPackageInfo.path)\n\n log.info(`Fetching dependencies for package ${selectedPackageInfo.name}...`)\n const dependencies = await getPackageDependencies(selectedPackageDir)\n\n if (!dependencies || dependencies.length === 0) {\n log.info(`No dependencies found in package ${selectedPackageInfo.name}. Nothing to upgrade.`)\n return\n }\n\n const dependencyChoices = dependencies.map((dep) => ({\n label: `${dep.name} (current: ${dep.version}, type: ${dep.type})`,\n value: dep.name,\n }))\n\n const selectedDependencies = await createCheckbox({\n message: `Select dependencies to upgrade in ${selectedPackageInfo.name} (space to select, enter to confirm):`,\n options: dependencyChoices,\n })\n\n if (!selectedDependencies || selectedDependencies.length === 0) {\n log.info('No dependencies selected for upgrade. Aborting.')\n return\n }\n\n await upgradeHandle(selectedPackageInfo.name, selectedDependencies)\n })\n}\n","import { createCommand, readPackage } from '@nemo-cli/shared'\n\nimport { addCommand } from './commands/add'\nimport { cleanCommand } from './commands/clean'\nimport { listCommand } from './commands/list'\nimport { removeCommand } from './commands/remove'\nimport { upgradeCommand } from './commands/upgrade'\nimport { HELP_MESSAGE } from './constants'\n\nexport const pkg = readPackage(import.meta, '..')\n\nexport const init = () => {\n const command = createCommand('np')\n .version(pkg.version)\n .description(`${pkg.name} CLI helper for pnpm workspaces`)\n .addHelpText('after', HELP_MESSAGE.main)\n\n addCommand(command)\n upgradeCommand(command)\n removeCommand(command)\n listCommand(command)\n cleanCommand(command)\n\n return command\n}\n\nexport const run = () => {\n const command = init()\n command.parse(process.argv)\n}\n"],"mappings":";;;;;AAEA,MAAa,eAAe;CAC1B,SAAS,kBAAkB,sCAAsC,iDAAiD;CAClH,MAAM,kBAAkB,gBAAgB,aAAa,yBAAyB;CAC9E,OAAO,kBAAkB,qBAAqB;CAC9C,IAAI,kBAAkB,QAAQ;CAC9B,QAAQ,kBAAkB,YAAY;CACtC,MAAM,kBAAkB,UAAU;CAClC,KAAK,kBAAkB,UAAU,iCAAiC;CACnE;;;;ACCD,MAAM,aAAa;AACnB,MAAM,YAAY,OAAO,cAAwB,YAA8B;CAC7E,MAAM,EAAE,WAAW,MAAM,QAAQ,OAAO,OAAO,OAAO,eAAe;CAErE,MAAM,QAAQ;EACZ,WAAW,gBAAgB;EAC3B,QAAQ,iBAAiB;EACzB,OAAO,gBAAgB;EACxB,CAAC,OAAO,QAAQ;CAGjB,MAAM,SAFkB,WAAW,MAAM,SAAS,SAAS,WAAW,GAErC,OAAO,WAAW,KAAK,SAAS,YAAY,OAAO;AAqBpF,OAjBiB,eAAe;EAC9B,SAAS;EACT,aAJmB;GAAC,GAAG;GAAO;GAAO,GAAG;GAAQ,GAAG;GAAa;EAKhE,iBAAiB;AACf,WAAQ;IACN,MAAM;IACN,MAAM;IACP,CAAC;;EAEJ,UAAU,WAAW;AACnB,WAAQ;IACN,MAAM;IACN,MAAM;IACP,CAAC;;EAGL,CAAC,CACa,eAAe;;AAGhC,MAAM,gBAAgB,OAAO,UAAgD;CAE3E,MAAM,gBADY,SAAS,MAAM,GAAG,CAAC,MAAM,GAAG,QACd,KAAK,YAAUA,QAAM,MAAM,CAAC,IAAI,EAAE;AAElE,KAAI,aAAa,WAAW,EAK1B,SAJoB,MAAM,YAAY;EACpC,SAAS;EACT,WAAW,SAAU,CAAC,OAAO,sDAAsD;EACpF,CAAC,EACiB,MAAM,UAAU,CAAC,OAAO,QAAQ;AAErD,QAAO;;AAGT,MAAa,cAAc,YAAqB;AAC9C,SACG,QAAQ,wBAAwB,CAChC,MAAM,UAAU,CAChB,MAAM,IAAI,CACV,YAAY,oDAAoD,CAChE,OAAO,kBAAkB,8BAA8B,CACvD,OAAO,mBAAmB,6BAA6B,CACvD,OAAO,eAAe,wBAAwB,CAC9C,YAAY,SAAS,aAAa,QAAQ,CAC1C,OAAO,OAAO,cAAwB,YAAwE;EAC7G,MAAM,iBAAiB,MAAM,mBAAmB;AAChD,MAAI,CAAC,gBAAgB,QAAQ;AAC3B,gBAAa;IACX,MAAM;IACN,MAAM;IACP,CAAC;AACF;;EAUF,MAAM,aAAa,MAAM,eAAe;GACtC,SAAS;GACT,SATuB,CAAC;IAAE,OAAO;IAAQ,OAAO;IAAY,CAAC,CAAC,OAC9D,eAAe,KAAK,WAAS;IAC3B,OAAO,GAAGC,MAAI,KAAK,IAAIA,MAAI,KAAK;IAChC,OAAOA,MAAI;IACZ,EAAE,CACJ;GAKC,UAAU;GACX,CAAC;AAIF,QAAM,UAFoB,MAAM,cAAc,aAAa,EAExB;GAAE;GAAY,GAAG;GAAS,CAAC;GAC9D;AAEJ,QAAO;;;;;AC9FT,MAAM,eAAe,cAAwB;AAC3C,KAAI;AACF,YAAU,UAAU;AACpB,MAAI,QAAQ,uBAAuB,UAAU,KAAK,KAAK,CAAC;UACjD,OAAO;AACd,MAAI,MAAM,cAAe,MAAgB,WAAW,eAAe;AACnE,UAAQ,KAAK,EAAE;;;AAGnB,MAAa,gBAAgB,YAAqB;AAChD,SACG,QAAQ,QAAQ,CAChB,YAAY,kCAAkC,CAC9C,SAAS,aAAa,uBAAuB,CAC7C,YAAY,SAAS,aAAa,MAAM,CACxC,OAAO,OAAO,YAAY;EACzB,MAAM,eAAe,MAAM,kBAAkB;EAC7C,MAAM,WAAW,WAAY,MAAM,YAAY,EAAE,SAAS,8CAA8C,CAAC;AAEzG,cADe,aAAa,SAAS,KAAK,QAAQ,GAAG,IAAI,GAAG,WAAW,CACpD;GACnB;;;;;ACpBN,SAAS,oBACP,aACA,cAKA;AACA,KAAI,KAAK,oBAAoB,YAAY,GAAG;CAE5C,MAAM,WAAW,aAAa,QAAQ,QAAQ,IAAI,SAAS,eAAe;CAC1E,MAAM,UAAU,aAAa,QAAQ,QAAQ,IAAI,SAAS,kBAAkB;AAE5E,KAAI,SAAS,SAAS,EACpB,YAAW;EACT,SAAS,SAAS,KAAK,MAAM,KAAK,OAAO,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,KAAK;EACjF,OAAO;EACR,CAAC;KAEF,KAAI,KAAK,8CAA8C,EAAE,MAAM,QAAQ,CAAC;AAG1E,KAAI,QAAQ,SAAS,EACnB,YAAW;EACT,SAAS,QAAQ,KAAK,MAAM,KAAK,OAAO,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,KAAK;EAChF,OAAO;EACR,CAAC;KAEF,KAAI,KAAK,gDAAgD,EAAE,MAAM,QAAQ,CAAC;;AAI9E,SAAgB,YAAY,SAAkB;AAC5C,SACG,QAAQ,OAAO,CACf,MAAM,KAAK,CACX,YAAY,qDAAqD,CACjE,OAAO,YAAY;AAClB,MAAI,KAAK,iCAAiC;EAC1C,MAAM,iBAAiB,MAAM,mBAAmB;AAChD,MAAI,CAAC,kBAAkB,eAAe,WAAW,GAAG;AAClD,OAAI,MAAM,mGAAmG;AAC7G;;EAQF,MAAM,sBAAsB,MAAM,aAAa;GAC7C,SAAS;GACT,SAPqB,eAAe,KAAK,WAAS;IAClD,OAAO,GAAGC,MAAI,KAAK,UAAUA,MAAI,KAAK;IACtC,OAAO;KAAE,MAAMA,MAAI;KAAM,MAAMA,MAAI;KAAM;IAC1C,EAAE;GAKF,CAAC;AACF,MAAI,CAAC,qBAAqB;AACxB,OAAI,KAAK,gDAAgD;AACzD;;EAGF,MAAM,gBAAgB,QAAQ,KAAK;EACnC,MAAM,qBAAqB,KAAK,KAAK,eAAe,oBAAoB,KAAK;AAE7E,MAAI,KAAK,qCAAqC,oBAAoB,KAAK,KAAK;EAE5E,MAAM,eAAe,MAAM,uBAAuB,mBAAmB;AAErE,MAAI,CAAC,gBAAgB,aAAa,WAAW,GAAG;AAC9C,OAAI,KAAK,oCAAoC,oBAAoB,KAAK,GAAG;AACzE;;AAGF,sBAAoB,oBAAoB,MAAM,aAAa;GAC3D;;;;;AC/DN,eAAe,aAAa,aAAqB,cAAwB;AACvE,KAAI,CAAC,eAAe,aAAa,WAAW,GAAG;AAC7C,MAAI,MAAM,mEAAmE;AAC7E;;CAGF,MAAM,aAAa,aAAa,KAAK,IAAI;AACzC,KAAI,KAAK,sCAAsC,WAAW,kBAAkB,YAAY,MAAM;AAE9F,KAAI;EACF,MAAM,eAAe;GAAC;GAAU,GAAG;GAAc;GAAY;GAAY;AACzE,MAAI,KAAK,kCAAkC,WAAW,YAAY,cAAc;EAEhF,MAAM,EAAE,QAAQ,QAAQ,aAAa,MAAM,EAAE,QAAQ,aAAa;AAElE,MAAI,OACF,KAAI,KAAK,6BAA6B,SAAS;AAGjD,MAAI,OACF,KAAI,KAAK,6BAA6B,SAAS;AAGjD,MAAI,SACF,KAAI,MAAM,2DAA2D,SAAS,GAAG;MAEjF,KAAI,QAAQ,sCAAsC,WAAW,kBAAkB,YAAY,IAAI;UAE1F,OAAgB;AACvB,cAAY,OAAO,kDAAkD;;;AAIzE,SAAgB,cAAc,SAAkB;AAC9C,SACG,QAAQ,SAAS,CACjB,MAAM,KAAK,CACX,YAAY,yDAAyD,CACrE,OAAO,YAAY;AAClB,MAAI,KAAK,iCAAiC;EAC1C,MAAM,iBAAiB,MAAM,mBAAmB;AAChD,MAAI,CAAC,kBAAkB,eAAe,WAAW,GAAG;AAClD,OAAI,MAAM,mGAAmG;AAC7G;;EAQF,MAAM,sBAAsB,MAAM,aAAa;GAC7C,SAAS;GACT,SAPqB,eAAe,KAAK,WAAS;IAClD,OAAO;KAAE,MAAMC,MAAI;KAAM,MAAMA,MAAI;KAAM;IACzC,OAAO,GAAGA,MAAI,KAAK,UAAUA,MAAI,KAAK;IACvC,EAAE;GAKF,CAAC;AACF,MAAI,CAAC,qBAAqB,MAAM;AAC9B,OAAI,KAAK,kDAAkD;AAC3D;;EAGF,MAAM,gBAAgB,QAAQ,KAAK;EACnC,MAAM,qBAAqB,KAAK,KAAK,eAAe,oBAAoB,KAAK;AAE7E,MAAI,KAAK,qCAAqC,oBAAoB,KAAK,KAAK;EAC5E,MAAM,eAAe,MAAM,uBAAuB,mBAAmB;AAErE,MAAI,CAAC,gBAAgB,aAAa,WAAW,GAAG;AAC9C,OAAI,KAAK,oCAAoC,oBAAoB,KAAK,sBAAsB;AAC5F;;EAGF,MAAM,oBAAoB,aAAa,KAAK,SAAS;GACnD,OAAO,IAAI;GACX,OAAO,GAAG,IAAI,KAAK,aAAa,IAAI,QAAQ,UAAU,IAAI,KAAK;GAChE,EAAE;EAEH,MAAM,uBAAuB,MAAM,eAAe;GAChD,SAAS,sCAAsC,oBAAoB,KAAK;GACxE,SAAS;GACV,CAAC;AAEF,MAAI,CAAC,wBAAwB,qBAAqB,WAAW,GAAG;AAC9D,OAAI,KAAK,kDAAkD;AAC3D;;EAEF,MAAM,UAAU,cAAc,2BAA2B;AACzD,QAAM,aAAa,oBAAoB,MAAM,qBAAqB;AAClE,UAAQ,KAAK,uBAAuB;GACpC;;;;;ACxFN,eAAe,cAAc,aAAqB,cAAwB;AACxE,KAAI,CAAC,eAAe,aAAa,WAAW,GAAG;AAC7C,MAAI,MAAM,oEAAoE;AAC9E;;AAGF,KAAI,KACF,uCAAuC,aAAa,KAAK,KAAK,CAAC,gBAAgB,YAAY,+BAC5F;AAED,MAAK,MAAM,OAAO,cAAc;EAC9B,MAAM,iBAAiB,GAAG,IAAI;AAC9B,MAAI,KAAK,aAAa,IAAI,MAAM,YAAY,2BAA2B,eAAe,YAAY,YAAY,GAAG;AACjH,MAAI;GAEF,MAAM,EAAE,QAAQ,QAAQ,aAAa,MAAM,EAAE,QADxB;IAAC;IAAO;IAAgB;IAAY;IAAY,CACH;AAElE,OAAI,OACF,KAAI,KAAK,cAAc,eAAe,cAAc,SAAS;AAE/D,OAAI,OAEF,KAAI,KAAK,cAAc,eAAe,cAAc,SAAS;AAG/D,OAAI,SACF,KAAI,MAAM,qBAAqB,IAAI,MAAM,YAAY,6BAA6B,SAAS,GAAG;OAE9F,KAAI,QAAQ,yBAAyB,IAAI,MAAM,YAAY,GAAG;WAEzD,OAAgB;AACvB,eAAY,OAAO,qCAAqC,IAAI,MAAM,YAAY,IAAI;;;AAGtF,KAAI,KAAK,yCAAyC,YAAY,IAAI;;AAIpE,SAAgB,eAAe,SAAkB;AAC/C,SACG,QAAQ,UAAU,CAClB,MAAM,KAAK,CACX,YAAY,wDAAwD,CAEpE,OAAO,YAAY;AAClB,MAAI,KAAK,iCAAiC;EAC1C,MAAM,iBAAiB,MAAM,mBAAmB;AAChD,MAAI,CAAC,kBAAkB,eAAe,WAAW,GAAG;AAClD,OAAI,MAAM,mGAAmG;AAC7G;;EAQF,MAAM,sBAAsB,MAAM,aAAa;GAC7C,SAAS;GACT,SAPqB,eAAe,KAAK,WAAS;IAClD,OAAO,GAAGC,MAAI,KAAK,UAAUA,MAAI,KAAK;IACtC,OAAO;KAAE,MAAMA,MAAI;KAAM,MAAMA,MAAI;KAAM;IAC1C,EAAE;GAKF,CAAC;AACF,MAAI,CAAC,qBAAqB,MAAM;AAC9B,OAAI,KAAK,yCAAyC;AAClD;;EAQF,MAAM,gBAAgB,QAAQ,KAAK;EACnC,MAAM,qBAAqB,KAAK,KAAK,eAAe,oBAAoB,KAAK;AAE7E,MAAI,KAAK,qCAAqC,oBAAoB,KAAK,KAAK;EAC5E,MAAM,eAAe,MAAM,uBAAuB,mBAAmB;AAErE,MAAI,CAAC,gBAAgB,aAAa,WAAW,GAAG;AAC9C,OAAI,KAAK,oCAAoC,oBAAoB,KAAK,uBAAuB;AAC7F;;EAGF,MAAM,oBAAoB,aAAa,KAAK,SAAS;GACnD,OAAO,GAAG,IAAI,KAAK,aAAa,IAAI,QAAQ,UAAU,IAAI,KAAK;GAC/D,OAAO,IAAI;GACZ,EAAE;EAEH,MAAM,uBAAuB,MAAM,eAAe;GAChD,SAAS,qCAAqC,oBAAoB,KAAK;GACvE,SAAS;GACV,CAAC;AAEF,MAAI,CAAC,wBAAwB,qBAAqB,WAAW,GAAG;AAC9D,OAAI,KAAK,kDAAkD;AAC3D;;AAGF,QAAM,cAAc,oBAAoB,MAAM,qBAAqB;GACnE;;;;;ACtGN,MAAa,MAAM,YAAY,OAAO,MAAM,KAAK;AAEjD,MAAa,aAAa;CACxB,MAAM,UAAU,cAAc,KAAK,CAChC,QAAQ,IAAI,QAAQ,CACpB,YAAY,GAAG,IAAI,KAAK,iCAAiC,CACzD,YAAY,SAAS,aAAa,KAAK;AAE1C,YAAW,QAAQ;AACnB,gBAAe,QAAQ;AACvB,eAAc,QAAQ;AACtB,aAAY,QAAQ;AACpB,cAAa,QAAQ;AAErB,QAAO;;AAGT,MAAa,YAAY;AAEvB,CADgB,MAAM,CACd,MAAM,QAAQ,KAAK"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/constants.ts","../src/commands/add.ts","../src/commands/clean.ts","../src/commands/list.ts","../src/commands/remove.ts","../src/commands/upgrade.ts","../src/index.ts"],"sourcesContent":["import { createHelpExample } from '@nemo-cli/shared'\n\nexport const HELP_MESSAGE = {\n install: createHelpExample('np add commander @inquirer/prompts', 'np add typescript unbuild vitest --dev --exact'),\n main: createHelpExample('np --version', 'np --help', 'np <command> [options]'),\n clean: createHelpExample('np clean [dirname]'),\n up: createHelpExample('np up'), // Example for the refactored interactive upgrade command\n remove: createHelpExample('np remove'), // Example for the interactive remove command\n list: createHelpExample('np list'), // Example for the interactive list command\n add: createHelpExample('np add', 'np add -p my-package dep1 dep2'),\n}\n\nexport const ERROR_MESSAGE = {\n notRootWorkspace: \"It's not workspace root directory, Please open this command in the workspace root directory\",\n}\n","import { type Command, createCheckbox, createInput, getWorkspaceNames, isString } from '@nemo-cli/shared'\nimport { ErrorMessage, Message, ProcessMessage } from '@nemo-cli/ui'\nimport { HELP_MESSAGE } from '../constants'\n\ntype AddHandleOptions = {\n workspaces: string[]\n saveProd?: boolean\n exact?: boolean\n peer?: boolean\n}\n\nconst ROOT_VALUE = 'root'\nconst addHandle = async (dependencies: string[], options: AddHandleOptions) => {\n const { saveProd = true, exact = false, peer = false, workspaces } = options\n\n const flags = [\n saveProd ? '--save-prod' : '--save-dev',\n exact ? '--save-exact' : '',\n peer ? '--save-peer' : '',\n ].filter(Boolean)\n const isRootWorkspace = workspaces.find((item) => item === ROOT_VALUE)\n\n const filter = isRootWorkspace ? '-w' : workspaces.map((name) => `--filter=${name}`)\n\n const commandParts = [...flags, 'add', ...filter, ...dependencies]\n\n const instance = ProcessMessage({\n command: 'pnpm',\n commandArgs: commandParts,\n onSuccess: () => {\n Message({\n text: 'Dependencies added successfully',\n name: 'summer',\n })\n },\n onError: (_error) => {\n Message({\n text: 'Dependencies added failed',\n name: 'passion',\n })\n // spinner.stop(`An error occurred while adding dependencies: ${error}`)\n },\n })\n await instance.waitUntilExit()\n}\n\nconst ensurePackage = async (input: string | string[]): Promise<string[]> => {\n const inputList = isString(input) ? [input] : input\n const packageNames = inputList?.map((input) => input.trim()) || []\n\n if (packageNames.length === 0) {\n const packageName = await createInput({\n message: 'Enter dependency names (space or comma separated):',\n validate: (name) => (!name ? 'Please enter the package name you want to install' : undefined),\n })\n return packageName.split(/[\\s,,]+/).filter(Boolean)\n }\n return packageNames\n}\n\nexport const addCommand = (program: Command) => {\n program\n .command('add [dependencies...]')\n .alias('install')\n .alias('i')\n .description('Add dependencies to a specific workspace package.')\n .option('-D, --save-dev', 'Is Development dependencies')\n .option('-S, --save-prod', 'Is Productive dependencies')\n .option('-E, --exact', 'Is exact dependencies')\n .addHelpText('after', HELP_MESSAGE.install)\n .action(async (dependencies: string[], options: { saveDev?: boolean; saveProd?: boolean; exact?: boolean }) => {\n const workspaceNames = await getWorkspaceNames()\n if (!workspaceNames?.length) {\n ErrorMessage({\n text: 'No workspace packages found. Please check your pnpm-workspace.yaml or run from a workspace root.',\n name: 'summer',\n })\n return\n }\n\n const workspaceOptions = [{ label: 'Root', value: ROOT_VALUE }].concat(\n workspaceNames.map((pkg) => ({\n label: `${pkg.name} (${pkg.path})`,\n value: pkg.name,\n }))\n )\n\n const workspaces = await createCheckbox({\n message: 'Select a workspace to add dependencies to:',\n options: workspaceOptions,\n required: true,\n })\n\n const finalDependencies = await ensurePackage(dependencies)\n\n await addHandle(finalDependencies, { workspaces, ...options })\n })\n\n return program\n}\n\nexport default addCommand\n","import { type Command, createInput, emptyDirs, getWorkspaceDirs, log } from '@nemo-cli/shared'\n\nimport { HELP_MESSAGE } from '../constants'\n\nconst cleanHandle = (directory: string[]) => {\n try {\n emptyDirs(directory)\n log.success('pnpm clean success!', directory.join(', '))\n } catch (error) {\n log.error('pnpm clean', (error as Error).message ?? 'clean error!')\n process.exit(0)\n }\n}\nexport const cleanCommand = (command: Command) => {\n command\n .command('clean')\n .description('Clear workspace build directory')\n .argument('[dirname]', 'Build directory name')\n .addHelpText('after', HELP_MESSAGE.clean)\n .action(async (dirname) => {\n const workspaceDir = await getWorkspaceDirs()\n const _dirname = dirname || (await createInput({ message: 'Enter folder name in all workspace cleanup' }))\n const target = workspaceDir.packages.map((cwd) => `${cwd}/${_dirname}`)\n cleanHandle(target)\n })\n}\n","import path from 'node:path'\nimport type { Command } from '@nemo-cli/shared'\nimport { colors, createNote, createSelect, getPackageDependencies, getWorkspaceNames, log } from '@nemo-cli/shared'\n\nfunction displayDependencies(\n packageName: string,\n dependencies: Array<{\n name: string\n version: string\n type: 'dependencies' | 'devDependencies'\n }>\n) {\n log.info(`Dependencies for ${packageName}:`)\n\n const prodDeps = dependencies.filter((dep) => dep.type === 'dependencies')\n const devDeps = dependencies.filter((dep) => dep.type === 'devDependencies')\n\n if (prodDeps.length > 0) {\n createNote({\n message: prodDeps.map((d) => `- ${colors.green(d.name)} ${d.version}`).join('\\n'),\n title: 'Production',\n })\n } else {\n log.show(' Production: (No production dependencies)', { type: 'warn' })\n }\n\n if (devDeps.length > 0) {\n createNote({\n message: devDeps.map((d) => `- ${colors.green(d.name)} ${d.version}`).join('\\n'),\n title: 'Development',\n })\n } else {\n log.show(' Development: (No development dependencies)', { type: 'warn' })\n }\n}\n\nexport function listCommand(command: Command) {\n command\n .command('list')\n .alias('ls')\n .description('List dependencies of a specific workspace package.')\n .action(async () => {\n log.info('Fetching workspace packages...')\n const workspaceNames = await getWorkspaceNames()\n if (!workspaceNames || workspaceNames.length === 0) {\n log.error('No workspace packages found. Please check your pnpm-workspace.yaml or run from a workspace root.')\n return\n }\n\n const packageChoices = workspaceNames.map((pkg) => ({\n label: `${pkg.name} (path: ${pkg.path})`,\n value: { name: pkg.name, path: pkg.path },\n }))\n\n const selectedPackageInfo = await createSelect({\n message: 'Select the target package to list its dependencies:',\n options: packageChoices,\n })\n if (!selectedPackageInfo) {\n log.info('No package selected. Aborting list operation.')\n return\n }\n\n const workspaceRoot = process.cwd() // Assuming CLI runs from workspace root\n const selectedPackageDir = path.join(workspaceRoot, selectedPackageInfo.path)\n\n log.show(`Fetching dependencies for package ${selectedPackageInfo.name}...`)\n\n const dependencies = await getPackageDependencies(selectedPackageDir)\n\n if (!dependencies || dependencies.length === 0) {\n log.info(`No dependencies found in package ${selectedPackageInfo.name}.`)\n return\n }\n\n displayDependencies(selectedPackageInfo.name, dependencies)\n })\n}\n","import path from 'node:path'\nimport type { Command } from '@nemo-cli/shared'\nimport {\n createCheckbox,\n createSelect,\n createSpinner,\n getPackageDependencies,\n getWorkspaceNames,\n handleError,\n log,\n x,\n} from '@nemo-cli/shared'\n\nasync function removeHandle(packageName: string, dependencies: string[]) {\n if (!packageName || dependencies.length === 0) {\n log.error('Package name and at least one dependency to remove are required.')\n return\n }\n\n const depsString = dependencies.join(' ')\n log.info(`Attempting to remove dependencies [${depsString}] from package [${packageName}]...`)\n\n try {\n const commandParts = ['remove', ...dependencies, '--filter', packageName]\n log.info(`Executing command: pnpm remove ${depsString} --filter ${packageName}`)\n\n const { stdout, stderr, exitCode } = await x('pnpm', commandParts)\n\n if (stdout) {\n log.info(`Command output (stdout):\\n${stdout}`)\n }\n // pnpm often uses stderr for progress or warnings, not just errors for `remove`\n if (stderr) {\n log.warn(`Command output (stderr):\\n${stderr}`)\n }\n\n if (exitCode) {\n log.error(`Failed to remove dependencies. Command exited with code ${exitCode}.`)\n } else {\n log.success(`Successfully removed dependencies [${depsString}] from package [${packageName}].`)\n }\n } catch (error: unknown) {\n handleError(error, 'An error occurred while removing dependencies: ')\n }\n}\n\nexport function removeCommand(command: Command) {\n command\n .command('remove')\n .alias('rm')\n .description('Remove dependencies from a specific workspace package.')\n .action(async () => {\n log.info('Fetching workspace packages...')\n const workspaceNames = await getWorkspaceNames()\n if (!workspaceNames || workspaceNames.length === 0) {\n log.error('No workspace packages found. Please check your pnpm-workspace.yaml or run from a workspace root.')\n return\n }\n\n const packageChoices = workspaceNames.map((pkg) => ({\n value: { name: pkg.name, path: pkg.path },\n label: `${pkg.name} (path: ${pkg.path})`,\n }))\n\n const selectedPackageInfo = await createSelect({\n message: 'Select the target package to remove dependencies from:',\n options: packageChoices,\n })\n if (!selectedPackageInfo?.name) {\n log.info('No package selected. Aborting remove operation.')\n return\n }\n\n const workspaceRoot = process.cwd() // Assuming CLI runs from workspace root\n const selectedPackageDir = path.join(workspaceRoot, selectedPackageInfo.path)\n\n log.info(`Fetching dependencies for package ${selectedPackageInfo.name}...`)\n const dependencies = await getPackageDependencies(selectedPackageDir)\n\n if (!dependencies || dependencies.length === 0) {\n log.info(`No dependencies found in package ${selectedPackageInfo.name}. Nothing to remove.`)\n return\n }\n\n const dependencyChoices = dependencies.map((dep) => ({\n value: dep.name,\n label: `${dep.name} (current: ${dep.version}, type: ${dep.type})`,\n }))\n\n const selectedDependencies = await createCheckbox({\n message: `Select dependencies to remove from ${selectedPackageInfo.name} (space to select, enter to confirm):`,\n options: dependencyChoices,\n })\n\n if (!selectedDependencies || selectedDependencies.length === 0) {\n log.info('No dependencies selected for removal. Aborting.')\n return\n }\n const spinner = createSpinner('Removing dependencies...')\n await removeHandle(selectedPackageInfo.name, selectedDependencies)\n spinner.stop('Removed dependencies')\n })\n}\n","import path from 'node:path'\nimport type { Command } from '@nemo-cli/shared'\nimport {\n createCheckbox,\n createSelect,\n getPackageDependencies,\n getWorkspaceNames,\n handleError,\n log,\n x,\n} from '@nemo-cli/shared'\n\n// New upgradeHandle function\nasync function upgradeHandle(packageName: string, dependencies: string[]) {\n if (!packageName || dependencies.length === 0) {\n log.error('Package name and at least one dependency to upgrade are required.')\n return\n }\n\n log.info(\n `Attempting to upgrade dependencies [${dependencies.join(', ')}] in package [${packageName}] to their latest versions...`\n )\n\n for (const dep of dependencies) {\n const depWithVersion = `${dep}@latest`\n log.info(`Upgrading ${dep} in ${packageName} to @latest... (pnpm add ${depWithVersion} --filter ${packageName})`)\n try {\n const commandParts = ['add', depWithVersion, '--filter', packageName]\n const { stdout, stderr, exitCode } = await x('pnpm', commandParts)\n\n if (stdout) {\n log.info(`Output for ${depWithVersion} (stdout):\\n${stdout}`)\n }\n if (stderr) {\n // pnpm often uses stderr for progress or warnings, not just errors\n log.warn(`Output for ${depWithVersion} (stderr):\\n${stderr}`)\n }\n\n if (exitCode) {\n log.error(`Failed to upgrade ${dep} in ${packageName}. Command exited with code ${exitCode}.`)\n } else {\n log.success(`Successfully upgraded ${dep} in ${packageName}.`)\n }\n } catch (error: unknown) {\n handleError(error, `An error occurred while upgrading ${dep} in ${packageName}: `)\n }\n }\n log.info(`Finished upgrade process for package [${packageName}].`)\n}\n\n// Refactored upgradeCommand function\nexport function upgradeCommand(command: Command) {\n command\n .command('upgrade')\n .alias('up')\n .description('Upgrade dependencies in a specific workspace package.')\n // Old options (-L, -g) are removed as per requirements\n .action(async () => {\n log.info('Fetching workspace packages...')\n const workspaceNames = await getWorkspaceNames()\n if (!workspaceNames || workspaceNames.length === 0) {\n log.error('No workspace packages found. Please check your pnpm-workspace.yaml or run from a workspace root.')\n return\n }\n\n const packageChoices = workspaceNames.map((pkg) => ({\n label: `${pkg.name} (path: ${pkg.path})`,\n value: { name: pkg.name, path: pkg.path }, // Store both name and relative path\n }))\n\n const selectedPackageInfo = await createSelect({\n message: 'Select the target package to upgrade dependencies for:',\n options: packageChoices,\n })\n if (!selectedPackageInfo?.name) {\n log.info('No package selected. Aborting upgrade.')\n return\n }\n\n // Construct full path to the selected package's directory from workspace root\n // Assuming getWorkspacePackages returns paths relative to workspace root\n // And current working directory for getPackageDependencies should be absolute or relative to where the script runs.\n // For simplicity, we assume the shared functions handle path resolution correctly or this CLI runs from workspace root.\n // If packageInfo.path is relative to workspace root:\n const workspaceRoot = process.cwd() // Or find it dynamically if needed\n const selectedPackageDir = path.join(workspaceRoot, selectedPackageInfo.path)\n\n log.info(`Fetching dependencies for package ${selectedPackageInfo.name}...`)\n const dependencies = await getPackageDependencies(selectedPackageDir)\n\n if (!dependencies || dependencies.length === 0) {\n log.info(`No dependencies found in package ${selectedPackageInfo.name}. Nothing to upgrade.`)\n return\n }\n\n const dependencyChoices = dependencies.map((dep) => ({\n label: `${dep.name} (current: ${dep.version}, type: ${dep.type})`,\n value: dep.name,\n }))\n\n const selectedDependencies = await createCheckbox({\n message: `Select dependencies to upgrade in ${selectedPackageInfo.name} (space to select, enter to confirm):`,\n options: dependencyChoices,\n })\n\n if (!selectedDependencies || selectedDependencies.length === 0) {\n log.info('No dependencies selected for upgrade. Aborting.')\n return\n }\n\n await upgradeHandle(selectedPackageInfo.name, selectedDependencies)\n })\n}\n","import { createCommand, readPackage } from '@nemo-cli/shared'\n\nimport { addCommand } from './commands/add'\nimport { cleanCommand } from './commands/clean'\nimport { listCommand } from './commands/list'\nimport { removeCommand } from './commands/remove'\nimport { upgradeCommand } from './commands/upgrade'\nimport { HELP_MESSAGE } from './constants'\n\nexport const pkg = readPackage(import.meta, '..')\n\nexport const init = () => {\n const command = createCommand('np')\n .version(pkg.version)\n .description(`${pkg.name} CLI helper for pnpm workspaces`)\n .addHelpText('after', HELP_MESSAGE.main)\n\n addCommand(command)\n upgradeCommand(command)\n removeCommand(command)\n listCommand(command)\n cleanCommand(command)\n\n return command\n}\n\nexport const run = () => {\n const command = init()\n command.parse(process.argv)\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nemo-cli/package",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "pnpm workspace handle",
5
5
  "author": "gaozimeng <gaozimeng0425@gmail.com>",
6
6
  "homepage": "https://github.com/GaoZimeng0425/nemo-cli#readme",
@@ -36,8 +36,8 @@
36
36
  "url": "https://github.com/GaoZimeng0425/nemo-cli/issues"
37
37
  },
38
38
  "dependencies": {
39
- "@nemo-cli/shared": "0.1.2",
40
- "@nemo-cli/ui": "0.1.2"
39
+ "@nemo-cli/shared": "0.1.3",
40
+ "@nemo-cli/ui": "0.1.3"
41
41
  },
42
42
  "scripts": {
43
43
  "dev": "rolldown --watch -c ./rolldown.config.ts",