{"record":{"id":"5a77065e865c6ecf","repo":"yarnpkg/yarn","slug":"noname","errorCode":null,"errorMessage":"noName","messagePattern":"noName","errorType":"exception","errorClass":"MessageError","httpStatus":null,"severity":"error","filePath":"src/cli/commands/generate-lock-entry.js","lineNumber":20,"sourceCode":"\nimport type {Reporter} from '../../reporters/index.js';\nimport type Config from '../../config.js';\nimport {MessageError} from '../../errors.js';\nimport {implodeEntry, stringify} from '../../lockfile';\n\nexport function hasWrapper(commander: Object, args: Array<string>): boolean {\n  return false;\n}\n\nexport async function run(config: Config, reporter: Reporter, flags: Object, args: Array<string>): Promise<void> {\n  let manifest;\n  if (flags.useManifest) {\n    manifest = await config.readJson(flags.useManifest);\n  } else {\n    manifest = await config.readRootManifest();\n  }\n  if (!manifest.name) {\n    throw new MessageError(reporter.lang('noName'));\n  }\n  if (!manifest.version) {\n    throw new MessageError(reporter.lang('noVersion'));\n  }\n\n  const entry = {\n    name: manifest.name,\n    version: manifest.version,\n    resolved: flags.resolved,\n    registry: flags.registry || manifest._registry,\n    optionalDependencies: manifest.optionalDependencies,\n    dependencies: manifest.dependencies,\n  };\n  const pattern = flags.pattern || `${entry.name}@${entry.version}`;\n  reporter.log(\n    stringify({\n      [pattern]: implodeEntry(pattern, entry),\n    }),","sourceCodeStart":2,"sourceCodeEnd":38,"githubUrl":"https://github.com/yarnpkg/yarn/blob/c2dda503f3759b5be5f0e24ecd9cf5c97a540147/src/cli/commands/generate-lock-entry.js#L2-L38","documentation":"`yarn generate-lock-entry` reads a manifest (from `--useManifest <file>` or the root `package.json`) and at `generate-lock-entry.js:20` requires a `name` field. Its absence throws `noName` ('Package doesn't have a name.') because a lockfile entry cannot be keyed without a package name.","triggerScenarios":"`!manifest.name` after `config.readJson(flags.useManifest)` or `config.readRootManifest()` — the loaded manifest object has no `name` property.","commonSituations":"A scratch/private `package.json` with only dependencies and no name, or pointing `--useManifest` at a JSON file that is not a real manifest.","solutions":["Add a `\"name\"` field to the relevant package.json.","Point `--useManifest` at a complete manifest file.","Validate the manifest with `npm-package-arg`/`normalize-package-data` before generating."],"exampleFix":"// before\n// package.json\n{ \"version\": \"1.0.0\", \"dependencies\": {} }\n$ yarn generate-lock-entry\n→ Package doesn't have a name.\n\n// after\n{ \"name\": \"my-pkg\", \"version\": \"1.0.0\", \"dependencies\": {} }","handlingStrategy":"validation","validationCode":"import {readJson} from './io';\n\nasync function assertManifestHasName(file: string): Promise<void> {\n  const m = await readJson(file);\n  if (!m || typeof m.name !== 'string' || !m.name) {\n    throw new Error(`Manifest ${file} is missing a \"name\" field`);\n  }\n}\n// await assertManifestHasName(flags.useManifest || './package.json');","typeGuard":"function manifestHasName(m: unknown): m is { name: string } {\n  return typeof m === 'object' && m !== null && typeof (m as any).name === 'string' && (m as any).name.length > 0;\n}","tryCatchPattern":null,"preventionTips":["Run manifests through `normalize-package-data` (or validate-package-json schema) before codegen.","Keep a package.json template that already has name+version."],"tags":["generate-lock-entry","manifest","package-json","validation"],"backgroundTag":null,"analyzedSha":"c2dda503f3759b5be5f0e24ecd9cf5c97a540147","analyzedAt":"2026-08-13T04:17:06.305Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}