Skip to content

Commit 377efc4

Browse files
author
Ovidiu Barabula
committed
feat(core): add getter for dependencies subscriber function
1 parent bdc0b9d commit 377efc4

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

src/util/dependencies-installer.spec.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { stdout } from 'test-console';
1010
import { StringIncludesAll } from '../../test/utilities';
1111
import InstallerSingleton, {
1212
DependenciesInstaller,
13+
DependenciesSubscriber,
1314
ERRORS,
1415
Installer,
1516
} from './dependencies-installer';
@@ -118,6 +119,46 @@ describe('DependenciesInstaller', () => {
118119
expect(devDependencies['my-dev-package-1']).to.equal('^1.0.0');
119120
});
120121
});
122+
123+
124+
describe('getSubscriber()', () => {
125+
let subscriber: DependenciesSubscriber;
126+
127+
beforeEach(() => {
128+
subscriber = installer.getSubscriber();
129+
});
130+
131+
it('returns a function', () => {
132+
expect(subscriber).to.be.a('function');
133+
});
134+
135+
136+
it('returns a limited function', () => {
137+
subscriber();
138+
expect(subscriber()).to.be.an('undefined');
139+
});
140+
141+
142+
it('returns a function which returns a promise', () => {
143+
expect(subscriber()).to.be.a('promise');
144+
});
145+
146+
147+
it('returns a function that accepts two parameters', () => {
148+
expect(subscriber({}, 'awesome-plugin')).to.be.a('promise');
149+
});
150+
151+
152+
it('returns a function that calls .add() method', async () => {
153+
fileReader = FileReader(path.join(process.cwd(), 'test.package.json'));
154+
await subscriber(
155+
{
156+
dependencies: { 'my-package': '^0.1.0' },
157+
},
158+
);
159+
const { dependencies } = await fileReader.read();
160+
expect(dependencies).to.contains.keys('my-package');
161+
});
121162
});
122163

123164

src/util/dependencies-installer.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export type DependenciesSubscriber = (manifest: DependenciesManifest, name: stri
5050

5151
export interface DependenciesInstaller {
5252
add(manifest: DependenciesManifest): Promise<void>;
53+
getSubscriber(): DependenciesSubscriber;
5354
run(): Promise<void>;
5455
/* test:start */
5556
checkForManagers?(): Promise<void>;
@@ -359,6 +360,20 @@ export async function Installer(
359360
}
360361

361362

363+
/**
364+
* Get dependencies subscriber function
365+
*/
366+
function getSubscriber(): DependenciesSubscriber {
367+
// Return a limited function (1 maximum call) to register plugin dependencies
368+
return limitFn(async function (manifest: DependenciesManifest, name?: string) {
369+
if (typeof name !== 'undefined') {
370+
logger.debug(`${MESSAGES.REGISTERING_PLUGIN_DEPS} for ${chalk.cyan.bold(pluginName(name))}`);
371+
}
372+
await add(manifest);
373+
});
374+
}
375+
376+
362377
/**
363378
* Log stderr handler
364379
* @param stream Standard Error stream
@@ -395,6 +410,7 @@ export async function Installer(
395410
// Public API object
396411
let publicApi: DependenciesInstaller = {
397412
add,
413+
getSubscriber,
398414
run,
399415
};
400416

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy