Skip to content

Commit a8c7173

Browse files
committed
fix: only apply the rollup wrap of dev server plugins if needed
1 parent dd5c772 commit a8c7173

12 files changed

+142
-30
lines changed

.changeset/fair-bugs-destroy.md

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
'plugins-manager': minor
3+
---
4+
5+
Changes to `metaConfigToWebDevServerConfig`:
6+
7+
- Renamed `wrapperFunction` to `rollupWrapperFunction`
8+
- Adds `setupRollupPlugins` which means those plugins are treated as rollup plugins and they will be wrapped by `rollupWrapperFunction` (if provided)
9+
- Plugins added via `setupPlugins` will no longer be wrapped
10+
- If you provide `config.plugins` then it will return that directly ignoring `setupPlugins` and `setupRollupPlugins`
11+
12+
Changes to `metaConfigToRollupConfig`:
13+
14+
- If you provide `config.plugins` then it will return that directly ignoring `setupPlugins`

.changeset/fair-worms-type.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@rocket/cli': patch
3+
---
4+
5+
Changes to config:
6+
- Do not auto rollupWrap plugins added via `setupDevPlugins`.
7+
- If you provide `devServer.plugins` then it will return that directly ignoring `setupDevAndBuildPlugins` and `setupDevPlugins`

docs/docs/configuration/overview.md

+11
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,22 @@ New plugins can be added and all default plugins can be adjusted or even removed
2323

2424
```js
2525
export default {
26+
// add remark/unified plugin to the markdown processing (e.g. enable special code blocks)
2627
setupUnifiedPlugins: [],
28+
29+
// add a rollup plugins to the web dev server (will be wrapped with @web/dev-server-rollup) AND the rollup build (e.g. enable json importing)
2730
setupDevAndBuildPlugins: [],
31+
32+
// add a plugin to the web dev server (will not be wrapped) (e.g. esbuild for typescript)
2833
setupDevPlugins: [],
34+
35+
// add a plugin to the rollup build (e.g. optimization steps)
2936
setupBuildPlugins: [],
37+
38+
// add a plugin to eleventy (e.g. a filter packs)
3039
setupEleventyPlugins: [],
40+
41+
// add a plugin to the cli (e.g. a new command like "rocket my-command")
3142
setupCliPlugins: [],
3243
};
3344
```

docs/docs/tools/overview.md docs/docs/tools/plugins-manager.md

