Compare commits

...

5 Commits

Author SHA1 Message Date
github-actions[bot]
fd4bc27f16 Version Packages 2021-01-06 00:49:41 +01:00
Thomas Allmer
641c7e551c feat: add pathPrefix option for subfolder deployment 2021-01-06 00:46:39 +01:00
github-actions[bot]
f9ae2b8208 Version Packages 2021-01-05 07:35:10 +01:00
Thomas Allmer
a8c7173758 fix: only apply the rollup wrap of dev server plugins if needed 2021-01-05 07:25:44 +01:00
Thomas Allmer
dd5c772ba3 chore: add info about the need of .eleventyignore 2021-01-03 23:26:29 +01:00
26 changed files with 237 additions and 61 deletions

View File

@@ -1,2 +1,4 @@
node_modules/** node_modules/**
/docs/_assets/head.html /docs/_assets
/docs/_includes
/docs/_data

View File

@@ -9,11 +9,8 @@ import { rocketLaunch } from '@rocket/launch';
export default { export default {
presets: [rocketLaunch()], presets: [rocketLaunch()],
build: { emptyOutputDir: true,
emptyOutputDir: true, pathPrefix: 'subfolder-only-for-build',
pathPrefix: 'subfolder-only-for-build',
serviceWorkerFileName: 'service-worker.js',
},
}; };
``` ```
@@ -23,11 +20,22 @@ New plugins can be added and all default plugins can be adjusted or even removed
```js ```js
export default { export default {
// add remark/unified plugin to the markdown processing (e.g. enable special code blocks)
setupUnifiedPlugins: [], setupUnifiedPlugins: [],
// 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)
setupDevAndBuildPlugins: [], setupDevAndBuildPlugins: [],
// add a plugin to the web dev server (will not be wrapped) (e.g. esbuild for typescript)
setupDevPlugins: [], setupDevPlugins: [],
// add a plugin to the rollup build (e.g. optimization steps)
setupBuildPlugins: [], setupBuildPlugins: [],
// add a plugin to eleventy (e.g. a filter packs)
setupEleventyPlugins: [], setupEleventyPlugins: [],
// add a plugin to the cli (e.g. a new command like "rocket my-command")
setupCliPlugins: [], setupCliPlugins: [],
}; };
``` ```

View File

@@ -216,7 +216,11 @@ const plugins = finalMetaPlugins.map(pluginObj => {
**Examples** **Examples**
Rollup has a more specific helper Rollup has a more specific helper that handles
- `config.setupPlugins`
Note: if you provide `config.plugins` then it will return that directly ignoring `setupPlugins`
```js ```js
import { metaConfigToRollupConfig } from 'plugins-manager'; import { metaConfigToRollupConfig } from 'plugins-manager';
@@ -224,14 +228,19 @@ import { metaConfigToRollupConfig } from 'plugins-manager';
const finalConfig = metaConfigToRollupConfig(currentConfig, defaultMetaPlugins); const finalConfig = metaConfigToRollupConfig(currentConfig, defaultMetaPlugins);
``` ```
Web Dev Server has a more specific helper Web Dev Server has a more specific helper that handles
- `config.setupPlugins`
- `config.setupRollupPlugins`
Note: if you provide `config.plugins` then it will return that directly ignoring `setupPlugins` and `setupRollupPlugins`
```js ```js
import { metaConfigToWebDevServerConfig } from 'plugins-manager'; import { metaConfigToWebDevServerConfig } from 'plugins-manager';
import { fromRollup } from '@web/dev-server-rollup'; import { fromRollup } from '@web/dev-server-rollup';
const finalConfig = metaConfigToWebDevServerConfig(currentConfig, defaultMetaPlugins, { const finalConfig = metaConfigToWebDevServerConfig(currentConfig, defaultMetaPlugins, {
wrapperFunction: fromRollup, rollupWrapperFunction: fromRollup,
}); });
``` ```

View File

@@ -12,7 +12,6 @@ import { absoluteBaseUrlNetlify } from '@rocket/core/helpers';
export default /** @type {Partial<import('@rocket/cli').RocketCliOptions>} */ ({ export default /** @type {Partial<import('@rocket/cli').RocketCliOptions>} */ ({
presets: [rocketLaunch(), rocketBlog(), rocketSearch()], presets: [rocketLaunch(), rocketBlog(), rocketSearch()],
emptyOutputDir: false,
absoluteBaseUrl: absoluteBaseUrlNetlify('http://localhost:8080'), absoluteBaseUrl: absoluteBaseUrlNetlify('http://localhost:8080'),
}); });
``` ```

