piral-preact 1.0.0-pre.2085 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +8 -9
- package/convert.d.ts +16 -7
- package/convert.js +16 -11
- package/esm/converter.d.ts +13 -0
- package/esm/converter.js +20 -0
- package/esm/converter.js.map +1 -0
- package/esm/create.d.ts +12 -0
- package/esm/create.js +20 -0
- package/esm/create.js.map +1 -0
- package/esm/extension.d.ts +3 -0
- package/esm/extension.js +53 -0
- package/esm/extension.js.map +1 -0
- package/esm/index.d.ts +2 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/mount.d.ts +5 -0
- package/esm/mount.js +23 -0
- package/esm/mount.js.map +1 -0
- package/esm/types.d.ts +34 -0
- package/esm/types.js +2 -0
- package/esm/types.js.map +1 -0
- package/lib/converter.d.ts +13 -3
- package/lib/converter.js +17 -15
- package/lib/converter.js.map +1 -1
- package/lib/create.d.ts +2 -6
- package/lib/create.js +8 -14
- package/lib/create.js.map +1 -1
- package/lib/extension.d.ts +2 -2
- package/lib/extension.js +46 -30
- package/lib/extension.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/mount.d.ts +1 -1
- package/lib/mount.js +15 -21
- package/lib/mount.js.map +1 -1
- package/lib/types.d.ts +2 -2
- package/package.json +31 -7
- package/src/converter.ts +26 -16
- package/src/create.ts +4 -13
- package/src/extension.ts +33 -2
- package/src/mount.ts +1 -1
- package/src/types.ts +2 -2
- package/convert.ts +0 -16
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
[](https://piral.io)
|
|
2
2
|
|
|
3
|
-
# [Piral Preact](https://piral.io) · [](https://github.com/smapiot/piral/blob/
|
|
3
|
+
# [Piral Preact](https://piral.io) · [](https://github.com/smapiot/piral/blob/main/LICENSE) [](https://www.npmjs.com/package/piral-preact) [](https://jestjs.io) [](https://gitter.im/piral-io/community)
|
|
4
4
|
|
|
5
|
-
This is a plugin that only has a peer dependency to `
|
|
5
|
+
This is a plugin that only has a peer dependency to `preact`. What `piral-preact` brings to the table is a set of Pilet API extensions that can be used with `piral` or `piral-core`.
|
|
6
6
|
|
|
7
7
|
The set includes a Preact converter for any component registration, as well as a `fromPreact` shortcut and a `PreactExtension` component.
|
|
8
8
|
|
|
@@ -47,7 +47,7 @@ Alternatively, if `piral-preact` has not been added to the Piral instance you ca
|
|
|
47
47
|
|
|
48
48
|
```ts
|
|
49
49
|
import { PiletApi } from '<name-of-piral-instance>';
|
|
50
|
-
import { fromPreact } from 'piral-preact';
|
|
50
|
+
import { fromPreact } from 'piral-preact/convert';
|
|
51
51
|
import { PreactPage } from './PreactPage';
|
|
52
52
|
|
|
53
53
|
export function setup(piral: PiletApi) {
|
|
@@ -62,7 +62,6 @@ export function setup(piral: PiletApi) {
|
|
|
62
62
|
Using Preact with Piral is as simple as installing `piral-preact` and `preact`.
|
|
63
63
|
|
|
64
64
|
```ts
|
|
65
|
-
import 'preact';
|
|
66
65
|
import { createPreactApi } from 'piral-preact';
|
|
67
66
|
```
|
|
68
67
|
|
|
@@ -80,10 +79,10 @@ The `preact` package should be shared with the pilets via the *package.json*:
|
|
|
80
79
|
|
|
81
80
|
```json
|
|
82
81
|
{
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"preact"
|
|
86
|
-
|
|
82
|
+
"importmap": {
|
|
83
|
+
"imports": {
|
|
84
|
+
"preact": ""
|
|
85
|
+
}
|
|
87
86
|
}
|
|
88
87
|
}
|
|
89
88
|
```
|
package/convert.d.ts
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { createConverter } from './esm/converter';
|
|
2
|
+
export interface HtmlComponent<TProps> {
|
|
3
|
+
component: {
|
|
4
|
+
mount(element: HTMLElement, props: TProps, ctx: any, locals: any): void;
|
|
5
|
+
update?(element: HTMLElement, props: TProps, ctx: any, locals: any): void;
|
|
6
|
+
unmount?(element: HTMLElement, locals: any): void;
|
|
7
|
+
};
|
|
8
|
+
type: 'html';
|
|
9
|
+
}
|
|
4
10
|
export interface PreactConverter {
|
|
5
|
-
(...params: Parameters<typeof
|
|
11
|
+
(...params: Parameters<ReturnType<typeof createConverter>>): HtmlComponent<any>;
|
|
6
12
|
}
|
|
7
|
-
export declare
|
|
8
|
-
|
|
9
|
-
|
|
13
|
+
export declare function createPreactConverter(...params: Parameters<typeof createConverter>): {
|
|
14
|
+
from: PreactConverter;
|
|
15
|
+
Extension: ComponentType<any>;
|
|
16
|
+
};
|
|
17
|
+
declare const fromPreact: PreactConverter, PreactExtension: ComponentType<any>;
|
|
18
|
+
export { fromPreact, PreactExtension };
|
package/convert.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { createConverter } from './esm/converter';
|
|
2
|
+
export function createPreactConverter() {
|
|
3
|
+
var params = [];
|
|
4
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
5
|
+
params[_i] = arguments[_i];
|
|
6
|
+
}
|
|
7
|
+
var convert = createConverter.apply(void 0, params);
|
|
8
|
+
var Extension = convert.Extension;
|
|
9
|
+
var from = function (root) { return ({
|
|
10
|
+
type: 'html',
|
|
11
|
+
component: convert(root),
|
|
12
|
+
}); };
|
|
13
|
+
return { from: from, Extension: Extension };
|
|
14
|
+
}
|
|
15
|
+
var _a = createPreactConverter(), fromPreact = _a.from, PreactExtension = _a.Extension;
|
|
16
|
+
export { fromPreact, PreactExtension };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ComponentType } from 'preact';
|
|
2
|
+
import type { ForeignComponent, BaseComponentProps } from 'piral-core';
|
|
3
|
+
export interface PreactConverterOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Defines the name of the root element.
|
|
6
|
+
* @default piral-slot
|
|
7
|
+
*/
|
|
8
|
+
rootName?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function createConverter(config?: PreactConverterOptions): {
|
|
11
|
+
<TProps extends BaseComponentProps>(root: ComponentType<TProps>): ForeignComponent<TProps>;
|
|
12
|
+
Extension: ComponentType<import("piral-core").ExtensionSlotProps>;
|
|
13
|
+
};
|
package/esm/converter.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { mountPreact, unmountPreact } from './mount';
|
|
2
|
+
import { createExtension } from './extension';
|
|
3
|
+
export function createConverter(config = {}) {
|
|
4
|
+
const { rootName = 'piral-slot' } = config;
|
|
5
|
+
const Extension = createExtension(rootName);
|
|
6
|
+
const convert = (root) => ({
|
|
7
|
+
mount(el, props, ctx) {
|
|
8
|
+
mountPreact(el, root, props, ctx);
|
|
9
|
+
},
|
|
10
|
+
update(el, props, ctx) {
|
|
11
|
+
mountPreact(el, root, props, ctx);
|
|
12
|
+
},
|
|
13
|
+
unmount(el) {
|
|
14
|
+
unmountPreact(el);
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
convert.Extension = Extension;
|
|
18
|
+
return convert;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAU9C,MAAM,UAAU,eAAe,CAAC,SAAiC,EAAE;IACjE,MAAM,EAAE,QAAQ,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;IAC3C,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,CAAoC,IAA2B,EAA4B,EAAE,CAAC,CAAC;QAC7G,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG;YAClB,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG;YACnB,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,EAAE;YACR,aAAa,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/esm/create.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PiralPlugin } from 'piral-core';
|
|
2
|
+
import { PreactConverterOptions } from './converter';
|
|
3
|
+
import type { PiletPreactApi } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Available configuration options for the Preact plugin.
|
|
6
|
+
*/
|
|
7
|
+
export interface PreactConfig extends PreactConverterOptions {
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates new Pilet API extensions for integrating Preact.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createPreactApi(config?: PreactConfig): PiralPlugin<PiletPreactApi>;
|
package/esm/create.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createConverter } from './converter';
|
|
2
|
+
/**
|
|
3
|
+
* Creates new Pilet API extensions for integrating Preact.
|
|
4
|
+
*/
|
|
5
|
+
export function createPreactApi(config = {}) {
|
|
6
|
+
return (context) => {
|
|
7
|
+
const convert = createConverter(config);
|
|
8
|
+
context.converters.preact = ({ root }) => convert(root);
|
|
9
|
+
return {
|
|
10
|
+
fromPreact(root) {
|
|
11
|
+
return {
|
|
12
|
+
type: 'preact',
|
|
13
|
+
root,
|
|
14
|
+
};
|
|
15
|
+
},
|
|
16
|
+
PreactExtension: convert.Extension,
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAA0B,MAAM,aAAa,CAAC;AAQtE;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAuB,EAAE;IACvD,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAExD,OAAO;YACL,UAAU,CAAC,IAAI;gBACb,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI;iBACL,CAAC;YACJ,CAAC;YACD,eAAe,EAAE,OAAO,CAAC,SAAS;SACnC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/esm/extension.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Component, createElement } from 'preact';
|
|
2
|
+
import { anyPropType } from './mount';
|
|
3
|
+
function compareObjects(a, b) {
|
|
4
|
+
for (const i in a) {
|
|
5
|
+
if (!(i in b)) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
for (const i in b) {
|
|
10
|
+
if (!compare(a[i], b[i])) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
function compare(a, b) {
|
|
17
|
+
if (a !== b) {
|
|
18
|
+
const ta = typeof a;
|
|
19
|
+
const tb = typeof b;
|
|
20
|
+
if (ta === tb && ta === 'object' && a && b) {
|
|
21
|
+
return compareObjects(a, b);
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
export function createExtension(rootName) {
|
|
28
|
+
class PreactExtension extends Component {
|
|
29
|
+
constructor() {
|
|
30
|
+
super(...arguments);
|
|
31
|
+
this.onRefChange = (element) => setTimeout(() => {
|
|
32
|
+
if (element) {
|
|
33
|
+
const { piral } = this.context;
|
|
34
|
+
element.innerHTML = '';
|
|
35
|
+
piral.renderHtmlExtension(element, this.props);
|
|
36
|
+
}
|
|
37
|
+
}, 0);
|
|
38
|
+
}
|
|
39
|
+
shouldComponentUpdate(nextProps) {
|
|
40
|
+
return !compare(this.props, nextProps);
|
|
41
|
+
}
|
|
42
|
+
render() {
|
|
43
|
+
return createElement(rootName, {
|
|
44
|
+
ref: this.onRefChange,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
PreactExtension.contextTypes = {
|
|
49
|
+
piral: anyPropType,
|
|
50
|
+
};
|
|
51
|
+
return PreactExtension;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAiB,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,SAAS,cAAc,CAAC,CAAM,EAAE,CAAM;IACpC,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;YACb,OAAO,KAAK,CAAC;SACd;KACF;IAED,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAI,CAAI,EAAE,CAAI;IAC5B,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QAEpB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1C,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;QAED,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,eAAgB,SAAQ,SAA6B;QAA3D;;YAKU,gBAAW,GAAG,CAAC,OAAY,EAAE,EAAE,CACrC,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,OAAO,EAAE;oBACX,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC/B,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;oBACvB,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;iBAChD;YACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAWV,CAAC;QATC,qBAAqB,CAAC,SAA6B;YACjD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAED,MAAM;YACJ,OAAO,aAAa,CAAC,QAAQ,EAAE;gBAC7B,GAAG,EAAE,IAAI,CAAC,WAAW;aACtB,CAAC,CAAC;QACL,CAAC;;IArBM,4BAAY,GAAG;QACpB,KAAK,EAAE,WAAW;KACnB,AAFkB,CAEjB;IAsBJ,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
package/esm/index.d.ts
ADDED
package/esm/index.js
ADDED
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
|
package/esm/mount.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ComponentType } from 'preact';
|
|
2
|
+
import type { BaseComponentProps } from 'piral-core';
|
|
3
|
+
export declare const anyPropType: () => any;
|
|
4
|
+
export declare function mountPreact<T extends BaseComponentProps>(el: HTMLElement, root: ComponentType<T>, props: T, ctx?: any): void;
|
|
5
|
+
export declare function unmountPreact(el: HTMLElement): void;
|
package/esm/mount.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { render, createElement, Component } from 'preact';
|
|
2
|
+
// tslint:disable-next-line:no-null-keyword
|
|
3
|
+
export const anyPropType = () => null;
|
|
4
|
+
export function mountPreact(el, root, props, ctx = {}) {
|
|
5
|
+
const contextTypes = {};
|
|
6
|
+
['piral', ...Object.keys(ctx)].forEach((key) => {
|
|
7
|
+
contextTypes[key] = anyPropType;
|
|
8
|
+
});
|
|
9
|
+
class Provider extends Component {
|
|
10
|
+
getChildContext() {
|
|
11
|
+
return Object.assign({ piral: props.piral }, ctx);
|
|
12
|
+
}
|
|
13
|
+
render() {
|
|
14
|
+
return this.props.children;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
Provider.childContextTypes = contextTypes;
|
|
18
|
+
render(createElement(Provider, {}, createElement(root, props)), el);
|
|
19
|
+
}
|
|
20
|
+
export function unmountPreact(el) {
|
|
21
|
+
render('', el);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=mount.js.map
|
package/esm/mount.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,aAAa,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGzE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;AAEtC,MAAM,UAAU,WAAW,CACzB,EAAe,EACf,IAAsB,EACtB,KAAQ,EACR,MAAW,EAAE;IAEb,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7C,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,MAAM,QAAS,SAAQ,SAAS;QAG9B,eAAe;YACb,uBACE,KAAK,EAAE,KAAK,CAAC,KAAK,IACf,GAAG,EACN;QACJ,CAAC;QAED,MAAM;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7B,CAAC;;IAXM,0BAAiB,GAAG,YAAY,CAAC;IAc1C,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAe;IAC3C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjB,CAAC"}
|
package/esm/types.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ForeignComponent, ExtensionSlotProps } from 'piral-core';
|
|
2
|
+
import type { ComponentType } from 'preact';
|
|
3
|
+
declare module 'piral-core/lib/types/custom' {
|
|
4
|
+
interface PiletCustomApi extends PiletPreactApi {
|
|
5
|
+
}
|
|
6
|
+
interface PiralCustomComponentConverters<TProps> {
|
|
7
|
+
preact(component: PreactComponent<TProps>): ForeignComponent<TProps>;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export interface PreactComponent<TProps> {
|
|
11
|
+
/**
|
|
12
|
+
* The component root.
|
|
13
|
+
*/
|
|
14
|
+
root: ComponentType<TProps>;
|
|
15
|
+
/**
|
|
16
|
+
* The type of the Preact component.
|
|
17
|
+
*/
|
|
18
|
+
type: 'preact';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Defines the provided set of Preact Pilet API extensions.
|
|
22
|
+
*/
|
|
23
|
+
export interface PiletPreactApi {
|
|
24
|
+
/**
|
|
25
|
+
* Wraps an Preact component for use in Piral.
|
|
26
|
+
* @param component The component root.
|
|
27
|
+
* @returns The Piral Preact component.
|
|
28
|
+
*/
|
|
29
|
+
fromPreact<TProps>(component: ComponentType<TProps>): PreactComponent<TProps>;
|
|
30
|
+
/**
|
|
31
|
+
* Preact component for displaying extensions of the given name.
|
|
32
|
+
*/
|
|
33
|
+
PreactExtension: ComponentType<ExtensionSlotProps>;
|
|
34
|
+
}
|
package/esm/types.js
ADDED
package/esm/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/lib/converter.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
-
import { ComponentType } from 'preact';
|
|
2
|
-
import { ForeignComponent, BaseComponentProps } from 'piral-core';
|
|
3
|
-
export
|
|
1
|
+
import type { ComponentType } from 'preact';
|
|
2
|
+
import type { ForeignComponent, BaseComponentProps } from 'piral-core';
|
|
3
|
+
export interface PreactConverterOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Defines the name of the root element.
|
|
6
|
+
* @default piral-slot
|
|
7
|
+
*/
|
|
8
|
+
rootName?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function createConverter(config?: PreactConverterOptions): {
|
|
11
|
+
<TProps extends BaseComponentProps>(root: ComponentType<TProps>): ForeignComponent<TProps>;
|
|
12
|
+
Extension: ComponentType<import("piral-core").ExtensionSlotProps>;
|
|
13
|
+
};
|
package/lib/converter.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createConverter = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
4
|
+
const mount_1 = require("./mount");
|
|
5
|
+
const extension_1 = require("./extension");
|
|
6
|
+
function createConverter(config = {}) {
|
|
7
|
+
const { rootName = 'piral-slot' } = config;
|
|
8
|
+
const Extension = (0, extension_1.createExtension)(rootName);
|
|
9
|
+
const convert = (root) => ({
|
|
10
|
+
mount(el, props, ctx) {
|
|
11
|
+
(0, mount_1.mountPreact)(el, root, props, ctx);
|
|
12
|
+
},
|
|
13
|
+
update(el, props, ctx) {
|
|
14
|
+
(0, mount_1.mountPreact)(el, root, props, ctx);
|
|
15
|
+
},
|
|
16
|
+
unmount(el) {
|
|
17
|
+
(0, mount_1.unmountPreact)(el);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
convert.Extension = Extension;
|
|
19
21
|
return convert;
|
|
20
22
|
}
|
|
21
23
|
exports.createConverter = createConverter;
|
package/lib/converter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":";;;AAEA,mCAAqD;AACrD,2CAA8C;AAU9C,SAAgB,eAAe,CAAC,SAAiC,EAAE;IACjE,MAAM,EAAE,QAAQ,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAA,2BAAe,EAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,CAAoC,IAA2B,EAA4B,EAAE,CAAC,CAAC;QAC7G,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG;YAClB,IAAA,mBAAW,EAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG;YACnB,IAAA,mBAAW,EAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,EAAE;YACR,IAAA,qBAAa,EAAC,EAAE,CAAC,CAAC;QACpB,CAAC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,OAAO,CAAC;AACjB,CAAC;AAhBD,0CAgBC"}
|
package/lib/create.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import type { PiralPlugin } from 'piral-core';
|
|
2
|
+
import { PreactConverterOptions } from './converter';
|
|
2
3
|
import type { PiletPreactApi } from './types';
|
|
3
4
|
/**
|
|
4
5
|
* Available configuration options for the Preact plugin.
|
|
5
6
|
*/
|
|
6
|
-
export interface PreactConfig {
|
|
7
|
-
/**
|
|
8
|
-
* Defines the name of the root element.
|
|
9
|
-
* @default slot
|
|
10
|
-
*/
|
|
11
|
-
rootName?: string;
|
|
7
|
+
export interface PreactConfig extends PreactConverterOptions {
|
|
12
8
|
}
|
|
13
9
|
/**
|
|
14
10
|
* Creates new Pilet API extensions for integrating Preact.
|
package/lib/create.js
CHANGED
|
@@ -1,28 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createPreactApi = void 0;
|
|
4
|
-
|
|
5
|
-
var extension_1 = require("./extension");
|
|
4
|
+
const converter_1 = require("./converter");
|
|
6
5
|
/**
|
|
7
6
|
* Creates new Pilet API extensions for integrating Preact.
|
|
8
7
|
*/
|
|
9
|
-
function createPreactApi(config) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var convert = converter_1.createConverter();
|
|
14
|
-
context.converters.preact = function (_a) {
|
|
15
|
-
var root = _a.root;
|
|
16
|
-
return convert(root);
|
|
17
|
-
};
|
|
8
|
+
function createPreactApi(config = {}) {
|
|
9
|
+
return (context) => {
|
|
10
|
+
const convert = (0, converter_1.createConverter)(config);
|
|
11
|
+
context.converters.preact = ({ root }) => convert(root);
|
|
18
12
|
return {
|
|
19
|
-
fromPreact
|
|
13
|
+
fromPreact(root) {
|
|
20
14
|
return {
|
|
21
15
|
type: 'preact',
|
|
22
|
-
root
|
|
16
|
+
root,
|
|
23
17
|
};
|
|
24
18
|
},
|
|
25
|
-
PreactExtension:
|
|
19
|
+
PreactExtension: convert.Extension,
|
|
26
20
|
};
|
|
27
21
|
};
|
|
28
22
|
}
|
package/lib/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;;AACA,2CAAsE;AAQtE;;GAEG;AACH,SAAgB,eAAe,CAAC,SAAuB,EAAE;IACvD,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,IAAA,2BAAe,EAAC,MAAM,CAAC,CAAC;QACxC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAExD,OAAO;YACL,UAAU,CAAC,IAAI;gBACb,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI;iBACL,CAAC;YACJ,CAAC;YACD,eAAe,EAAE,OAAO,CAAC,SAAS;SACnC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAfD,0CAeC"}
|
package/lib/extension.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ExtensionSlotProps } from 'piral-core';
|
|
1
|
+
import type { ExtensionSlotProps } from 'piral-core';
|
|
2
2
|
import { ComponentType } from 'preact';
|
|
3
|
-
export declare function createExtension(rootName
|
|
3
|
+
export declare function createExtension(rootName: string): ComponentType<ExtensionSlotProps>;
|
package/lib/extension.js
CHANGED
|
@@ -1,40 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createExtension = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const preact_1 = require("preact");
|
|
5
|
+
const mount_1 = require("./mount");
|
|
6
|
+
function compareObjects(a, b) {
|
|
7
|
+
for (const i in a) {
|
|
8
|
+
if (!(i in b)) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
for (const i in b) {
|
|
13
|
+
if (!compare(a[i], b[i])) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
function compare(a, b) {
|
|
20
|
+
if (a !== b) {
|
|
21
|
+
const ta = typeof a;
|
|
22
|
+
const tb = typeof b;
|
|
23
|
+
if (ta === tb && ta === 'object' && a && b) {
|
|
24
|
+
return compareObjects(a, b);
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
8
30
|
function createExtension(rootName) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
};
|
|
23
|
-
return _this;
|
|
31
|
+
class PreactExtension extends preact_1.Component {
|
|
32
|
+
constructor() {
|
|
33
|
+
super(...arguments);
|
|
34
|
+
this.onRefChange = (element) => setTimeout(() => {
|
|
35
|
+
if (element) {
|
|
36
|
+
const { piral } = this.context;
|
|
37
|
+
element.innerHTML = '';
|
|
38
|
+
piral.renderHtmlExtension(element, this.props);
|
|
39
|
+
}
|
|
40
|
+
}, 0);
|
|
41
|
+
}
|
|
42
|
+
shouldComponentUpdate(nextProps) {
|
|
43
|
+
return !compare(this.props, nextProps);
|
|
24
44
|
}
|
|
25
|
-
|
|
26
|
-
return
|
|
27
|
-
};
|
|
28
|
-
PreactExtension.prototype.render = function () {
|
|
29
|
-
return preact_1.createElement(rootName, {
|
|
45
|
+
render() {
|
|
46
|
+
return (0, preact_1.createElement)(rootName, {
|
|
30
47
|
ref: this.onRefChange,
|
|
31
48
|
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}(preact_1.Component));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
PreactExtension.contextTypes = {
|
|
52
|
+
piral: mount_1.anyPropType,
|
|
53
|
+
};
|
|
38
54
|
return PreactExtension;
|
|
39
55
|
}
|
|
40
56
|
exports.createExtension = createExtension;
|
package/lib/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;AACA,mCAAiE;AACjE,mCAAsC;AAEtC,SAAS,cAAc,CAAC,CAAM,EAAE,CAAM;IACpC,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;YACb,OAAO,KAAK,CAAC;SACd;KACF;IAED,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAI,CAAI,EAAE,CAAI;IAC5B,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QAEpB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1C,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;QAED,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,eAAe,CAAC,QAAgB;IAC9C,MAAM,eAAgB,SAAQ,kBAA6B;QAA3D;;YAKU,gBAAW,GAAG,CAAC,OAAY,EAAE,EAAE,CACrC,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,OAAO,EAAE;oBACX,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC/B,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;oBACvB,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;iBAChD;YACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAWV,CAAC;QATC,qBAAqB,CAAC,SAA6B;YACjD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAED,MAAM;YACJ,OAAO,IAAA,sBAAa,EAAC,QAAQ,EAAE;gBAC7B,GAAG,EAAE,IAAI,CAAC,WAAW;aACtB,CAAC,CAAC;QACL,CAAC;;IArBM,4BAAY,GAAG;QACpB,KAAK,EAAE,mBAAW;KACnB,AAFkB,CAEjB;IAsBJ,OAAO,eAAe,CAAC;AACzB,CAAC;AA3BD,0CA2BC"}
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
4
|
tslib_1.__exportStar(require("./create"), exports);
|
|
5
5
|
tslib_1.__exportStar(require("./types"), exports);
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/lib/mount.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentType } from 'preact';
|
|
2
|
-
import { BaseComponentProps } from 'piral-core';
|
|
2
|
+
import type { BaseComponentProps } from 'piral-core';
|
|
3
3
|
export declare const anyPropType: () => any;
|
|
4
4
|
export declare function mountPreact<T extends BaseComponentProps>(el: HTMLElement, root: ComponentType<T>, props: T, ctx?: any): void;
|
|
5
5
|
export declare function unmountPreact(el: HTMLElement): void;
|
package/lib/mount.js
CHANGED
|
@@ -1,35 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.unmountPreact = exports.mountPreact = exports.anyPropType = void 0;
|
|
4
|
-
|
|
5
|
-
var preact_1 = require("preact");
|
|
4
|
+
const preact_1 = require("preact");
|
|
6
5
|
// tslint:disable-next-line:no-null-keyword
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
const anyPropType = () => null;
|
|
7
|
+
exports.anyPropType = anyPropType;
|
|
8
|
+
function mountPreact(el, root, props, ctx = {}) {
|
|
9
|
+
const contextTypes = {};
|
|
10
|
+
['piral', ...Object.keys(ctx)].forEach((key) => {
|
|
12
11
|
contextTypes[key] = exports.anyPropType;
|
|
13
12
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return _super !== null && _super.apply(this, arguments) || this;
|
|
13
|
+
class Provider extends preact_1.Component {
|
|
14
|
+
getChildContext() {
|
|
15
|
+
return Object.assign({ piral: props.piral }, ctx);
|
|
18
16
|
}
|
|
19
|
-
|
|
20
|
-
return tslib_1.__assign({ piral: props.piral }, ctx);
|
|
21
|
-
};
|
|
22
|
-
Provider.prototype.render = function () {
|
|
17
|
+
render() {
|
|
23
18
|
return this.props.children;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}(preact_1.
|
|
28
|
-
preact_1.render(preact_1.createElement(Provider, {}, preact_1.createElement(root, props)), el);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
Provider.childContextTypes = contextTypes;
|
|
22
|
+
(0, preact_1.render)((0, preact_1.createElement)(Provider, {}, (0, preact_1.createElement)(root, props)), el);
|
|
29
23
|
}
|
|
30
24
|
exports.mountPreact = mountPreact;
|
|
31
25
|
function unmountPreact(el) {
|
|
32
|
-
preact_1.render('', el);
|
|
26
|
+
(0, preact_1.render)('', el);
|
|
33
27
|
}
|
|
34
28
|
exports.unmountPreact = unmountPreact;
|
|
35
29
|
//# sourceMappingURL=mount.js.map
|
package/lib/mount.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":";;;AAAA,mCAAyE;AAGzE,2CAA2C;AACpC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;AAAzB,QAAA,WAAW,eAAc;AAEtC,SAAgB,WAAW,CACzB,EAAe,EACf,IAAsB,EACtB,KAAQ,EACR,MAAW,EAAE;IAEb,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7C,YAAY,CAAC,GAAG,CAAC,GAAG,mBAAW,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,MAAM,QAAS,SAAQ,kBAAS;QAG9B,eAAe;YACb,uBACE,KAAK,EAAE,KAAK,CAAC,KAAK,IACf,GAAG,EACN;QACJ,CAAC;QAED,MAAM;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7B,CAAC;;IAXM,0BAAiB,GAAG,YAAY,CAAC;IAc1C,IAAA,eAAM,EAAC,IAAA,sBAAa,EAAC,QAAQ,EAAE,EAAE,EAAE,IAAA,sBAAa,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtE,CAAC;AA5BD,kCA4BC;AAED,SAAgB,aAAa,CAAC,EAAe;IAC3C,IAAA,eAAM,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjB,CAAC;AAFD,sCAEC"}
|
package/lib/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ForeignComponent, ExtensionSlotProps } from 'piral-core';
|
|
2
|
-
import { ComponentType } from 'preact';
|
|
1
|
+
import type { ForeignComponent, ExtensionSlotProps } from 'piral-core';
|
|
2
|
+
import type { ComponentType } from 'preact';
|
|
3
3
|
declare module 'piral-core/lib/types/custom' {
|
|
4
4
|
interface PiletCustomApi extends PiletPreactApi {
|
|
5
5
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "piral-preact",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Plugin for integrating Preact components in Piral.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"piral",
|
|
@@ -16,14 +16,35 @@
|
|
|
16
16
|
"author": "smapiot",
|
|
17
17
|
"homepage": "https://piral.io",
|
|
18
18
|
"license": "MIT",
|
|
19
|
+
"module": "esm/index.js",
|
|
19
20
|
"main": "lib/index.js",
|
|
20
21
|
"typings": "lib/index.d.ts",
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"import": "./esm/index.js",
|
|
25
|
+
"require": "./lib/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./convert": {
|
|
28
|
+
"import": "./convert.js"
|
|
29
|
+
},
|
|
30
|
+
"./esm/*": {
|
|
31
|
+
"import": "./esm/*"
|
|
32
|
+
},
|
|
33
|
+
"./lib/*": {
|
|
34
|
+
"require": "./lib/*"
|
|
35
|
+
},
|
|
36
|
+
"./_/*": {
|
|
37
|
+
"import": "./esm/*.js",
|
|
38
|
+
"require": "./lib/*.js"
|
|
39
|
+
},
|
|
40
|
+
"./package.json": "./package.json"
|
|
41
|
+
},
|
|
21
42
|
"sideEffects": false,
|
|
22
43
|
"files": [
|
|
44
|
+
"esm",
|
|
23
45
|
"lib",
|
|
24
46
|
"src",
|
|
25
47
|
"convert.d.ts",
|
|
26
|
-
"convert.ts",
|
|
27
48
|
"convert.js"
|
|
28
49
|
],
|
|
29
50
|
"repository": {
|
|
@@ -34,17 +55,20 @@
|
|
|
34
55
|
"url": "https://github.com/smapiot/piral/issues"
|
|
35
56
|
},
|
|
36
57
|
"scripts": {
|
|
37
|
-
"
|
|
58
|
+
"cleanup": "rimraf esm lib convert.d.ts convert.js",
|
|
59
|
+
"build": "yarn build:commonjs && yarn build:esnext && yarn build:convert",
|
|
60
|
+
"build:convert": "tsc convert.ts --skipLibCheck --declaration --module esnext",
|
|
61
|
+
"build:commonjs": "tsc --project tsconfig.json --outDir lib --module commonjs",
|
|
62
|
+
"build:esnext": "tsc --project tsconfig.json --outDir esm --module esnext",
|
|
38
63
|
"typedoc": "typedoc --json ../../../docs/types/piral-preact.json src --exclude \"src/**/*.test.*\"",
|
|
39
64
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
40
65
|
},
|
|
41
66
|
"devDependencies": {
|
|
42
|
-
"piral-core": "^1.0.0
|
|
43
|
-
"preact": "10.
|
|
67
|
+
"piral-core": "^1.0.0",
|
|
68
|
+
"preact": "^10.5.13"
|
|
44
69
|
},
|
|
45
70
|
"peerDependencies": {
|
|
46
|
-
"piral-core": "1.x",
|
|
47
71
|
"preact": "^10.0.0"
|
|
48
72
|
},
|
|
49
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "67d9a2920bd5231baf10bc87ae8985666b18fa3a"
|
|
50
74
|
}
|
package/src/converter.ts
CHANGED
|
@@ -1,20 +1,30 @@
|
|
|
1
|
-
import { ComponentType } from 'preact';
|
|
2
|
-
import { ForeignComponent, BaseComponentProps } from 'piral-core';
|
|
1
|
+
import type { ComponentType } from 'preact';
|
|
2
|
+
import type { ForeignComponent, BaseComponentProps } from 'piral-core';
|
|
3
3
|
import { mountPreact, unmountPreact } from './mount';
|
|
4
|
+
import { createExtension } from './extension';
|
|
4
5
|
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
export interface PreactConverterOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Defines the name of the root element.
|
|
9
|
+
* @default piral-slot
|
|
10
|
+
*/
|
|
11
|
+
rootName?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function createConverter(config: PreactConverterOptions = {}) {
|
|
15
|
+
const { rootName = 'piral-slot' } = config;
|
|
16
|
+
const Extension = createExtension(rootName);
|
|
17
|
+
const convert = <TProps extends BaseComponentProps>(root: ComponentType<TProps>): ForeignComponent<TProps> => ({
|
|
18
|
+
mount(el, props, ctx) {
|
|
19
|
+
mountPreact(el, root, props, ctx);
|
|
20
|
+
},
|
|
21
|
+
update(el, props, ctx) {
|
|
22
|
+
mountPreact(el, root, props, ctx);
|
|
23
|
+
},
|
|
24
|
+
unmount(el) {
|
|
25
|
+
unmountPreact(el);
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
convert.Extension = Extension;
|
|
19
29
|
return convert;
|
|
20
30
|
}
|
package/src/create.ts
CHANGED
|
@@ -1,27 +1,18 @@
|
|
|
1
1
|
import type { PiralPlugin } from 'piral-core';
|
|
2
|
-
import { createConverter } from './converter';
|
|
3
|
-
import { createExtension } from './extension';
|
|
2
|
+
import { createConverter, PreactConverterOptions } from './converter';
|
|
4
3
|
import type { PiletPreactApi } from './types';
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
6
|
* Available configuration options for the Preact plugin.
|
|
8
7
|
*/
|
|
9
|
-
export interface PreactConfig {
|
|
10
|
-
/**
|
|
11
|
-
* Defines the name of the root element.
|
|
12
|
-
* @default slot
|
|
13
|
-
*/
|
|
14
|
-
rootName?: string;
|
|
15
|
-
}
|
|
8
|
+
export interface PreactConfig extends PreactConverterOptions {}
|
|
16
9
|
|
|
17
10
|
/**
|
|
18
11
|
* Creates new Pilet API extensions for integrating Preact.
|
|
19
12
|
*/
|
|
20
13
|
export function createPreactApi(config: PreactConfig = {}): PiralPlugin<PiletPreactApi> {
|
|
21
|
-
const { rootName } = config;
|
|
22
|
-
|
|
23
14
|
return (context) => {
|
|
24
|
-
const convert = createConverter();
|
|
15
|
+
const convert = createConverter(config);
|
|
25
16
|
context.converters.preact = ({ root }) => convert(root);
|
|
26
17
|
|
|
27
18
|
return {
|
|
@@ -31,7 +22,7 @@ export function createPreactApi(config: PreactConfig = {}): PiralPlugin<PiletPre
|
|
|
31
22
|
root,
|
|
32
23
|
};
|
|
33
24
|
},
|
|
34
|
-
PreactExtension:
|
|
25
|
+
PreactExtension: convert.Extension,
|
|
35
26
|
};
|
|
36
27
|
};
|
|
37
28
|
}
|
package/src/extension.ts
CHANGED
|
@@ -1,8 +1,39 @@
|
|
|
1
|
-
import { ExtensionSlotProps
|
|
1
|
+
import type { ExtensionSlotProps } from 'piral-core';
|
|
2
2
|
import { Component, createElement, ComponentType } from 'preact';
|
|
3
3
|
import { anyPropType } from './mount';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
function compareObjects(a: any, b: any) {
|
|
6
|
+
for (const i in a) {
|
|
7
|
+
if (!(i in b)) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
for (const i in b) {
|
|
13
|
+
if (!compare(a[i], b[i])) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function compare<T>(a: T, b: T) {
|
|
22
|
+
if (a !== b) {
|
|
23
|
+
const ta = typeof a;
|
|
24
|
+
const tb = typeof b;
|
|
25
|
+
|
|
26
|
+
if (ta === tb && ta === 'object' && a && b) {
|
|
27
|
+
return compareObjects(a, b);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function createExtension(rootName: string): ComponentType<ExtensionSlotProps> {
|
|
6
37
|
class PreactExtension extends Component<ExtensionSlotProps> {
|
|
7
38
|
static contextTypes = {
|
|
8
39
|
piral: anyPropType,
|
package/src/mount.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ForeignComponent, ExtensionSlotProps } from 'piral-core';
|
|
2
|
-
import { ComponentType } from 'preact';
|
|
1
|
+
import type { ForeignComponent, ExtensionSlotProps } from 'piral-core';
|
|
2
|
+
import type { ComponentType } from 'preact';
|
|
3
3
|
|
|
4
4
|
declare module 'piral-core/lib/types/custom' {
|
|
5
5
|
interface PiletCustomApi extends PiletPreactApi {}
|
package/convert.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { HtmlComponent } from 'piral-core';
|
|
2
|
-
import { createConverter } from './lib/converter';
|
|
3
|
-
import { createExtension } from './lib/extension';
|
|
4
|
-
|
|
5
|
-
const convert = createConverter();
|
|
6
|
-
|
|
7
|
-
export interface PreactConverter {
|
|
8
|
-
(...params: Parameters<typeof convert>): HtmlComponent<any>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export const fromPreact: PreactConverter = (root) => ({
|
|
12
|
-
type: 'html',
|
|
13
|
-
component: convert(root),
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
export const createPreactExtension = createExtension;
|