+12-3
Original file line numberDiff line numberDiff line change
@@ -216,22 +216,31 @@ const plugins = finalMetaPlugins.map(pluginObj => {
216216

217217
**Examples**
218218

219-
Rollup has a more specific helper
219+
Rollup has a more specific helper that handles
220+
221+
- `config.setupPlugins`
222+
223+
Note: if you provide `config.plugins` then it will return that directly ignoring `setupPlugins`
220224

221225
```js
222226
import { metaConfigToRollupConfig } from 'plugins-manager';
223227

224228
const finalConfig = metaConfigToRollupConfig(currentConfig, defaultMetaPlugins);
225229
```
226230

227-
Web Dev Server has a more specific helper
231+
Web Dev Server has a more specific helper that handles
232+
233+
- `config.setupPlugins`
234+
- `config.setupRollupPlugins`
235+
236+
Note: if you provide `config.plugins` then it will return that directly ignoring `setupPlugins` and `setupRollupPlugins`
228237

229238
```js
230239
import { metaConfigToWebDevServerConfig } from 'plugins-manager';
231240
import { fromRollup } from '@web/dev-server-rollup';
232241

233242
const finalConfig = metaConfigToWebDevServerConfig(currentConfig, defaultMetaPlugins, {
234-
wrapperFunction: fromRollup,
243+
rollupWrapperFunction: fromRollup,
235244
});
236245
```
237246

packages/cli/src/RocketBuild.js

-5
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,6 @@ async function buildAndWrite(config) {
2424
}
2525

2626
async function productionBuild(config) {
27-
// const serviceWorkerFileName =
28-
// config.build && config.build.serviceWorkerFileName
29-
// ? config.build.serviceWorkerFileName
30-
// : 'service-worker.js';
31-
3227
const mpaConfig = createMpaConfig({
3328
input: '**/*.html',
3429
output: {

packages/cli/src/RocketStart.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@ export class RocketStart {
3939
clearTerminalOnReload: false,
4040
...this.config.devServer,
4141

42-
setupPlugins: [...this.config.setupDevAndBuildPlugins, ...this.config.setupDevPlugins],
42+
setupRollupPlugins: this.config.setupDevAndBuildPlugins,
43+
setupPlugins: this.config.setupDevPlugins,
4344
},
4445
[],
45-
{ wrapperFunction: fromRollup },
46+
{ rollupWrapperFunction: fromRollup },
4647
);
4748

4849
this.devServer = await startDevServer({

packages/cli/test-node/RocketCli.e2e.test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ describe('RocketCli e2e', () => {
122122
});
123123

124124
describe('setupDevAndBuildPlugins in config', () => {
125-
it('can add a rollup plugin to build', async () => {
125+
it('can add a rollup plugin via setupDevAndBuildPlugins for build command', async () => {
126126
cli = new RocketCli({
127127
argv: [
128128
'build',
@@ -135,7 +135,7 @@ describe('RocketCli e2e', () => {
135135
expect(inlineModule).to.equal('var a={test:"data"};console.log(a);');
136136
});
137137

138-
it('can add a rollup plugin to dev', async () => {
138+
it('can add a rollup plugin via setupDevAndBuildPlugins for start command', async () => {
139139
cli = new RocketCli({
140140
argv: [
141141
'start',

packages/plugins-manager/src/metaConfigToRollupConfig.js

+4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import { executeSetupFunctions } from 'plugins-manager';
77
* @param {MetaPlugin[]} [metaPlugins]
88
*/
99
export function metaConfigToRollupConfig(config, metaPlugins = []) {
10+
if (config.plugins) {
11+
delete config.setupPlugins;
12+
return config;
13+
}
1014
const _metaPlugins = executeSetupFunctions(config.setupPlugins, [...metaPlugins]);
1115

1216
const plugins = _metaPlugins.map(pluginObj => {
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,53 @@
1-
/** @typedef {import('../types/main').MetaPlugin} MetaPlugin */
1+
/** @typedef {import('../types/main').MetaPluginWrapable} MetaPluginWrapable */
22

33
import { executeSetupFunctions } from 'plugins-manager';
44

55
/**
66
* @param {any} config
7-
* @param {MetaPlugin[]} metaPlugins
7+
* @param {MetaPluginWrapable[]} metaPlugins
88
* @param {object} [options]
9-
* @param {function | null} [options.wrapperFunction]
9+
* @param {function | null} [options.rollupWrapperFunction]
1010
*/
11-
export function metaConfigToWebDevServerConfig(config, metaPlugins, { wrapperFunction = null }) {
12-
const _metaPlugins = executeSetupFunctions(config.setupPlugins, [...metaPlugins]);
11+
export function metaConfigToWebDevServerConfig(
12+
config,
13+
metaPlugins,
14+
{ rollupWrapperFunction = null } = {},
15+
) {
16+
if (config.plugins) {
17+
delete config.setupPlugins;
18+
delete config.setupRollupPlugins;
19+
return config;
20+
}
1321

14-
const plugins = _metaPlugins.map(pluginObj => {
15-
const usePlugin =
16-
typeof wrapperFunction === 'function' ? wrapperFunction(pluginObj.plugin) : pluginObj.plugin;
22+
const metaPluginsNoWrap = metaPlugins.map(pluginObj => {
23+
pluginObj.__noWrap = true;
24+
return pluginObj;
25+
});
26+
27+
const rollupPlugins = /** @type {MetaPluginWrapable[]} */ (executeSetupFunctions(
28+
config.setupRollupPlugins,
29+
[...metaPluginsNoWrap],
30+
));
31+
32+
const wrappedRollupPlugins = rollupPlugins.map(pluginObj => {
33+
if (typeof rollupWrapperFunction === 'function' && pluginObj.__noWrap !== true) {
34+
pluginObj.plugin = rollupWrapperFunction(pluginObj.plugin);
35+
}
36+
return pluginObj;
37+
});
1738

39+
const _metaPlugins = executeSetupFunctions(config.setupPlugins, [...wrappedRollupPlugins]);
40+
41+
const plugins = _metaPlugins.map(pluginObj => {
1842
if (pluginObj.options) {
19-
return usePlugin(pluginObj.options);
43+
return pluginObj.plugin(pluginObj.options);
2044
} else {
21-
return usePlugin();
45+
return pluginObj.plugin();
2246
}
2347
});
2448
config.plugins = plugins;
2549

2650
delete config.setupPlugins;
51+
delete config.setupRollupPlugins;
2752
return config;
2853
}

packages/plugins-manager/test-node/metaConfigToRollupConfig.test.js

+12
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,16 @@ describe('metaConfigToRollupConfig', () => {
2828
expect(config.plugins).to.deep.equal(['firstPlugin', '-- insertPlugin --']);
2929
expect(config.setupPlugins).to.be.undefined;
3030
});
31+
32+
it('prefers a user set config.plugins', async () => {
33+
const config = metaConfigToRollupConfig(
34+
{
35+
setupPlugins: [addPlugin({ name: 'insert', plugin: insertPlugin })],
36+
plugins: ['user-set'],
37+
},
38+
threeExistingPlugin,
39+
);
40+
expect(config.plugins).to.deep.equal(['user-set']);
41+
expect(config.setupPlugins).to.be.undefined;
42+
});
3143
});
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,56 @@
11
import chai from 'chai';
22

3-
import { metaConfigToWebDevServerConfig } from 'plugins-manager';
3+
import { metaConfigToWebDevServerConfig, addPlugin } from 'plugins-manager';
44

55
const { expect } = chai;
66

77
describe('metaConfigToWebDevServerConfig', () => {
8-
const threeExistingPlugin = [
8+
const twoExistingPlugin = [
99
{ name: 'first', plugin: () => 'firstPlugin' },
1010
{ name: 'second', plugin: () => 'secondPlugin' },
11-
{ name: 'third', plugin: () => 'thirdPlugin' },
1211
];
1312

14-
it('accepts a wrapper function for plugins', async () => {
15-
function wrapperFunction(srcFn) {
13+
it('accepts a rollupWrapperFunction for setupRollupPlugins', async () => {
14+
function rollupWrapperFunction(srcFn) {
1615
return () => `*wrapped* ${srcFn()}`;
1716
}
1817

19-
const config = metaConfigToWebDevServerConfig({}, threeExistingPlugin, { wrapperFunction });
18+
const config = metaConfigToWebDevServerConfig(
19+
{
20+
setupRollupPlugins: [
21+
addPlugin({ name: 'third', plugin: () => 'thirdPlugin' }),
22+
addPlugin({ name: 'fourth', plugin: () => 'fourthPlugin' }),
23+
],
24+
setupPlugins: [
25+
addPlugin({ name: 'fifth', plugin: () => 'fifthPlugin' }),
26+
addPlugin({ name: 'sixth', plugin: () => 'sixthPlugin' }),
27+
],
28+
},
29+
twoExistingPlugin,
30+
{ rollupWrapperFunction },
31+
);
32+
2033
expect(config.plugins).to.deep.equal([
21-
'*wrapped* firstPlugin',
22-
'*wrapped* secondPlugin',
34+
'firstPlugin',
35+
'secondPlugin',
2336
'*wrapped* thirdPlugin',
37+
'*wrapped* fourthPlugin',
38+
'fifthPlugin',
39+
'sixthPlugin',
2440
]);
2541
});
42+
43+
it('prefers a user set config.plugins', async () => {
44+
const config = metaConfigToWebDevServerConfig(
45+
{
46+
setupPlugins: [addPlugin({ name: 'first', plugin: () => 'firstPlugin' })],
47+
setupRollupPlugins: [addPlugin({ name: 'second', plugin: () => 'secondPlugin' })],
48+
plugins: ['user-set'],
49+
},
50+
twoExistingPlugin,
51+
);
52+
expect(config.plugins).to.deep.equal(['user-set']);
53+
expect(config.setupPlugins).to.be.undefined;
54+
expect(config.setupRollupPlugins).to.be.undefined;
55+
});
2656
});

packages/plugins-manager/types/main.d.ts

+4
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,7 @@ export interface MetaPlugin {
33
plugin: any;
44
options?: any;
55
}
6+
7+
export interface MetaPluginWrapable extends MetaPlugin {
8+
__noWrap?: boolean;
9+
}

0 commit comments

Comments
 (0)