View File

@@ -51,6 +51,15 @@ Rocket uses the .gitignore file to manage it's requirements. If you skip this st
}; };
``` ```
5. (optionally) Create a file `.eleventyignore` (this file will be needed once you start customizing presets)
```
node_modules/**
/docs/_assets
/docs/_includes
/docs/_data
```
<inline-notification type="warning" title="note"> <inline-notification type="warning" title="note">
All further pathes are relative to your project root (my-project in this case) All further pathes are relative to your project root (my-project in this case)

View File

@@ -1,6 +1,14 @@
# @rocket/blog # @rocket/blog
## 0.1.1
### Patch Changes
- Updated dependencies [a8c7173]
- plugins-manager@0.2.0
## 0.1.0 ## 0.1.0
### Minor Changes ### Minor Changes
- 1971f5d: Initial Release - 1971f5d: Initial Release

View File

@@ -1,6 +1,6 @@
{ {
"name": "@rocket/blog", "name": "@rocket/blog",
"version": "0.1.0", "version": "0.1.1",
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },
@@ -38,6 +38,6 @@
"testing" "testing"
], ],
"dependencies": { "dependencies": {
"plugins-manager": "^0.1.0" "plugins-manager": "^0.2.0"
} }
} }

View File

@@ -1,6 +1,23 @@
# @rocket/cli # @rocket/cli
## 0.1.2
### Patch Changes
- 641c7e5: Add a pathPrefix option to allow deployment to a subdirectory
## 0.1.1
### Patch Changes
- a8c7173: Changes to config:
- Do not auto rollupWrap plugins added via `setupDevPlugins`.
- If you provide `devServer.plugins` then it will return that directly ignoring `setupDevAndBuildPlugins` and `setupDevPlugins`
- Updated dependencies [a8c7173]
- plugins-manager@0.2.0
## 0.1.0 ## 0.1.0
### Minor Changes ### Minor Changes
- 1971f5d: Initial Release - 1971f5d: Initial Release

View File

@@ -1,6 +1,6 @@
{ {
"name": "@rocket/cli", "name": "@rocket/cli",
"version": "0.1.0", "version": "0.1.2",
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },
@@ -63,7 +63,7 @@
"command-line-args": "^5.1.1", "command-line-args": "^5.1.1",
"command-line-usage": "^6.1.1", "command-line-usage": "^6.1.1",
"fs-extra": "^9.0.1", "fs-extra": "^9.0.1",
"plugins-manager": "^0.1.0" "plugins-manager": "^0.2.0"
}, },
"types": "dist-types/index.d.ts" "types": "dist-types/index.d.ts"
} }

View File

