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
- Pass an explicit selector: --profile, --modules, --with, or a positional language.
- Run with --help to see available profiles and modules.
- 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
- Default to a named profile in wrapper scripts so empty argv never reaches the parser.
- In CI, fail the job with a clear message if the install command would be empty.
- Provide --help text that lists the canonical first-time install command.
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
- Invalid ${name} value: expected a path
- Invalid --port value: ${portValue}
- Target '${target}' is supported, but the bare-language insta
- Unknown install target: ${target}. Expected one of ${SUPPORT
- Missing value for --locale
AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13).
Data as JSON: /api/errors/64a80d6735c12b3e.
Report an issue: GitHub.