pertain
Version:
Automated pub/sub across project dependencies. Run code from any installed package based on declarative rules in package.json
54 lines • 5.56 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const __1 = __importDefault(require("../"));
const TopologicalSorter_1 = __importDefault(require("../TopologicalSorter"));
const projectPath = path_1.default.join(__dirname, '__fixtures__/cool-cactus');
test('provides info about pertaining dependencies, in dependency order', () => {
expect((0, __1.default)(projectPath, 'germane.draw')
// hide absolute paths so snapshot is portable
.map((dep) => ({
path: path_1.default.relative(projectPath, dep.path),
modulePath: path_1.default.relative(projectPath, dep.modulePath),
name: dep.name,
subject: dep.subject,
}))).toMatchSnapshot();
});
test('pertains to "germane.identify" in dep order to list ingredients in a cool cactus', () => {
const identifiers = (0, __1.default)(projectPath, 'germane.identify');
const ingredients = identifiers
.map((i) => `- ${i.name} adds ${require(i.path)()}`)
.join('\n');
expect(ingredients).toMatchSnapshot();
});
test('runs the same sequence without invoking sort twice', () => {
__1.default.clearCache();
const sort = jest.spyOn(TopologicalSorter_1.default.prototype, 'sort');
(0, __1.default)(projectPath, 'germane.identify');
(0, __1.default)(projectPath, 'germane.identify');
expect(sort).toHaveBeenCalledTimes(1);
sort.mockRestore();
});
test('pertains to "germane.draw" in dep order to draw the cool cactus', () => {
const picture = (0, __1.default)(projectPath, 'germane.draw').reduce((drawing, artist) => require(artist.path)(drawing), '');
expect(picture).toMatchSnapshot();
});
test('throws informative error if a dep declares an invalid pertainer', () => {
expect(() => (0, __1.default)(projectPath, 'lies')).toThrow('could not find');
});
test('throws informative error if circular deps are detected', () => {
expect(() => (0, __1.default)(projectPath, 'humpty')).toThrow('Cyclic');
});
test('accepts custom DependencyFinder', () => {
__1.default.clearCache();
const allTalk = (0, __1.default)(projectPath, 'germane.identify', () => [
'cactus-attitude',
])
.map((dep) => require(dep.path)())
.join('');
expect(allTalk).toBe('a bad attitude');
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVydGFpbi5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL19fdGVzdHNfXy9wZXJ0YWluLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsNENBQTBCO0FBQzFCLDZFQUFxRDtBQUVyRCxNQUFNLFdBQVcsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0FBRXJFLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7SUFDNUUsTUFBTSxDQUNKLElBQUEsV0FBTyxFQUFDLFdBQVcsRUFBRSxjQUFjLENBQUM7UUFDbEMsOENBQThDO1NBQzdDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNiLElBQUksRUFBRSxjQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQzFDLFVBQVUsRUFBRSxjQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ3RELElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztLQUNyQixDQUFDLENBQUMsQ0FDTixDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGtGQUFrRixFQUFFLEdBQUcsRUFBRTtJQUM1RixNQUFNLFdBQVcsR0FBRyxJQUFBLFdBQU8sRUFBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM3RCxNQUFNLFdBQVcsR0FBRyxXQUFXO1NBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNkLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUN4QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7SUFDOUQsV0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdELElBQUEsV0FBTyxFQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pDLElBQUEsV0FBTyxFQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsaUVBQWlFLEVBQUUsR0FBRyxFQUFFO0lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUEsV0FBTyxFQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQ3pELENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFDbEQsRUFBRSxDQUNILENBQUM7SUFDRixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsaUVBQWlFLEVBQUUsR0FBRyxFQUFFO0lBQzNFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLFdBQU8sRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN2RSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7SUFDbEUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsV0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLEVBQUU7SUFDM0MsV0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUEsV0FBTyxFQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM3RCxpQkFBaUI7S0FDbEIsQ0FBQztTQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNaLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUMsQ0FBQyJ9