@@ -24,11 +24,6 @@ async function buildAndWrite(config) {
} }
async function productionBuild(config) { async function productionBuild(config) {
// const serviceWorkerFileName =
// config.build && config.build.serviceWorkerFileName
// ? config.build.serviceWorkerFileName
// : 'service-worker.js';
const mpaConfig = createMpaConfig({ const mpaConfig = createMpaConfig({
input: '**/*.html', input: '**/*.html',
output: { output: {

View File

@@ -9,6 +9,14 @@ import { metaConfigToWebDevServerConfig } from 'plugins-manager';
export class RocketStart { export class RocketStart {
commands = ['start']; commands = ['start'];
/**
* @param {RocketCliOptions} config
*/
setupCommand(config) {
delete config.pathPrefix;
return config;
}
/** /**
* @param {object} options * @param {object} options
* @param {RocketCliOptions} options.config * @param {RocketCliOptions} options.config
@@ -39,10 +47,11 @@ export class RocketStart {
clearTerminalOnReload: false, clearTerminalOnReload: false,
...this.config.devServer, ...this.config.devServer,
setupPlugins: [...this.config.setupDevAndBuildPlugins, ...this.config.setupDevPlugins], setupRollupPlugins: this.config.setupDevAndBuildPlugins,
setupPlugins: this.config.setupDevPlugins,
}, },
[], [],
{ wrapperFunction: fromRollup }, { rollupWrapperFunction: fromRollup },
); );
this.devServer = await startDevServer({ this.devServer = await startDevServer({

View File

@@ -122,7 +122,7 @@ describe('RocketCli e2e', () => {
}); });
describe('setupDevAndBuildPlugins in config', () => { describe('setupDevAndBuildPlugins in config', () => {
it('can add a rollup plugin to build', async () => { it('can add a rollup plugin via setupDevAndBuildPlugins for build command', async () => {
cli = new RocketCli({ cli = new RocketCli({
argv: [ argv: [
'build', 'build',
@@ -135,7 +135,7 @@ describe('RocketCli e2e', () => {
expect(inlineModule).to.equal('var a={test:"data"};console.log(a);'); expect(inlineModule).to.equal('var a={test:"data"};console.log(a);');
}); });
it('can add a rollup plugin to dev', async () => { it('can add a rollup plugin via setupDevAndBuildPlugins for start command', async () => {
cli = new RocketCli({ cli = new RocketCli({
argv: [ argv: [
'start', 'start',
@@ -203,35 +203,43 @@ describe('RocketCli e2e', () => {
); );
}); });
it.skip('can add a pathprefix for the build output', async () => { it('can add a pathprefix that will not influence the start command', async () => {
cli = new RocketCli({ cli = new RocketCli({
argv: [ argv: [
'build', 'start',
'--config-file', '--config-file',
path.join(__dirname, 'e2e-fixtures', 'content', 'eleventy.rocket.config.js'), path.join(__dirname, 'e2e-fixtures', 'content', 'pathprefix.rocket.config.js'),
], ],
}); });
await execute(); await execute();
// const indexHtml = await readOutput('index.html', { const indexHtml = await readOutput('link/index.html', {
// type: 'start', type: 'start',
// }); });
// expect(indexHtml).to.equal("<p>Markdown in 'docs/page/index.md'</p>"); expect(indexHtml).to.equal(
['<p><a href="../../">home</a></p>', '<p><a href="/">absolute home</a></p>'].join('\n'),
);
}); });
it.skip('works with an empty object in rocket.config.js', async () => { it('can add a pathPrefix that will be used in the build command', async () => {
cli = new RocketCli({ cli = new RocketCli({
argv: [ argv: [
'build', 'build',
'--config-file', '--config-file',
path.join(__dirname, 'e2e-fixtures', 'content', 'empty.rocket.config.js'), path.join(__dirname, 'e2e-fixtures', 'content', 'pathPrefix.rocket.config.js'),
], ],
}); });
await execute(); await execute();
// const indexHtml = await readOutput('index.html', { const indexHtml = await readOutput('link/index.html', {
// type: 'start', stripServiceWorker: true,
// }); stripToBody: true,
// expect(indexHtml).to.equal("<p>Markdown in 'docs/page/index.md'</p>"); });
expect(indexHtml).to.equal(
[
'<p><a href="../../">home</a></p>',
'<p><a href="/my-sub-folder/">absolute home</a></p>',
].join('\n'),
);
}); });
}); });

View File

@@ -1 +1,7 @@
---
layout: layout.njk
---
[home](../index.md) [home](../index.md)
<a href="{{ '/' | url }}">absolute home</a>

View File

@@ -1,6 +1,6 @@
/** @type {Partial<import("../../../types/main").RocketCliOptions>} */ /** @type {Partial<import("../../../types/main").RocketCliOptions>} */
const config = { const config = {
pathPrefix: 'my-sub-folder', pathPrefix: '/my-sub-folder/',
}; };
export default config; export default config;

View File

@@ -31,7 +31,7 @@
"mdjs" "mdjs"
], ],
"dependencies": { "dependencies": {
"@mdjs/core": "^0.6.0", "@mdjs/core": "^0.6.1",
"es-module-lexer": "^0.3.26", "es-module-lexer": "^0.3.26",
"unist-util-visit": "^2.0.3" "unist-util-visit": "^2.0.3"
}, },

View File

@@ -1,5 +1,12 @@
# Change Log # Change Log
## 0.6.1
### Patch Changes
- Updated dependencies [a8c7173]
- plugins-manager@0.2.0
## 0.6.0 ## 0.6.0
### Minor Changes ### Minor Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@mdjs/core", "name": "@mdjs/core",
"version": "0.6.0", "version": "0.6.1",
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },
@@ -48,7 +48,7 @@
"@types/unist": "^2.0.3", "@types/unist": "^2.0.3",
"es-module-lexer": "^0.3.26", "es-module-lexer": "^0.3.26",
"github-markdown-css": "^4.0.0", "github-markdown-css": "^4.0.0",
"plugins-manager": "^0.1.0", "plugins-manager": "^0.2.0",
"rehype-autolink-headings": "^5.0.1", "rehype-autolink-headings": "^5.0.1",
"rehype-prism-template": "^0.4.1", "rehype-prism-template": "^0.4.1",
"rehype-raw": "^5.0.0", "rehype-raw": "^5.0.0",

View File

@@ -1,6 +1,22 @@
# plugins-manager # plugins-manager
## 0.2.0
### Minor Changes
- a8c7173: Changes to `metaConfigToWebDevServerConfig`:
- Renamed `wrapperFunction` to `rollupWrapperFunction`
- Adds `setupRollupPlugins` which means those plugins are treated as rollup plugins and they will be wrapped by `rollupWrapperFunction` (if provided)
- Plugins added via `setupPlugins` will no longer be wrapped
- If you provide `config.plugins` then it will return that directly ignoring `setupPlugins` and `setupRollupPlugins`
Changes to `metaConfigToRollupConfig`:
- If you provide `config.plugins` then it will return that directly ignoring `setupPlugins`
## 0.1.0 ## 0.1.0
### Minor Changes ### Minor Changes
- b9a6274: First initial release - b9a6274: First initial release

View File

@@ -1,6 +1,6 @@
{ {
"name": "plugins-manager", "name": "plugins-manager",
"version": "0.1.0", "version": "0.2.0",
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },

View File

@@ -7,6 +7,10 @@ import { executeSetupFunctions } from 'plugins-manager';
* @param {MetaPlugin[]} [metaPlugins] * @param {MetaPlugin[]} [metaPlugins]
*/ */
export function metaConfigToRollupConfig(config, metaPlugins = []) { export function metaConfigToRollupConfig(config, metaPlugins = []) {
if (config.plugins) {
delete config.setupPlugins;
return config;
}
const _metaPlugins = executeSetupFunctions(config.setupPlugins, [...metaPlugins]); const _metaPlugins = executeSetupFunctions(config.setupPlugins, [...metaPlugins]);
const plugins = _metaPlugins.map(pluginObj => { const plugins = _metaPlugins.map(pluginObj => {

View File

@@ -1,28 +1,53 @@
/** @typedef {import('../types/main').MetaPlugin} MetaPlugin */ /** @typedef {import('../types/main').MetaPluginWrapable} MetaPluginWrapable */
import { executeSetupFunctions } from 'plugins-manager'; import { executeSetupFunctions } from 'plugins-manager';
/** /**
* @param {any} config * @param {any} config
* @param {MetaPlugin[]} metaPlugins * @param {MetaPluginWrapable[]} metaPlugins
* @param {object} [options] * @param {object} [options]
* @param {function | null} [options.wrapperFunction] * @param {function | null} [options.rollupWrapperFunction]
*/ */
export function metaConfigToWebDevServerConfig(config, metaPlugins, { wrapperFunction = null }) { export function metaConfigToWebDevServerConfig(
const _metaPlugins = executeSetupFunctions(config.setupPlugins, [...metaPlugins]); config,
metaPlugins,
{ rollupWrapperFunction = null } = {},
) {
if (config.plugins) {
delete config.setupPlugins;
delete config.setupRollupPlugins;
return config;
}
const metaPluginsNoWrap = metaPlugins.map(pluginObj => {
pluginObj.__noWrap = true;
return pluginObj;
});
const rollupPlugins = /** @type {MetaPluginWrapable[]} */ (executeSetupFunctions(
config.setupRollupPlugins,
[...metaPluginsNoWrap],
));
const wrappedRollupPlugins = rollupPlugins.map(pluginObj => {
if (typeof rollupWrapperFunction === 'function' && pluginObj.__noWrap !== true) {
pluginObj.plugin = rollupWrapperFunction(pluginObj.plugin);
}
return pluginObj;
});
const _metaPlugins = executeSetupFunctions(config.setupPlugins, [...wrappedRollupPlugins]);
const plugins = _metaPlugins.map(pluginObj => { const plugins = _metaPlugins.map(pluginObj => {
const usePlugin =
typeof wrapperFunction === 'function' ? wrapperFunction(pluginObj.plugin) : pluginObj.plugin;
if (pluginObj.options) { if (pluginObj.options) {
return usePlugin(pluginObj.options); return pluginObj.plugin(pluginObj.options);
} else { } else {
return usePlugin(); return pluginObj.plugin();
} }
}); });
config.plugins = plugins; config.plugins = plugins;
delete config.setupPlugins; delete config.setupPlugins;
delete config.setupRollupPlugins;
return config; return config;
} }

View File

@@ -28,4 +28,16 @@ describe('metaConfigToRollupConfig', () => {
expect(config.plugins).to.deep.equal(['firstPlugin', '-- insertPlugin --']); expect(config.plugins).to.deep.equal(['firstPlugin', '-- insertPlugin --']);
expect(config.setupPlugins).to.be.undefined; expect(config.setupPlugins).to.be.undefined;
}); });
it('prefers a user set config.plugins', async () => {
const config = metaConfigToRollupConfig(
{
setupPlugins: [addPlugin({ name: 'insert', plugin: insertPlugin })],
plugins: ['user-set'],
},
threeExistingPlugin,
);
expect(config.plugins).to.deep.equal(['user-set']);
expect(config.setupPlugins).to.be.undefined;
});
}); });

View File

@@ -1,26 +1,56 @@
import chai from 'chai'; import chai from 'chai';
import { metaConfigToWebDevServerConfig } from 'plugins-manager'; import { metaConfigToWebDevServerConfig, addPlugin } from 'plugins-manager';
const { expect } = chai; const { expect } = chai;
describe('metaConfigToWebDevServerConfig', () => { describe('metaConfigToWebDevServerConfig', () => {
const threeExistingPlugin = [ const twoExistingPlugin = [
{ name: 'first', plugin: () => 'firstPlugin' }, { name: 'first', plugin: () => 'firstPlugin' },
{ name: 'second', plugin: () => 'secondPlugin' }, { name: 'second', plugin: () => 'secondPlugin' },
{ name: 'third', plugin: () => 'thirdPlugin' },
]; ];
it('accepts a wrapper function for plugins', async () => { it('accepts a rollupWrapperFunction for setupRollupPlugins', async () => {
function wrapperFunction(srcFn) { function rollupWrapperFunction(srcFn) {
return () => `*wrapped* ${srcFn()}`; return () => `*wrapped* ${srcFn()}`;
} }
const config = metaConfigToWebDevServerConfig({}, threeExistingPlugin, { wrapperFunction }); const config = metaConfigToWebDevServerConfig(
{
setupRollupPlugins: [
addPlugin({ name: 'third', plugin: () => 'thirdPlugin' }),
addPlugin({ name: 'fourth', plugin: () => 'fourthPlugin' }),
],
setupPlugins: [
addPlugin({ name: 'fifth', plugin: () => 'fifthPlugin' }),
addPlugin({ name: 'sixth', plugin: () => 'sixthPlugin' }),
],
},
twoExistingPlugin,
{ rollupWrapperFunction },
);
expect(config.plugins).to.deep.equal([ expect(config.plugins).to.deep.equal([
'*wrapped* firstPlugin', 'firstPlugin',
'*wrapped* secondPlugin', 'secondPlugin',
'*wrapped* thirdPlugin', '*wrapped* thirdPlugin',
'*wrapped* fourthPlugin',
'fifthPlugin',
'sixthPlugin',
]); ]);
}); });
it('prefers a user set config.plugins', async () => {
const config = metaConfigToWebDevServerConfig(
{
setupPlugins: [addPlugin({ name: 'first', plugin: () => 'firstPlugin' })],
setupRollupPlugins: [addPlugin({ name: 'second', plugin: () => 'secondPlugin' })],
plugins: ['user-set'],
},
twoExistingPlugin,
);
expect(config.plugins).to.deep.equal(['user-set']);
expect(config.setupPlugins).to.be.undefined;
expect(config.setupRollupPlugins).to.be.undefined;
});
}); });

View File

@@ -3,3 +3,7 @@ export interface MetaPlugin {
plugin: any; plugin: any;
options?: any; options?: any;
} }
export interface MetaPluginWrapable extends MetaPlugin {
__noWrap?: boolean;
}

View File

@@ -1,6 +1,14 @@
# @rocket/search # @rocket/search
## 0.1.1
### Patch Changes
- Updated dependencies [a8c7173]
- plugins-manager@0.2.0
## 0.1.0 ## 0.1.0
### Minor Changes ### Minor Changes
- 1971f5d: Initial Release - 1971f5d: Initial Release

View File

@@ -1,6 +1,6 @@
{ {
"name": "@rocket/search", "name": "@rocket/search",
"version": "0.1.0", "version": "0.1.1",
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },
@@ -43,7 +43,7 @@
"@lion/combobox": "^0.1.16", "@lion/combobox": "^0.1.16",
"@open-wc/scoped-elements": "^1.3.2", "@open-wc/scoped-elements": "^1.3.2",
"minisearch": "^3.0.2", "minisearch": "^3.0.2",
"plugins-manager": "^0.1.0", "plugins-manager": "^0.2.0",
"sax-wasm": "^2.0.0" "sax-wasm": "^2.0.0"
} }
} }