@merkur/create-widget 0.34.5 → 0.35.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/bin/createWidget.mjs +1 -1
- package/package.json +2 -2
- package/template/jest.config.js +4 -0
- package/template/merkur.config.mjs +3 -0
- package/template/package.json +16 -21
- package/template/server/__integration__/appSpec.js +1 -7
- package/template/server/app.js +8 -17
- package/template/server/config/default.json +0 -4
- package/template/server/config/production.json +0 -3
- package/template/server/routes/widgetAPI/widgetAPI.js +14 -8
- package/template/server/server.js +6 -7
- package/template/src/widget.js +4 -6
- package/views/preact/template/jest.config.js +3 -0
- package/views/preact/template/merkur.config.mjs +5 -0
- package/views/preact/template/src/slots/HeadlineSlot.jsx +0 -8
- package/views/preact/template/src/views/View.jsx +1 -19
- package/views/preact/template/src/views/__tests__/ViewSpec.jsx +1 -1
- package/views/preact/template/src/widget.js +56 -0
- package/views/preact/template.json +3 -5
- package/views/svelte/template/merkur.config.mjs +5 -0
- package/views/svelte/template/src/widget.js +56 -0
- package/views/svelte/template/webpack.config.js +18 -42
- package/views/svelte/template.json +3 -4
- package/views/uhtml/template/merkur.config.mjs +5 -0
- package/views/uhtml/template/src/slots/HeadlineSlot.js +0 -8
- package/views/uhtml/template/src/views/View.js +0 -18
- package/views/uhtml/template/src/widget.js +56 -0
- package/views/uhtml/template/webpack.config.js +9 -3
- package/views/uhtml/template.json +2 -3
- package/views/vanilla/template/src/{client.js → entries/client.js} +4 -4
- package/views/vanilla/template/src/{server.js → entries/server.js} +2 -2
- package/template/nodemon.json +0 -14
- package/template/server/routes/playground/index.js +0 -3
- package/template/server/routes/playground/playground.ejs +0 -46
- package/template/server/routes/playground/playground.js +0 -48
- package/template/server/routes/utils.js +0 -14
- package/template/src/lib/utils.js +0 -39
- package/template/src/polyfill.es5.js +0 -0
- package/template/src/polyfill.es9.js +0 -0
- package/views/preact/template/babel.config.js +0 -13
- package/views/preact/template/src/client.js +0 -56
- package/views/preact/template/src/server.js +0 -31
- package/views/preact/template/webpack.config.js +0 -60
- package/views/svelte/template/src/client.js +0 -65
- package/views/svelte/template/src/server.js +0 -32
- package/views/svelte/template/src/slots/headlineSlotFactory.js +0 -10
- package/views/svelte/template/src/views/viewFactory.js +0 -19
- package/views/uhtml/template/src/client.js +0 -51
- package/views/uhtml/template/src/server.js +0 -31
- package/views/vanilla/template/webpack.config.js +0 -16
package/bin/createWidget.mjs
CHANGED
|
@@ -13,7 +13,7 @@ const { argv } = yargs(hideBin(process.argv));
|
|
|
13
13
|
if (argv._.length === 0) {
|
|
14
14
|
// eslint-disable-next-line no-console
|
|
15
15
|
console.log(`
|
|
16
|
-
Please specify your new project directory:
|
|
16
|
+
Please specify your new project directory:
|
|
17
17
|
${chalk.blue('@merkur/create-widget')} ${chalk.green('<project-directory>')}
|
|
18
18
|
For example:
|
|
19
19
|
${chalk.blue('@merkur/create-widget')} ${chalk.green('my-widget')}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@merkur/create-widget",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.35.0",
|
|
4
4
|
"description": "CLI for creating merkur widget easily.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"merkur-create-widget": "./bin/createWidget.mjs"
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"inquirer": "9.2.2",
|
|
45
45
|
"yargs": "^17.7.2"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "383f29bdf67a7f4252876867687371a8d26f53f2"
|
|
48
48
|
}
|
package/template/jest.config.js
CHANGED
package/template/package.json
CHANGED
|
@@ -3,44 +3,39 @@
|
|
|
3
3
|
"version": "0.0.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"dev:server": "cross-env NODE_CONFIG_DIR='./server/config' NODE_ENV=development nodemon server/server.js --config nodemon.json",
|
|
7
6
|
"test": "npm run test:all",
|
|
8
|
-
"test:unit": "cross-env TEST_GROUP='unit'
|
|
9
|
-
"test:integration": "cross-env TEST_GROUP='integration'
|
|
10
|
-
"test:all": "npm run build && cross-env TEST_GROUP='all'
|
|
11
|
-
"test:watch": "cross-env TEST_GROUP='unit'
|
|
7
|
+
"test:unit": "cross-env TEST_GROUP='unit' merkur test",
|
|
8
|
+
"test:integration": "cross-env TEST_GROUP='integration' merkur test",
|
|
9
|
+
"test:all": "npm run build && cross-env TEST_GROUP='all' merkur test",
|
|
10
|
+
"test:watch": "cross-env TEST_GROUP='unit' merkur test --watchAll",
|
|
12
11
|
"lint": "eslint -c ./.eslintrc.js --ignore-path ./.prettierignore './**/*.{js,jsx}'",
|
|
13
|
-
"dev": "
|
|
14
|
-
"build": "
|
|
15
|
-
"start": "
|
|
12
|
+
"dev": "merkur dev",
|
|
13
|
+
"build": "merkur build",
|
|
14
|
+
"start": "merkur start"
|
|
16
15
|
},
|
|
17
16
|
"author": "",
|
|
18
17
|
"license": "ISC",
|
|
19
18
|
"dependencies": {
|
|
20
|
-
"@merkur/
|
|
21
|
-
"@merkur/
|
|
22
|
-
"@merkur/
|
|
23
|
-
"@merkur/plugin-
|
|
24
|
-
"@merkur/plugin-
|
|
19
|
+
"@merkur/cli": "0.35.0",
|
|
20
|
+
"@merkur/core": "0.35.0",
|
|
21
|
+
"@merkur/integration": "0.35.0",
|
|
22
|
+
"@merkur/plugin-component": "0.35.0",
|
|
23
|
+
"@merkur/plugin-error": "0.35.0",
|
|
24
|
+
"@merkur/plugin-event-emitter": "0.35.0",
|
|
25
25
|
"compression": "^1.7.4",
|
|
26
26
|
"config": "^3.3.7",
|
|
27
27
|
"cors": "^2.8.5",
|
|
28
28
|
"cross-env": "^7.0.3",
|
|
29
|
-
"ejs": "^3.1.6",
|
|
30
29
|
"express": "^4.17.3",
|
|
31
30
|
"express-static-gzip": "^2.1.5",
|
|
32
|
-
"got": "^11.8.2",
|
|
33
31
|
"helmet": "^5.0.2",
|
|
34
32
|
"morgan": "^1.10.0"
|
|
35
33
|
},
|
|
36
34
|
"devDependencies": {
|
|
37
|
-
"@merkur/tools": "0.
|
|
38
|
-
"
|
|
39
|
-
"nodemon": "^2.0.15",
|
|
40
|
-
"webpack": "^5.72.0",
|
|
41
|
-
"webpack-cli": "^4.9.2"
|
|
35
|
+
"@merkur/tools": "0.35.0",
|
|
36
|
+
"esbuild-jest2": "^0.6.5"
|
|
42
37
|
},
|
|
43
38
|
"engines": {
|
|
44
|
-
"node": ">=
|
|
39
|
+
"node": ">=20.0.0"
|
|
45
40
|
}
|
|
46
41
|
}
|
|
@@ -9,7 +9,7 @@ describe('Widget', () => {
|
|
|
9
9
|
expect(res.statusCode).toEqual(200);
|
|
10
10
|
expect(res.body.assets.length).toBeGreaterThan(0);
|
|
11
11
|
delete res.body.assets;
|
|
12
|
-
expect(res.body).
|
|
12
|
+
expect(res.body).toMatchSnapshot();
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
it('should return 404 for not defined route', async () => {
|
|
@@ -18,10 +18,4 @@ describe('Widget', () => {
|
|
|
18
18
|
expect(res.statusCode).toEqual(404);
|
|
19
19
|
expect(res.body.error.status).toEqual(404);
|
|
20
20
|
});
|
|
21
|
-
|
|
22
|
-
it('should return 200 for playground page', async () => {
|
|
23
|
-
const res = await request(app).get('/');
|
|
24
|
-
|
|
25
|
-
expect(res.statusCode).toEqual(200);
|
|
26
|
-
});
|
|
27
21
|
});
|
package/template/server/app.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
|
|
3
1
|
const compression = require('compression');
|
|
4
2
|
const cors = require('cors');
|
|
5
3
|
const express = require('express');
|
|
@@ -7,17 +5,19 @@ const expressStaticGzip = require('express-static-gzip');
|
|
|
7
5
|
const helmet = require('helmet');
|
|
8
6
|
const morgan = require('morgan');
|
|
9
7
|
|
|
8
|
+
const { resolveConfig } = require('@merkur/cli/server');
|
|
9
|
+
|
|
10
|
+
const { merkurConfig } = resolveConfig();
|
|
11
|
+
|
|
10
12
|
const {
|
|
11
13
|
apiErrorMiddleware,
|
|
12
14
|
logErrorMiddleware,
|
|
13
15
|
} = require('@merkur/plugin-error/server');
|
|
14
16
|
|
|
15
17
|
const errorRouteFactory = require('./routes/error');
|
|
16
|
-
const playgroundRouteFactory = require('./routes/playground');
|
|
17
18
|
const widgetAPIRouteFactory = require('./routes/widgetAPI');
|
|
18
19
|
|
|
19
20
|
const error = errorRouteFactory();
|
|
20
|
-
const playground = playgroundRouteFactory();
|
|
21
21
|
const widgetAPI = widgetAPIRouteFactory();
|
|
22
22
|
|
|
23
23
|
const expressStaticConfig = {
|
|
@@ -28,8 +28,6 @@ const expressStaticConfig = {
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
const app = express();
|
|
31
|
-
app.set('view engine', 'ejs');
|
|
32
|
-
app.set('trust proxy', true);
|
|
33
31
|
|
|
34
32
|
app
|
|
35
33
|
.use(morgan('dev'))
|
|
@@ -43,24 +41,17 @@ app
|
|
|
43
41
|
.use(cors())
|
|
44
42
|
.use(compression())
|
|
45
43
|
.use(
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
merkurConfig.widgetServer.staticPath,
|
|
45
|
+
express.static(merkurConfig.widgetServer.staticFolder),
|
|
48
46
|
)
|
|
49
47
|
.use(
|
|
50
|
-
|
|
48
|
+
merkurConfig.widgetServer.staticPath,
|
|
51
49
|
expressStaticGzip(
|
|
52
|
-
|
|
50
|
+
merkurConfig.widgetServer.staticFolder,
|
|
53
51
|
expressStaticConfig,
|
|
54
52
|
),
|
|
55
53
|
)
|
|
56
|
-
.use(
|
|
57
|
-
'/@merkur/tools/static/',
|
|
58
|
-
express.static(
|
|
59
|
-
path.join(__dirname, '../node_modules/@merkur/tools/static'),
|
|
60
|
-
),
|
|
61
|
-
)
|
|
62
54
|
.use(widgetAPI.router)
|
|
63
|
-
.use(playground.router)
|
|
64
55
|
.use(error.router)
|
|
65
56
|
.use(logErrorMiddleware())
|
|
66
57
|
.use(apiErrorMiddleware());
|
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
const config = require('config');
|
|
2
2
|
const express = require('express');
|
|
3
3
|
|
|
4
|
-
const {
|
|
4
|
+
const { resolveConfig } = require('@merkur/cli/server');
|
|
5
|
+
const {
|
|
6
|
+
asyncMiddleware,
|
|
7
|
+
createAssets,
|
|
8
|
+
memo,
|
|
9
|
+
requireUncached,
|
|
10
|
+
} = require('@merkur/integration/server');
|
|
5
11
|
const memoCreateAssets = memo(createAssets);
|
|
6
12
|
|
|
13
|
+
const { merkurConfig } = resolveConfig();
|
|
14
|
+
const { staticFolder, buildFolder, protocol, host, staticPath } =
|
|
15
|
+
merkurConfig.widgetServer;
|
|
16
|
+
|
|
7
17
|
const widgetEnvironment = config.get('widget');
|
|
8
|
-
const merkurModule = require('../../../build/widget.cjs');
|
|
9
|
-
const { asyncMiddleware, getServerUrl } = require('../utils');
|
|
10
18
|
|
|
11
19
|
const router = express.Router();
|
|
12
20
|
router.get(
|
|
13
21
|
'/widget',
|
|
14
22
|
asyncMiddleware(async (req, res) => {
|
|
23
|
+
const merkurModule = requireUncached(`${buildFolder}/widget.cjs`);
|
|
15
24
|
const widget = await merkurModule.createWidget({
|
|
16
25
|
props: {
|
|
17
26
|
name: req.query.name,
|
|
@@ -22,14 +31,11 @@ router.get(
|
|
|
22
31
|
const { html, slot = {} } = await widget.mount();
|
|
23
32
|
const info = await widget.info();
|
|
24
33
|
|
|
25
|
-
const staticFolder = `${__dirname}/../../../build/static`;
|
|
26
|
-
const staticBaseUrl = `${getServerUrl(req)}/static`;
|
|
27
|
-
|
|
28
34
|
info.assets = await memoCreateAssets({
|
|
29
35
|
assets: info.assets,
|
|
30
36
|
staticFolder,
|
|
31
|
-
staticBaseUrl
|
|
32
|
-
folders:
|
|
37
|
+
staticBaseUrl: `${protocol}//${host}${staticPath}`,
|
|
38
|
+
folders: Object.keys(merkurConfig.task),
|
|
33
39
|
});
|
|
34
40
|
|
|
35
41
|
const status = info?.error?.status ?? 200;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
const cluster = require('cluster');
|
|
2
2
|
const os = require('os');
|
|
3
3
|
|
|
4
|
-
const
|
|
4
|
+
const { resolveConfig } = require('@merkur/cli/server');
|
|
5
|
+
const { merkurConfig } = resolveConfig();
|
|
5
6
|
|
|
6
7
|
const { app } = require('./app');
|
|
7
8
|
|
|
8
|
-
const
|
|
9
|
+
const { widgetServer } = merkurConfig;
|
|
9
10
|
|
|
10
11
|
process.on('uncaughtException', (error) => {
|
|
11
12
|
console.error(error);
|
|
@@ -15,10 +16,8 @@ process.on('unhandledRejection', (error) => {
|
|
|
15
16
|
console.error(error);
|
|
16
17
|
});
|
|
17
18
|
|
|
18
|
-
if (!
|
|
19
|
-
const server = app.listen(
|
|
20
|
-
console.log(`listen on localhost:${config.get('server.port')}`); // eslint-disable-line no-console
|
|
21
|
-
});
|
|
19
|
+
if (!widgetServer.clusters || !cluster.isMaster) {
|
|
20
|
+
const server = app.listen(widgetServer.port);
|
|
22
21
|
|
|
23
22
|
const handleExit = () => {
|
|
24
23
|
server.close(() => {
|
|
@@ -30,7 +29,7 @@ if (!serverConfig.clusters || !cluster.isMaster) {
|
|
|
30
29
|
process.on('SIGQUIT', handleExit);
|
|
31
30
|
process.on('SIGTERM', handleExit);
|
|
32
31
|
} else {
|
|
33
|
-
let cpuCount =
|
|
32
|
+
let cpuCount = widgetServer.clusters || os.cpus().length;
|
|
34
33
|
|
|
35
34
|
for (let i = 0; i < cpuCount; i += 1) {
|
|
36
35
|
cluster.fork();
|
package/template/src/widget.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
|
+
import { defineWidget } from '@merkur/core';
|
|
1
2
|
import { componentPlugin } from '@merkur/plugin-component';
|
|
2
3
|
import { errorPlugin } from '@merkur/plugin-error';
|
|
3
4
|
import { eventEmitterPlugin } from '@merkur/plugin-event-emitter';
|
|
4
5
|
|
|
5
6
|
import pkg from '../package.json';
|
|
7
|
+
import './style.css';
|
|
6
8
|
|
|
7
|
-
export default {
|
|
9
|
+
export default defineWidget({
|
|
8
10
|
name: pkg.name,
|
|
9
11
|
version: pkg.version,
|
|
10
12
|
$plugins: [componentPlugin, eventEmitterPlugin, errorPlugin],
|
|
11
13
|
assets: [
|
|
12
|
-
{
|
|
13
|
-
name: 'polyfill.js',
|
|
14
|
-
type: 'script',
|
|
15
|
-
},
|
|
16
14
|
{
|
|
17
15
|
name: 'widget.js',
|
|
18
16
|
type: 'script',
|
|
@@ -38,4 +36,4 @@ export default {
|
|
|
38
36
|
...restProps,
|
|
39
37
|
};
|
|
40
38
|
},
|
|
41
|
-
};
|
|
39
|
+
});
|
|
@@ -2,6 +2,9 @@ const config = require('@merkur/tools/jest.config.js');
|
|
|
2
2
|
|
|
3
3
|
config.setupFilesAfterEnv = ['./jest.setup.js'];
|
|
4
4
|
config.snapshotSerializers = ['enzyme-to-json/serializer'];
|
|
5
|
+
config.transform = {
|
|
6
|
+
'^.+\\.[t|j]sx?$': 'esbuild-jest2',
|
|
7
|
+
};
|
|
5
8
|
|
|
6
9
|
module.exports = {
|
|
7
10
|
...config,
|
|
@@ -2,13 +2,6 @@ import Welcome from '../components/Welcome';
|
|
|
2
2
|
import WidgetContext from '../components/WidgetContext';
|
|
3
3
|
import WidgetDescription from '../components/WidgetDescription';
|
|
4
4
|
|
|
5
|
-
async function headlineSlotFactory() {
|
|
6
|
-
return {
|
|
7
|
-
name: 'headline',
|
|
8
|
-
View: HeadlineSlot,
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
|
|
12
5
|
function HeadlineSlot(widget) {
|
|
13
6
|
if (widget.error && widget.error.status) {
|
|
14
7
|
return null;
|
|
@@ -27,5 +20,4 @@ function HeadlineSlot(widget) {
|
|
|
27
20
|
);
|
|
28
21
|
}
|
|
29
22
|
|
|
30
|
-
export { headlineSlotFactory };
|
|
31
23
|
export default HeadlineSlot;
|
|
@@ -1,23 +1,6 @@
|
|
|
1
|
+
import ErrorView from './ErrorView';
|
|
1
2
|
import Counter from '../components/Counter';
|
|
2
3
|
import WidgetContext from '../components/WidgetContext';
|
|
3
|
-
import { headlineSlotFactory } from '../slots/HeadlineSlot';
|
|
4
|
-
import ErrorView from './ErrorView';
|
|
5
|
-
|
|
6
|
-
async function viewFactory(widget) {
|
|
7
|
-
const slot = (await Promise.all([headlineSlotFactory(widget)])).reduce(
|
|
8
|
-
(acc, cur) => {
|
|
9
|
-
acc[cur.name] = cur;
|
|
10
|
-
|
|
11
|
-
return acc;
|
|
12
|
-
},
|
|
13
|
-
{},
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
return {
|
|
17
|
-
View,
|
|
18
|
-
slot,
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
4
|
|
|
22
5
|
function View(widget) {
|
|
23
6
|
if (widget.error && widget.error.status) {
|
|
@@ -35,5 +18,4 @@ function View(widget) {
|
|
|
35
18
|
);
|
|
36
19
|
}
|
|
37
20
|
|
|
38
|
-
export { viewFactory };
|
|
39
21
|
export default View;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* eslint-disable no-unused-vars */
|
|
2
|
+
import { defineWidget } from '@merkur/core';
|
|
3
|
+
import {
|
|
4
|
+
componentPlugin,
|
|
5
|
+
createViewFactory,
|
|
6
|
+
createSlotFactory,
|
|
7
|
+
} from '@merkur/plugin-component';
|
|
8
|
+
import { errorPlugin } from '@merkur/plugin-error';
|
|
9
|
+
import { eventEmitterPlugin } from '@merkur/plugin-event-emitter';
|
|
10
|
+
|
|
11
|
+
import HeadlineSlot from './slots/HeadlineSlot';
|
|
12
|
+
import View from './views/View';
|
|
13
|
+
|
|
14
|
+
import pkg from '../package.json';
|
|
15
|
+
|
|
16
|
+
import './style.css';
|
|
17
|
+
|
|
18
|
+
export default defineWidget({
|
|
19
|
+
name: pkg.name,
|
|
20
|
+
version: pkg.version,
|
|
21
|
+
viewFactory: createViewFactory((widget) => ({
|
|
22
|
+
View,
|
|
23
|
+
slotFactories: [
|
|
24
|
+
createSlotFactory((widget) => ({
|
|
25
|
+
name: 'headline',
|
|
26
|
+
View: HeadlineSlot,
|
|
27
|
+
})),
|
|
28
|
+
],
|
|
29
|
+
})),
|
|
30
|
+
$plugins: [componentPlugin, eventEmitterPlugin, errorPlugin],
|
|
31
|
+
assets: [
|
|
32
|
+
{
|
|
33
|
+
name: 'widget.js',
|
|
34
|
+
type: 'script',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'widget.css',
|
|
38
|
+
type: 'stylesheet',
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
onClick(widget) {
|
|
42
|
+
widget.setState({ counter: widget.state.counter + 1 });
|
|
43
|
+
},
|
|
44
|
+
onReset(widget) {
|
|
45
|
+
widget.setState({ counter: 0 });
|
|
46
|
+
},
|
|
47
|
+
load(widget) {
|
|
48
|
+
// We don't want to set environment into app state
|
|
49
|
+
const { environment, ...restProps } = widget.props;
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
counter: 0,
|
|
53
|
+
...restProps,
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
});
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
|
-
"preact": "
|
|
4
|
-
"preact-render-to-string": "6.0.3"
|
|
3
|
+
"@merkur/preact": "0.34.0"
|
|
5
4
|
},
|
|
6
5
|
"devDependencies": {
|
|
7
|
-
"@babel/preset-react": "7.18.6",
|
|
8
|
-
"babel-loader": "9.1.2",
|
|
9
6
|
"enzyme": "3.11.0",
|
|
7
|
+
"identity-obj-proxy": "^3.0.0",
|
|
10
8
|
"enzyme-adapter-preact-pure": "4.1.0",
|
|
11
9
|
"enzyme-to-json": "3.6.2"
|
|
12
10
|
}
|
|
13
|
-
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* eslint-disable no-unused-vars */
|
|
2
|
+
import { defineWidget } from '@merkur/core';
|
|
3
|
+
import {
|
|
4
|
+
componentPlugin,
|
|
5
|
+
createViewFactory,
|
|
6
|
+
createSlotFactory,
|
|
7
|
+
} from '@merkur/plugin-component';
|
|
8
|
+
import { errorPlugin } from '@merkur/plugin-error';
|
|
9
|
+
import { eventEmitterPlugin } from '@merkur/plugin-event-emitter';
|
|
10
|
+
|
|
11
|
+
import HeadlineSlot from './slots/HeadlineSlot.svelte';
|
|
12
|
+
import View from './views/View.svelte';
|
|
13
|
+
|
|
14
|
+
import pkg from '../package.json';
|
|
15
|
+
|
|
16
|
+
import './style.css';
|
|
17
|
+
|
|
18
|
+
export default defineWidget({
|
|
19
|
+
name: pkg.name,
|
|
20
|
+
version: pkg.version,
|
|
21
|
+
viewFactory: createViewFactory((widget) => ({
|
|
22
|
+
View,
|
|
23
|
+
slotFactories: [
|
|
24
|
+
createSlotFactory((widget) => ({
|
|
25
|
+
name: 'headline',
|
|
26
|
+
View: HeadlineSlot,
|
|
27
|
+
})),
|
|
28
|
+
],
|
|
29
|
+
})),
|
|
30
|
+
$plugins: [componentPlugin, eventEmitterPlugin, errorPlugin],
|
|
31
|
+
assets: [
|
|
32
|
+
{
|
|
33
|
+
name: 'widget.js',
|
|
34
|
+
type: 'script',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'widget.css',
|
|
38
|
+
type: 'stylesheet',
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
onClick(widget) {
|
|
42
|
+
widget.setState({ counter: widget.state.counter + 1 });
|
|
43
|
+
},
|
|
44
|
+
onReset(widget) {
|
|
45
|
+
widget.setState({ counter: 0 });
|
|
46
|
+
},
|
|
47
|
+
load(widget) {
|
|
48
|
+
// We don't want to set environment into app state
|
|
49
|
+
const { environment, ...restProps } = widget.props;
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
counter: 0,
|
|
53
|
+
...restProps,
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
});
|
|
@@ -5,57 +5,33 @@ const {
|
|
|
5
5
|
applyES9Transformation,
|
|
6
6
|
applyStyleLoaders,
|
|
7
7
|
pipe,
|
|
8
|
-
webpackMode,
|
|
9
8
|
} = require('@merkur/tool-webpack');
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
loader: 'svelte-loader',
|
|
16
|
-
options: {
|
|
17
|
-
compilerOptions: {
|
|
18
|
-
dev: webpackMode,
|
|
19
|
-
generate: 'dom',
|
|
20
|
-
hydratable: true,
|
|
21
|
-
},
|
|
22
|
-
emitCss: true,
|
|
23
|
-
hotReload: false,
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
return config;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function applySvelteNode(config) {
|
|
32
|
-
config.module.rules.push({
|
|
33
|
-
test: /\.(svelte|html)$/,
|
|
34
|
-
use: {
|
|
35
|
-
loader: 'svelte-loader',
|
|
36
|
-
options: {
|
|
37
|
-
compilerOptions: {
|
|
38
|
-
css: false,
|
|
39
|
-
generate: 'ssr',
|
|
40
|
-
dev: webpackMode,
|
|
41
|
-
hydratable: true,
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
return config;
|
|
48
|
-
}
|
|
9
|
+
const {
|
|
10
|
+
applySvelteConfig,
|
|
11
|
+
applySvelteWeb,
|
|
12
|
+
applySvelteNode,
|
|
13
|
+
} = require('@merkur/svelte/webpack');
|
|
49
14
|
|
|
50
15
|
module.exports = createLiveReloadServer().then(() =>
|
|
51
16
|
Promise.all([
|
|
52
|
-
pipe(createWebConfig, applyStyleLoaders, applySvelteWeb)(),
|
|
53
17
|
pipe(
|
|
54
18
|
createWebConfig,
|
|
19
|
+
applySvelteConfig,
|
|
20
|
+
applyStyleLoaders,
|
|
21
|
+
applySvelteWeb,
|
|
22
|
+
)(),
|
|
23
|
+
pipe(
|
|
24
|
+
createWebConfig,
|
|
25
|
+
applySvelteConfig,
|
|
55
26
|
applyStyleLoaders,
|
|
56
27
|
applySvelteWeb,
|
|
57
28
|
applyES9Transformation,
|
|
58
29
|
)(),
|
|
59
|
-
pipe(
|
|
30
|
+
pipe(
|
|
31
|
+
createNodeConfig,
|
|
32
|
+
applySvelteConfig,
|
|
33
|
+
applyStyleLoaders,
|
|
34
|
+
applySvelteNode,
|
|
35
|
+
)(),
|
|
60
36
|
]),
|
|
61
37
|
);
|
|
@@ -2,13 +2,6 @@ import Welcome from '../components/Welcome';
|
|
|
2
2
|
import WidgetDescription from '../components/WidgetDescription';
|
|
3
3
|
import ErrorView from '../views/ErrorView';
|
|
4
4
|
|
|
5
|
-
async function headlineSlotFactory() {
|
|
6
|
-
return {
|
|
7
|
-
name: 'headline',
|
|
8
|
-
View: HeadlineSlot,
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
|
|
12
5
|
function HeadlineSlot(widget) {
|
|
13
6
|
if (widget.error && widget.error.status) {
|
|
14
7
|
return ErrorView(widget);
|
|
@@ -27,5 +20,4 @@ function HeadlineSlot(widget) {
|
|
|
27
20
|
`;
|
|
28
21
|
}
|
|
29
22
|
|
|
30
|
-
export { headlineSlotFactory };
|
|
31
23
|
export default HeadlineSlot;
|