{"record":{"id":"21977cae93cb02ca","repo":"yarnpkg/yarn","slug":"invalidpackagename","errorCode":null,"errorMessage":"invalidPackageName","messagePattern":"invalidPackageName","errorType":"exception","errorClass":"MessageError","httpStatus":null,"severity":"error","filePath":"src/cli/commands/create.js","lineNumber":58,"sourceCode":"}\n\nexport function coerceCreatePackageName(str: string): Object {\n  const pkgNameObj = parsePackageName(str);\n  const coercedName = pkgNameObj.name !== '' ? `create-${pkgNameObj.name}` : `create`;\n  const coercedPkgNameObj = {\n    ...pkgNameObj,\n    name: coercedName,\n    fullName: [pkgNameObj.scope, coercedName].filter(Boolean).join('/'),\n    full: [pkgNameObj.scope, coercedName, pkgNameObj.path].filter(Boolean).join('/'),\n  };\n  return coercedPkgNameObj;\n}\n\nexport async function run(config: Config, reporter: Reporter, flags: Object, args: Array<string>): Promise<void> {\n  const [builderName, ...rest] = args;\n\n  if (!builderName) {\n    throw new MessageError(reporter.lang('invalidPackageName'));\n  }\n\n  const {fullName: packageName, name: commandName} = coerceCreatePackageName(builderName);\n\n  const linkLoc = path.join(config.linkFolder, commandName);\n  if (await fs.exists(linkLoc)) {\n    reporter.info(reporter.lang('linkUsing', packageName));\n  } else {\n    await runGlobal(config, reporter, {}, ['add', packageName]);\n  }\n\n  const binFolder = await getBinFolder(config, {});\n  const command = path.resolve(binFolder, commandName);\n  const env = await makeEnv('create', config.cwd, config);\n\n  await child.spawn(command, rest, {stdio: `inherit`, shell: true, env});\n}\n","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/yarnpkg/yarn/blob/c2dda503f3759b5be5f0e24ecd9cf5c97a540147/src/cli/commands/create.js#L40-L76","documentation":"The `yarn create` runner destructures the first positional arg as `builderName` (`create.js:55`). If it is falsy (no args), it throws `invalidPackageName` ('Invalid package name.') before any name coercion or resolution. This is the empty-argument guard for the create command.","triggerScenarios":"`const [builderName, ...rest] = args;` yields `undefined` because `args` is empty — i.e. `yarn create` invoked with no kit name.","commonSituations":"Running `yarn create` bare, a wrapper script that dropped the kit argument, or a shell quoting bug that consumed the name.","solutions":["Pass a kit name: `yarn create react-app my-app`.","In scripts, guard the variable: `yarn create \"${KIT:?KIT required}\" \"$@\"`."],"exampleFix":"// before\n$ yarn create\n\n// after\n$ yarn create react-app my-app","handlingStrategy":"validation","validationCode":"function requireBuilderName(args: string[]): string {\n  const [builderName] = args;\n  if (!builderName) throw new Error('yarn create requires a kit name, e.g. \"react-app\"');\n  return builderName;\n}","typeGuard":"function hasBuilderName(args: unknown): args is [string, ...string[]] {\n  return Array.isArray(args) && typeof args[0] === 'string' && args[0].length > 0;\n}","tryCatchPattern":null,"preventionTips":["In scripts, default the kit name with `${KIT:?KIT required}`."],"tags":["yarn-create","arguments","validation"],"backgroundTag":null,"analyzedSha":"c2dda503f3759b5be5f0e24ecd9cf5c97a540147","analyzedAt":"2026-08-13T04:17:06.305Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}