Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/prefixer/RopmModule.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,46 @@ describe('RopmModule', () => {
await module.init();
expect(module.isValid).to.be.false;
});

it('uses preferredPrefix when no alias is given', async () => {
const [promises] = createProjects(hostDir, hostDir, {
name: 'host',
dependencies: [{
name: '@rokucommunity/promises',
ropm: {
preferredPrefix: 'promises'
}
}]
});
await promises.init();
expect(promises.ropmModuleName).to.equal('promises');
});

it('ignores preferredPrefix when a user alias is given', async () => {
const [promises] = createProjects(hostDir, hostDir, {
name: 'host',
dependencies: [{
name: '@rokucommunity/promises',
alias: 'mypkg',
ropm: {
preferredPrefix: 'promises'
}
}]
});
await promises.init();
expect(promises.ropmModuleName).to.equal('mypkg');
});

it('uses default derived prefix when preferredPrefix is absent', async () => {
const [promises] = createProjects(hostDir, hostDir, {
name: 'host',
dependencies: [{
name: '@rokucommunity/promises'
}]
});
await promises.init();
expect(promises.ropmModuleName).to.equal('rokucommunity_promises');
});
});

describe('createPrefixMap', () => {
Expand Down
10 changes: 10 additions & 0 deletions src/prefixer/RopmModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,16 @@ export class RopmModule {

this.npmModuleName = this.packageJson.name;

//detect if the user supplied an explicit alias at install time by comparing the local name vs the resolved package name
const hasUserAlias = this.npmAliasName.toLowerCase() !== this.npmModuleName.toLowerCase();

//apply preferredPrefix only when the user did not provide an explicit alias
if (!hasUserAlias && this.packageJson.ropm?.preferredPrefix) {
const defaultPrefix = this.ropmModuleName;
this.ropmModuleName = this.packageJson.ropm.preferredPrefix;
this.logger.info(`Using preferredPrefix "${this.ropmModuleName}" for "${this.npmModuleName}" (overrides default prefix "${defaultPrefix}")`);
}

//disallow using `noprefix` within dependencies
if (this.packageJson.ropm?.noprefix) {
this.logger.error(`Using "ropm.noprefix" in a ropm module is forbidden: "${path.join(this.moduleDir, 'package.json')}`);
Expand Down
6 changes: 6 additions & 0 deletions src/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,12 @@ export interface RopmOptions {
*/
noprefix?: string[];

/**
* A preferred prefix for this module to suggest to consumers. When a consumer installs this module
* without an explicit alias, this prefix will be used instead of the auto-derived one.
*/
preferredPrefix?: string;

/**
* What level of ropm's internal logging should be performed
*/
Expand Down