affaan-m/ECC · error
No install profile, module IDs, included components, or…
Error message
No install profile, module IDs, included components, or legacy languages were provided
What it means
normalizeInstallRequest requires at least one selection to know what to install. When the caller neither selected a manifest base (profile/modules/with/without/exclusions) nor any legacy languages, and did not pass --help, there is nothing actionable, so the request is rejected.
Solutions
- Provide an install profile, e.g. --profile standard.
- Provide module IDs via --modules.
- Provide legacy language arguments if using the legacy syntax.
- Pass --help to see available options instead of attempting an empty install.
Example fix
// before
await request({})
// after
await request({ profile: 'standard' }) Defensive patterns
Strategy: validation
Validate before calling
const hasSelection = Boolean(opts.profile) || (opts.modules?.length > 0) || (opts.with?.length > 0) || (opts.without?.length > 0) || (opts.languages?.length > 0)
if (!opts.help && !hasSelection) throw new Error('Provide a profile, modules, components, or legacy languages') Type guard
function hasInstallSelection(opts) {
return Boolean(opts?.help) || Boolean(opts?.profile) ||
(Array.isArray(opts?.modules) && opts.modules.length > 0) ||
(Array.isArray(opts?.languages) && opts.languages.length > 0)
} Try / catch
try {
const req = normalizeInstallRequest(options)
} catch (err) {
if (err.message.startsWith('No install profile')) {
console.error('Nothing to install: pass --profile, --modules, or language args (see --help)')
} else throw err
} Prevention
- Always pass at least one selection flag to the installer.
- Avoid building options objects conditionally such that all flags can drop out.
- Default to a known profile when no flags are given in wrapper scripts.
- Run with --help interactively to explore options instead of invoking empty.
When it happens
Trigger: Calling normalizeInstallRequest (or request()) with an options object that has no profile, no module IDs, no included/excluded component IDs, no legacy languages, and options.help is falsy.
Common situations: Running the install CLI with no arguments; programmatically building an empty options object; a script where all flags were conditionally dropped (e.g. empty variable expansion) leaving no selections.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- At least one guided harness must be selected
- Legacy language arguments cannot be combined with…
- No install profile, module IDs, or included component IDs…
- No legacy languages were provided
- A normalized install request is required
AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16).
Data as JSON: /api/errors/64a80d6735c12b3e.
Report an issue: GitHub.
Appendix: source
Thrown at scripts/lib/install/request.js:147
const hookConsent = resolveHookConsentFlags(options);
if (hookConsent === 'declined' && moduleIds.includes('hooks-runtime')) {
throw new Error('--no-hooks cannot be combined with an explicit hooks-runtime module selection');
}
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,
hookConsent,
configPath: config?.path || options.configPath || null,
};
}
module.exports = {View on GitHub (pinned to 8321021c54)