Skip to content

Commit e41f99b

Browse files
committed
feat(lift): enabled passing in external enhancers to the lifter
1 parent c0708e9 commit e41f99b

File tree

5 files changed

+65
-31
lines changed

5 files changed

+65
-31
lines changed

.remarkrc.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// https://github.com/remarkjs/remark/tree/master/packages/remark-stringify#options
22
exports.settings = {
3-
listItemIndent: 1,
3+
listItemIndent: "one",
44
emphasis: '_',
55
strong: '_',
66
bullet: '*',
@@ -11,4 +11,4 @@ exports.plugins = [
1111
'@form8ion/remark-lint-preset',
1212
['remark-toc', {tight: true}],
1313
['remark-usage', {heading: 'example'}]
14-
];
14+
];

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@ const {
103103
scripts: {},
104104
eslint: {configs: [], ignore: {directories: []}},
105105
packageManager: 'npm'
106+
},
107+
enhancers: {
108+
PluginName: {
109+
test: () => true,
110+
lift: () => ({})
111+
}
106112
}
107113
});
108114
}

example.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ const {
7171
scripts: {},
7272
eslint: {configs: [], ignore: {directories: []}},
7373
packageManager: 'npm'
74+
},
75+
enhancers: {
76+
PluginName: {
77+
test: () => true,
78+
lift: () => ({})
79+
}
7480
}
7581
});
7682
}

src/lift/lift.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {lift as liftPackage} from '../package/index.js';
1515
import * as packageManagers from '../package-managers/index.js';
1616
import {determineCurrent as resolvePackageManager} from '../package-managers/index.js';
1717

18-
export default async function ({projectRoot, vcs, results, pathWithinParent}) {
18+
export default async function ({projectRoot, vcs, results, pathWithinParent, enhancers = {}}) {
1919
info('Lifting JavaScript-specific details');
2020

2121
const {
@@ -33,7 +33,8 @@ export default async function ({projectRoot, vcs, results, pathWithinParent}) {
3333

3434
const enhancerResults = await applyEnhancers({
3535
results,
36-
enhancers: [
36+
enhancers: {
37+
...enhancers,
3738
huskyPlugin,
3839
enginesEnhancer,
3940
coveragePlugin,
@@ -43,7 +44,7 @@ export default async function ({projectRoot, vcs, results, pathWithinParent}) {
4344
npmConfigPlugin,
4445
projectTypes,
4546
packageManagers
46-
],
47+
},
4748
options: {packageManager, projectRoot, vcs, packageDetails: JSON.parse(packageContents)}
4849
});
4950

src/lift/lift.test.js

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as core from '@form8ion/core';
44
import * as huskyPlugin from '@form8ion/husky';
55
import * as commitConventionPlugin from '@form8ion/commit-convention';
66

7-
import {afterEach, describe, expect, it, vi} from 'vitest';
7+
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
88
import any from '@travi/any';
99
import {when} from 'jest-when';
1010

@@ -14,14 +14,14 @@ import * as npmConfigPlugin from '../npm-config/index.js';
1414
import * as enginesEnhancer from './enhancers/engines.js';
1515
import * as projectTypes from '../project-type/index.js';
1616
import * as dialects from '../dialects/index.js';
17-
import * as packageLifter from '../package/lifter.js';
17+
import liftPackage from '../package/lifter.js';
1818
import * as packageManagers from '../package-managers/index.js';
1919
import {determineCurrent as packageManagerResolver} from '../package-managers/index.js';
2020
import lift from './lift.js';
2121

2222
vi.mock('node:fs');
2323
vi.mock('@form8ion/core');
24-
vi.mock('../package/lifter');
24+
vi.mock('../package/lifter.js');
2525
vi.mock('../package-managers/index.js');
2626

2727
describe('lift', () => {
@@ -35,42 +35,63 @@ describe('lift', () => {
3535
const enhancerResults = any.simpleObject();
3636
const vcsDetails = any.simpleObject();
3737
const results = {...any.simpleObject(), scripts, tags, dependencies, devDependencies, packageManager: manager};
38+
const pathWithinParent = any.string();
39+
const packageDetails = any.simpleObject();
40+
const internalEnhancers = {
41+
huskyPlugin,
42+
enginesEnhancer,
43+
coveragePlugin,
44+
commitConventionPlugin,
45+
dialects,
46+
codeStylePlugin,
47+
npmConfigPlugin,
48+
projectTypes,
49+
packageManagers
50+
};
3851

39-
afterEach(() => {
40-
vi.clearAllMocks();
41-
});
42-
43-
it('should lift results that are specific to js projects', async () => {
44-
const packageDetails = any.simpleObject();
45-
const pathWithinParent = any.string();
52+
beforeEach(() => {
4653
when(packageManagerResolver)
4754
.calledWith({projectRoot, packageManager: manager})
4855
.mockResolvedValue(packageManager);
4956
when(fs.readFile)
5057
.calledWith(`${projectRoot}/package.json`, 'utf8')
5158
.mockResolvedValue(JSON.stringify(packageDetails));
52-
when(core.applyEnhancers).calledWith({
53-
results,
54-
enhancers: [
55-
huskyPlugin,
56-
enginesEnhancer,
57-
coveragePlugin,
58-
commitConventionPlugin,
59-
dialects,
60-
codeStylePlugin,
61-
npmConfigPlugin,
62-
projectTypes,
63-
packageManagers
64-
],
65-
options: {projectRoot, packageManager, vcs: vcsDetails, packageDetails}
66-
}).mockResolvedValue(enhancerResults);
59+
});
60+
61+
afterEach(() => {
62+
vi.clearAllMocks();
63+
});
64+
65+
it('should lift results that are specific to js projects', async () => {
66+
when(core.applyEnhancers)
67+
.calledWith({
68+
results,
69+
enhancers: internalEnhancers,
70+
options: {projectRoot, packageManager, vcs: vcsDetails, packageDetails}
71+
})
72+
.mockResolvedValue(enhancerResults);
6773

6874
const liftResults = await lift({projectRoot, vcs: vcsDetails, results, pathWithinParent});
6975

7076
expect(liftResults).toEqual(enhancerResults);
71-
expect(packageLifter.default).toHaveBeenCalledWith(deepmerge.all([
77+
expect(liftPackage).toHaveBeenCalledWith(deepmerge.all([
7278
{projectRoot, scripts, tags, dependencies, devDependencies, packageManager, vcs: vcsDetails, pathWithinParent},
7379
enhancerResults
7480
]));
7581
});
82+
83+
it('should apply provided enhancers', async () => {
84+
const enhancers = any.simpleObject();
85+
when(core.applyEnhancers)
86+
.calledWith({
87+
results,
88+
enhancers: {...enhancers, ...internalEnhancers},
89+
options: {projectRoot, packageManager, vcs: vcsDetails, packageDetails}
90+
})
91+
.mockResolvedValue(enhancerResults);
92+
93+
const liftResults = await lift({projectRoot, vcs: vcsDetails, results, pathWithinParent, enhancers});
94+
95+
expect(liftResults).toEqual(enhancerResults);
96+
});
7697
});

0 commit comments

Comments
 (0)