Compare commits

...

17 Commits

Author SHA1 Message Date
github-actions[bot]
cb49251158 Version Packages 2022-04-24 21:47:53 +02:00
Thijs Louisse
b3194556c2 chore: change get renderFunction() in renderStory(html, container, opts) 2022-04-24 21:42:55 +02:00
Thijs Louisse
7732541df4 chore: fix lint error RocketDrawer 2022-04-24 21:42:55 +02:00
Thijs Louisse
72ed8d274a chore: add /.history to .gitignore 2022-04-24 21:42:55 +02:00
Thijs Louisse
f4d83fe958 feat(mdjs-preview): provide overridable renderFunction 2022-04-24 21:42:55 +02:00
github-actions[bot]
4ac62106a2 Version Packages 2022-03-28 15:10:10 +02:00
Thomas Allmer
c2c9ecd39a feat(rocket-search): update lion dependencies 2022-03-28 15:08:25 +02:00
github-actions[bot]
c009801164 Version Packages 2022-03-08 14:41:55 +01:00
Thomas Allmer
60310ab3dd fix: improve performance by loading sax-wasm only once 2022-03-08 14:37:31 +01:00
github-actions[bot]
db03f69210 Version Packages 2022-03-07 19:27:03 +01:00
Thomas Allmer
e6c3d274cf feat(mdjs-core): support js client as an alias to js script 2022-03-07 19:19:24 +01:00
github-actions[bot]
f9014c15a6 Version Packages 2022-03-07 18:42:20 +01:00
Thomas Allmer
7e277cd88f feat(plugins-manager): support a wrapPlugin property for adding 2022-03-07 18:35:41 +01:00
Thomas Allmer
bc6106381c chore: lock file maintainance 2022-03-06 21:05:23 +01:00
dependabot[bot]
00bf3882f6 chore(deps-dev): bump node-fetch from 2.6.1 to 2.6.7
Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.1 to 2.6.7.
- [Release notes](https://github.com/node-fetch/node-fetch/releases)
- [Commits](https://github.com/node-fetch/node-fetch/compare/v2.6.1...v2.6.7)

---
updated-dependencies:
- dependency-name: node-fetch
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-06 20:51:33 +01:00
dependabot[bot]
543e297c5b chore(deps): bump pathval from 1.1.0 to 1.1.1
Bumps [pathval](https://github.com/chaijs/pathval) from 1.1.0 to 1.1.1.
- [Release notes](https://github.com/chaijs/pathval/releases)
- [Changelog](https://github.com/chaijs/pathval/blob/master/CHANGELOG.md)
- [Commits](https://github.com/chaijs/pathval/compare/v1.1.0...v1.1.1)

---
updated-dependencies:
- dependency-name: pathval
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-06 20:50:48 +01:00
dependabot[bot]
70b0ce8e1c chore(deps): bump simple-get from 3.1.0 to 3.1.1
Bumps [simple-get](https://github.com/feross/simple-get) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/feross/simple-get/releases)
- [Commits](https://github.com/feross/simple-get/compare/v3.1.0...v3.1.1)

---
updated-dependencies:
- dependency-name: simple-get
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-06 20:50:31 +01:00
27 changed files with 573 additions and 809 deletions

1
.gitignore vendored
View File

@@ -1,6 +1,7 @@
## editors
/.idea
/.vscode
/.history
## system files
.DS_Store

View File

@@ -226,6 +226,31 @@ class DemoElement extends HTMLElement {
customElements.define('demo-element', DemoElement);
```
## Extending mdjs-preview
It is possible to define a custom version of mdjs-preview in order to add functionality, change
its appearance of make it run in 'hybrid mode' (accepting both lit1 and -2 TemplateResults).
The example below shows how the latter can be achieved by providing a custom render function.
Note that we define `mdjs-preview` as the custom element name. We need to make sure that this
file is executed before the original mdjs-preview definition file is executed.
```js
import { MdJsPreview } from '@mdjs/mdjs-preview';
import { render as render2 } from 'lit';
import { isTemplateResult as isTemplateResult2 } from 'lit/directive-helpers.js';
import { render as render1 } from 'lit-html';
export class HybridLitMdjsPreview extends MdJsPreview {
renderStory(html, container, options) {
if (isTemplateResult2(html)) {
render2(html, container, options);
} else {
render1(html, container, options);
}
}
customElements.define('mdjs-preview', HybridLitMdjsPreview);
```
```js script
import '@rocket/launch/inline-notification/inline-notification.js';
```

View File

@@ -112,16 +112,13 @@ addPlugin(MyClass, { otherProp: 'new name' }); // ts error
Many plugin systems require you to either execute a plugin function like in `rollup`.
<!-- prettier-ignore-start -->
```js
import json from '@rollup/plugin-json';
/** @type {import('rocket/cli').RocketCliConfig} */
export default ({
export default /** @type {import('rocket/cli').RocketCliConfig} */ ({
plugins: [json({ preferConst: true })],
});
```
<!-- prettier-ignore-end -->
or add it in a special way like in `eleventy`
@@ -254,6 +251,18 @@ addPlugin(myPlugin, { myFlag: true }); // ts ok
addPlugin(myPlugin, { notExisting: true }); // ts error
```
Note: There is a "hidden" feature in addPlugin that if you attach a `wrapPlugin` property to the returning function it will call `wrapPlugin` on the plugin before adding it.
```js
// example auto wrap rollup plugins for @web/dev-server
import { fromRollup } from '@web/dev-server-rollup';
const userSetupFunctions = [addPlugin(json)].map(mod => {
mod.wrapPlugin = fromRollup;
return mod;
});
```
## Adjusting Plugin Options
Adjusting options means to either

View File

@@ -33,7 +33,6 @@
"setup": "npm run setup:ts-configs && npm run build:packages",
"setup:patches": "npx patch-package",
"setup:ts-configs": "node scripts/generate-ts-configs.mjs",
"xprestart": "yarn analyze",
"start": "node --trace-warnings packages/cli/src/cli.js start",
"test": "yarn test:node && yarn test:web",
"test:node": "mocha \"packages/*/test-node/**/*.test.{ts,js,mjs,cjs}\" --timeout 5000 --reporter dot --exit",
@@ -44,12 +43,13 @@
"types:copy": "node scripts/workspaces-scripts-bin.mjs types:copy",
"update-dependency": "node scripts/update-dependency.js",
"update-esm-entrypoints": "node scripts/update-esm-entrypoints.mjs && yarn format",
"update-package-configs": "node scripts/update-package-configs.mjs && yarn format"
"update-package-configs": "node scripts/update-package-configs.mjs && yarn format",
"xprestart": "yarn analyze"
},
"devDependencies": {
"@changesets/cli": "^2.12.0",
"@changesets/cli": "^2.20.0",
"@custom-elements-manifest/analyzer": "^0.4.12",
"@open-wc/testing": "^3.0.0-next.1",
"@open-wc/testing": "^3.1.2",
"@rollup/plugin-commonjs": "^17.0.0",
"@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-typescript": "^8.1.0",
@@ -75,7 +75,7 @@
"husky": "^4.3.7",
"lint-staged": "^10.5.3",
"mocha": "^8.2.1",
"node-fetch": "^2.6.1",
"node-fetch": "^2.6.7",
"npm-run-all": "^4.1.5",
"onchange": "^7.1.0",
"prettier": "^2.2.1",
@@ -84,8 +84,6 @@
"puppeteer": "^9.0.0",
"remark-emoji": "^2.1.0",
"rimraf": "^3.0.2",
"rocket-preset-code-tabs": "^0.2.6",
"rocket-preset-custom-elements-manifest": "^0.1.7",
"rollup": "^2.36.1",
"rollup-plugin-terser": "^7.0.2",
"sinon": "^9.2.3",

View File

@@ -1,5 +1,13 @@
# @rocket/cli
## 0.10.2
### Patch Changes
- 60310ab: Improve performance by initializing sax-wasm only once even when it is running in parallel
- Updated dependencies [60310ab]
- @rocket/eleventy-rocket-nav@0.3.1
## 0.10.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@rocket/cli",
"version": "0.10.1",
"version": "0.10.2",
"publishConfig": {
"access": "public"
},
@@ -60,7 +60,7 @@
"@rocket/building-rollup": "^0.4.0",
"@rocket/core": "^0.1.2",
"@rocket/eleventy-plugin-mdjs-unified": "^0.6.0",
"@rocket/eleventy-rocket-nav": "^0.3.0",
"@rocket/eleventy-rocket-nav": "^0.3.1",
"@rollup/plugin-babel": "^5.2.2",
"@rollup/plugin-node-resolve": "^11.0.1",
"@web/config-loader": "^0.1.3",

View File

@@ -243,9 +243,9 @@ async function insertResponsiveImages(html) {
const config = getComputedConfig();
if (!isSetup) {
await parser.prepareWasm(saxWasmBuffer);
isSetup = true;
isSetup = parser.prepareWasm(saxWasmBuffer);
}
await isSetup;
const options = {
inputPath: this.inputPath,

View File

@@ -13,6 +13,7 @@ function transitionend(el) {
});
}
// @ts-expect-error
export class RocketDrawer extends OverlayMixin(LitElement) {
static get properties() {
return {

View File

@@ -1,5 +1,11 @@
# @rocket/eleventy-rocket-nav
## 0.3.1
### Patch Changes
- 60310ab: Improve performance by initializing sax-wasm only once even when it is running in parallel
## 0.3.0
### Minor Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@rocket/eleventy-rocket-nav",
"version": "0.3.0",
"version": "0.3.1",
"publishConfig": {
"access": "public"
},

View File

@@ -97,6 +97,7 @@ function getHeadingsOfHtml(html) {
return { headings, insertPoint };
}
/** @type {boolean | Promise<unknown>} */
let isSetup = false;
/**
@@ -104,9 +105,9 @@ let isSetup = false;
*/
async function addPageAnchors(content) {
if (!isSetup) {
await parser.prepareWasm(saxWasmBuffer);
isSetup = true;
isSetup = parser.prepareWasm(saxWasmBuffer);
}
await isSetup;
const { headings, insertPoint } = getHeadingsOfHtml(content);
const pageAnchorsHtml = [];

View File

@@ -1,5 +1,11 @@
# Change Log
## 0.9.4
### Patch Changes
- e6c3d27: Support `js client` as an alias to `js script`
## 0.9.3
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@mdjs/core",
"version": "0.9.3",
"version": "0.9.4",
"publishConfig": {
"access": "public"
},

View File

@@ -16,6 +16,9 @@ function mdjsParse() {
if (node.lang === 'js' && node.meta === 'script') {
jsCode += node.value;
}
if (node.lang === 'js' && node.meta === 'client') {
jsCode += node.value;
}
});
// we can only return/modify the tree but jsCode should not be part of the tree
// so we attach it globally to the file.data
@@ -26,7 +29,9 @@ function mdjsParse() {
* @param {Node} node
*/
const removeFunction = node =>
node.type === 'code' && node.lang === 'js' && node.meta === 'script';
node.type === 'code' &&
node.lang === 'js' &&
(node.meta === 'script' || node.meta === 'client');
remove(tree, removeFunction);
return tree;

View File

@@ -28,6 +28,24 @@ describe('mdjsParse', () => {
expect(/** @type {MDJSVFileData} */ (result.data).jsCode).to.equal('const bar = 22;');
});
it('extracts "js client" code blocks', async () => {
const input = [
'## Intro',
'```js',
'const foo = 1;',
'```',
'```js client',
'const bar = 22;',
'```',
].join('\n');
const parser = unified().use(markdown).use(mdjsParse).use(html, { sanitize: false });
const result = await parser.process(input);
expect(result.contents).to.equal(
'<h2>Intro</h2>\n<pre><code class="language-js">const foo = 1;\n</code></pre>\n',
);
expect(/** @type {MDJSVFileData} */ (result.data).jsCode).to.equal('const bar = 22;');
});
// TODO: fix this bug - maybe something in unified itself 🤔
it.skip('handling only "js script" code blocks', async () => {
const input = [

View File

@@ -1,5 +1,11 @@
# @mdjs/mdjs-preview
## 0.5.7
### Patch Changes
- f4d83fe: add overridable `renderFunction` to mdjs-preview
## 0.5.6
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@mdjs/mdjs-preview",
"version": "0.5.6",
"version": "0.5.7",
"publishConfig": {
"access": "public"
},

View File

@@ -10,6 +10,13 @@ import {
} from './mdjsViewerSharedStates.js';
import { addResizeHandler } from './resizeHandler.js';
/**
* @typedef {{values: unknown[], strings:string[],processor:Function}} TemplateResult1
* @typedef {import('lit').TemplateResult} TemplateResult2
* @typedef {{templateFactory:any; eventContext: EventTarget }} RenderOptions1
* @typedef {import('lit').RenderOptions} RenderOptions2
*/
/**
* @param {string} input
* @param {'js'|'css'} type
@@ -72,6 +79,46 @@ export class MdJsPreview extends ScopedElementsMixin(LitElement) {
};
}
/**
* By default, the render of lit2 is provided, which is compatible with TemplateResults of lit2.
* However, in contexts that need to run multiple versions of lit, it should be possible to
* provide a specific render function, like renderHybrid, that internally checks, based on the
* TemplateResult, whether the render function of lit 1 or 2 should called.
* Overriding the render function would look like:
*
* @protected
* @param {TemplateResult1|TemplateResult2|LitHtmlStoryFn} html Any value renderable by NodePart - typically a TemplateResult
* created by evaluating a template tag like `html` or `svg`.
* @param {HTMLElement} container A DOM parent to render to. The entire contents are either
* replaced, or efficiently updated if the same result type was previous
* rendered there.
* @param {Partial<RenderOptions2>} [options] RenderOptions for the entire render tree rendered to this
* container. Render options must *not* change between renders to the same
* container, as those changes will not effect previously rendered DOM.
*
* @example
* ```js
* import { MdJsPreview } from '@mdjs/mdjs-preview';
* import { render as render2 } from 'lit';
* import { isTemplateResult as isTemplateResult2 } from 'lit/directive-helpers.js';
* import { render as render1 } from 'lit-html';
*
* export class HybridLitMdjsPreview extends MdJsPreview {
* renderStory(html, container, options) {
* if (isTemplateResult2(html)) {
* render2(html, container, options);
* } else {
* render1(html, container, options);
* }
* }
* }
* customElements.define('mdjs-preview', HybridLitMdjsPreview);
* ```
*/
renderStory(html, container, options) {
render(html, container, options);
}
constructor() {
super();
/** @type {LitHtmlStoryFn} */
@@ -257,7 +304,10 @@ export class MdJsPreview extends ScopedElementsMixin(LitElement) {
}
if (this.lightDomRenderTarget && changeProps.has('story')) {
render(this.story({ shadowRoot: this }), this.lightDomRenderTarget);
this.renderStory(
/** @type {LitHtmlStoryFn} */ (this.story({ shadowRoot: this })),
this.lightDomRenderTarget,
);
}
if (changeProps.has('platform') || changeProps.has('size')) {

View File

@@ -0,0 +1,30 @@
import { expect, fixture, html } from '@open-wc/testing';
import { html as storyHtml } from '@mdjs/mdjs-preview';
import { MdJsPreview } from '@mdjs/mdjs-preview';
import { render as render2 } from 'lit';
import { isTemplateResult as isTemplateResult2 } from 'lit/directive-helpers.js';
/** @typedef {import('@mdjs/mdjs-preview').MdJsPreview} MdJsPreview */
describe('mdjs-preview Subclasser', () => {
it('will expose a render function getter to override in extensions', async () => {
let isCalled = false;
class HybridLitMdjsPreview extends MdJsPreview {
renderStory(html, container, options) {
isCalled = true;
if (isTemplateResult2(html)) {
render2(html, container, options);
} else {
throw new Error('[mdjs-preview]: Only lit2 allowed');
}
}
}
customElements.define('mdjs-preview', HybridLitMdjsPreview);
const el = await fixture(html`
<mdjs-preview .story=${() => storyHtml`<p id="testing"></p>`}></mdjs-preview>
`);
expect(isCalled).to.be.true;
expect(el.querySelectorAll('#testing').length).to.equal(1);
});
});

View File

@@ -5,7 +5,7 @@ import '@mdjs/mdjs-preview/define';
/** @typedef {import('@mdjs/mdjs-preview').MdJsPreview} MdJsPreview */
describe('mdjs-preview', () => {
it('will render the element into the shadow root by default', async () => {
it('will render the element into light dom by default', async () => {
const el = await fixture(html`
<mdjs-preview .story=${() => storyHtml`<p id="testing"></p>`}></mdjs-preview>
`);

View File

@@ -1,5 +1,11 @@
# plugins-manager
## 0.3.1
### Patch Changes
- 7e277cd: Add a "hidden" feature in addPlugin that if you attach a `wrapPlugin` property to the returning function it will call `wrapPlugin` on the plugin before adding it.
## 0.3.0
### Minor Changes

View File

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

View File

@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */
/**
* @template {import('../types/main').Plugin} T
* @param {T} plugin
@@ -12,6 +13,10 @@ export function addPlugin(plugin, options = {}, { how = 'after', location = 'bot
if (plugins === undefined) {
plugins = [];
}
// @ts-ignore
const usePlugin = addPluginFn.wrapPlugin ? addPluginFn.wrapPlugin(plugin) : plugin;
// only add if name is not already in the meta plugin list
if (plugins.findIndex(pluginObj => pluginObj.plugin === plugin) === -1) {
let index = -1;
@@ -40,7 +45,7 @@ export function addPlugin(plugin, options = {}, { how = 'after', location = 'bot
}
plugins.splice(index, 0, {
plugin,
plugin: usePlugin,
options,
});
}

View File

@@ -109,4 +109,18 @@ describe('addPlugin', () => {
});
expect(config.plugins).to.deep.equal(['-- newFirst last Plugin --']);
});
it('[advanced] can add a `wrapPlugin` property to the function itself which will call it on the plugin on init', async () => {
function myWrapper(plugin) {
return () => 'wrapped' + plugin();
}
const config = applyPlugins({
setupPlugins: [addPlugin(insertPlugin)].map(mod => {
mod.wrapPlugin = myWrapper;
return mod;
}),
});
expect(config.plugins).to.deep.equal(['wrapped-- first last Plugin --']);
});
});

View File

@@ -1,5 +1,11 @@
# @rocket/search
## 0.6.0
### Minor Changes
- c2c9ecd: Update @lion dependencies
## 0.5.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@rocket/search",
"version": "0.5.1",
"version": "0.6.0",
"publishConfig": {
"access": "public"
},
@@ -42,9 +42,9 @@
"search"
],
"dependencies": {
"@lion/combobox": "^0.8.6",
"@lion/core": "^0.19.0",
"@lion/listbox": "^0.10.7",
"@lion/combobox": "^0.9.0",
"@lion/core": "^0.21.0",
"@lion/listbox": "^0.12.0",
"@open-wc/scoped-elements": "^2.0.0",
"chalk": "^4.0.0",
"minisearch": "^3.0.2",

1129
yarn.lock

File diff suppressed because it is too large Load Diff