affaan-m/ECC · error · Error

No install profile, module IDs, included components, or lega

Error message

No install profile, module IDs, included components, or legacy languages were provided

What it means

Thrown by normalizeInstallRequest() when the request has no profile, no module IDs, no included components, no legacy languages, and help was not requested. It is the empty-input guard that prevents the installer from doing nothing or defaulting silently.

Source

Thrown at scripts/lib/install/request.js:136

  const legacyLanguages = dedupeStrings(dedupeStrings([
    ...(Array.isArray(options.legacyLanguages) ? options.legacyLanguages : []),
    ...(Array.isArray(options.languages) ? options.languages : []),
  ]).map(language => language.toLowerCase()));
  const hasManifestBaseSelection = Boolean(profileId) || moduleIds.length > 0 || includeComponentIds.length > 0;
  const hasNonLocaleManifestSelection = Boolean(profileId)
    || moduleIds.length > 0
    || requestedIncludeComponentIds.length > 0
    || excludeComponentIds.length > 0;
  const usingManifestMode = hasManifestBaseSelection || excludeComponentIds.length > 0;

  if (hasNonLocaleManifestSelection && legacyLanguages.length > 0) {
    throw new Error(
      'Legacy language arguments cannot be combined with --profile, --modules, --with, --without, or manifest config selections'
    );
  }

  if (!options.help && !hasManifestBaseSelection && legacyLanguages.length === 0) {
    throw new Error('No install profile, module IDs, included components, or legacy languages were provided');
  }

  return {
    mode: legacyLanguages.length > 0
      ? 'legacy-compat'
      : (usingManifestMode ? 'manifest' : 'legacy-compat'),
    target,
    profileId,
    moduleIds,
    includeComponentIds,
    excludeComponentIds,
    legacyLanguages,
    configPath: config?.path || options.configPath || null,
  };
}

module.exports = {
  LEGACY_INSTALL_TARGETS,

View on GitHub (pinned to 01e15490f0)

Solutions

  1. Pass an explicit selector: --profile, --modules, --with, or a positional language.
  2. Run with --help to see available profiles and modules.
  3. Populate a config file (referenced via --config) with at least one selection.

Example fix

# before
npx ecc install
# after
npx ecc install --profile base
Defensive patterns

Strategy: validation

Validate before calling

function hasAnySelection(options) {
  return Boolean(options?.profileId)
    || (options?.moduleIds?.length ?? 0) > 0
    || (options?.includeComponentIds?.length ?? 0) > 0
    || (options?.legacyLanguages?.length ?? 0) > 0
    || (options?.languages?.length ?? 0) > 0;
}
if (!options.help && !hasAnySelection(options)) {
  throw new Error('No install selection provided. Pass --profile, --modules, --with, or a language.');
}

Type guard

function hasSelection(options) {
  return Boolean(options?.profileId)
    || (options?.moduleIds?.length ?? 0) > 0
    || (options?.includeComponentIds?.length ?? 0) > 0
    || (options?.languages?.length ?? 0) > 0;
}

Try / catch

try {
  request = normalizeInstallRequest(options);
} catch (e) {
  if (/No install profile, module IDs/.test(e.message)) {
    options.profileId = 'base';
    request = normalizeInstallRequest(options);
  } else throw e;
}

Prevention

When it happens

Trigger: Running `npx ecc install` with no arguments and no config file, or a config file that selects nothing.

Common situations: First-time users who expect a default profile; CI jobs that build the install command dynamically and produce an empty argument list; a config file with only comments.

Related errors


AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13). Data as JSON: /api/errors/64a80d6735c12b3e. Report an issue: GitHub.