@merkur/cli 0.37.0 → 0.37.3
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/lib/devClient.mjs +1 -1
- package/package.json +2 -2
- package/src/commands/build.mjs +1 -32
- package/src/commands/dev.mjs +1 -32
- package/src/devClient/index.mjs +8 -6
- package/src/merkurConfig.mjs +1 -9
- package/src/plugins/excludeVendorsFromSourceMapPlugin.mjs +1 -1
- package/src/runBuild.mjs +40 -0
- package/src/runTask.mjs +37 -33
- package/src/templates/footer.ejs +6 -1
- package/types.d.ts +1 -4
package/lib/devClient.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var l=class{#e=[];pipe(...t){return x(...t)(this)}next(...t){this.#e.forEach(e=>{typeof e=="function"?e(...t):e.next(...t)})}error(...t){this.#e.forEach(e=>{e?.error?.(...t),this.unsubscribe(e)})}complete(...t){this.#e.forEach(e=>{e?.complete?.(...t),this.unsubscribe(e)})}subscribe(t){return this.#e.push(t),{unsubscribe:()=>{this.unsubscribe(t)}}}unsubscribe(t){let e=this.#e.indexOf(t);this.#e.splice(e,1)}};function x(...t){return e=>Array.from(t).reduce((
|
|
1
|
+
"use strict";(()=>{var l=class{#e=[];pipe(...t){return x(...t)(this)}next(...t){this.#e.forEach(e=>{typeof e=="function"?e(...t):e.next(...t)})}error(...t){this.#e.forEach(e=>{e?.error?.(...t),this.unsubscribe(e)})}complete(...t){this.#e.forEach(e=>{e?.complete?.(...t),this.unsubscribe(e)})}subscribe(t){return this.#e.push(t),{unsubscribe:()=>{this.unsubscribe(t)}}}unsubscribe(t){let e=this.#e.indexOf(t);this.#e.splice(e,1)}};function x(...t){return e=>Array.from(t).reduce((i,a)=>a(i),e)}var S=5,m=class extends l{#e=null;#t=0;#r={};constructor(e){super(),this.#r=e}init(){return this.#n(),this}send(e){return this.#e&&this.#e.send(e),this}destroy(){return this.#e&&(this.#e.close(),this.#e=null),this}#n(){this.#e=Reflect.construct(WebSocket,[`${this.#r.protocol}//${this.#r.host}`]),this.#e.onopen=()=>{this.#t=0},this.#e.onmessage=e=>{try{let i=JSON.parse(e.data);this.next(i)}catch(i){console.error(i)}},this.#e.onerror=e=>{console.error(e)},this.#e.onclose=()=>{this.#t>=S||(this.#t+=1,setTimeout(()=>{this.#n()},this.#t*500))}}};async function w({to:t,command:e}){t==="browser"&&e==="reload"&&location.reload()}async function f({to:t,command:e,changed:i}){if(t==="browser"&&e==="refresh"){if(await Promise.all(i.map(async o=>new Promise(c=>{let r=document.querySelector(`[data-name="${o.name}"]`);if(!r||r.nodeName==="STYLE"){location.reload();return}let n=null,u=new URLSearchParams({version:Math.random()});if(r.nodeName==="LINK"){let s=new URL(r.href);n=r.cloneNode(),n.onload=()=>{r.remove(),c()},n.onerror=()=>{r.remove(),c()},n.href=new URL(`${s.origin}${s.pathname}?${u.toString()}`)}if(r.nodeName==="SCRIPT"){let s=new URL(r.src);n=document.createElement("script"),n.setAttribute("data-name",o.name),n.onload=()=>{r.remove(),c()},n.onerror=()=>{r.remove(),c()},n.src=new URL(`${s.origin}${s.pathname}?${u.toString()}`)}r.parentNode.insertBefore(n,r.nextSibling)}))),!i.some(o=>o.name.endsWith(".js")))return;let a=window.__merkur_dev__.widgets;window.__merkur_dev__.widgets=[],a.forEach(async o=>{let{props:c,state:r,$external:n,name:u,version:s,containerSelector:p,container:_,slot:b}=o,k={props:c,state:r,$external:n,name:u,version:s,containerSelector:p,container:_,slot:b},g=await window.__merkur__.create(k);await o.unmount(),await g.mount()})}}var{__merkur_dev__:h}=window,d=new m(h.merkurConfig.socketServer);h.webSocket=d;h.widgets=[];d.init();d.subscribe(w);d.subscribe(f);addEventListener("load",function(){if(window?.__merkur__?.create){let e=window.__merkur__.create;window.__merkur__.create=async function(...a){let o=await e(...a);return h.widgets.push(o),o}}});})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@merkur/cli",
|
|
3
|
-
"version": "0.37.
|
|
3
|
+
"version": "0.37.3",
|
|
4
4
|
"description": "Merkur is tiny and extensible library for creating front-end microservices.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"merkur": "./bin/merkur.mjs"
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"engines": {
|
|
68
68
|
"node": ">=20"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "7237693f163d80defa4a19071419c697cc8785fa"
|
|
71
71
|
}
|
package/src/commands/build.mjs
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
|
|
3
|
-
import { createBuildConfig } from '../buildConfig.mjs';
|
|
4
3
|
import { createCLIConfig } from '../CLIConfig.mjs';
|
|
5
4
|
import { createContext } from '../context.mjs';
|
|
6
|
-
import { createTaskConfig } from '../taskConfig.mjs';
|
|
7
5
|
import { runTask } from '../runTask.mjs';
|
|
8
6
|
import { createMerkurConfig } from '../merkurConfig.mjs';
|
|
9
7
|
import { createLogger } from '../logger.mjs';
|
|
@@ -28,36 +26,7 @@ export async function build({ args, command }) {
|
|
|
28
26
|
|
|
29
27
|
await clearBuildFolder({ merkurConfig, cliConfig });
|
|
30
28
|
|
|
31
|
-
const task = await
|
|
32
|
-
async (result, key) => {
|
|
33
|
-
const definition = merkurConfig.task[key];
|
|
34
|
-
|
|
35
|
-
const config = await createTaskConfig({
|
|
36
|
-
definition,
|
|
37
|
-
merkurConfig,
|
|
38
|
-
cliConfig,
|
|
39
|
-
context,
|
|
40
|
-
});
|
|
41
|
-
const build = await createBuildConfig({
|
|
42
|
-
definition,
|
|
43
|
-
config,
|
|
44
|
-
merkurConfig,
|
|
45
|
-
cliConfig,
|
|
46
|
-
context,
|
|
47
|
-
});
|
|
48
|
-
result[definition.name] = await runTask({
|
|
49
|
-
definition,
|
|
50
|
-
build,
|
|
51
|
-
merkurConfig,
|
|
52
|
-
cliConfig,
|
|
53
|
-
config,
|
|
54
|
-
context,
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
return result;
|
|
58
|
-
},
|
|
59
|
-
context.task,
|
|
60
|
-
);
|
|
29
|
+
const task = await runTask({ merkurConfig, cliConfig, context });
|
|
61
30
|
|
|
62
31
|
await Promise.all(Object.values(task));
|
|
63
32
|
|
package/src/commands/dev.mjs
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { createBuildConfig } from '../buildConfig.mjs';
|
|
2
1
|
import { createCLIConfig } from '../CLIConfig.mjs';
|
|
3
2
|
import { createContext } from '../context.mjs';
|
|
4
3
|
import { runDevServer } from '../devServer.mjs';
|
|
5
|
-
import { createTaskConfig } from '../taskConfig.mjs';
|
|
6
4
|
import { runTask } from '../runTask.mjs';
|
|
7
5
|
import { createMerkurConfig } from '../merkurConfig.mjs';
|
|
8
6
|
import { runSocketServer } from '../websocket.mjs';
|
|
@@ -24,36 +22,7 @@ export async function dev({ args, command }) {
|
|
|
24
22
|
|
|
25
23
|
await clearBuildFolder({ merkurConfig, cliConfig });
|
|
26
24
|
|
|
27
|
-
const task = await
|
|
28
|
-
async (result, key) => {
|
|
29
|
-
const definition = merkurConfig.task[key];
|
|
30
|
-
|
|
31
|
-
const config = await createTaskConfig({
|
|
32
|
-
definition,
|
|
33
|
-
merkurConfig,
|
|
34
|
-
cliConfig,
|
|
35
|
-
context,
|
|
36
|
-
});
|
|
37
|
-
const build = await createBuildConfig({
|
|
38
|
-
definition,
|
|
39
|
-
config,
|
|
40
|
-
merkurConfig,
|
|
41
|
-
cliConfig,
|
|
42
|
-
context,
|
|
43
|
-
});
|
|
44
|
-
result[definition.name] = await runTask({
|
|
45
|
-
definition,
|
|
46
|
-
build,
|
|
47
|
-
merkurConfig,
|
|
48
|
-
cliConfig,
|
|
49
|
-
config,
|
|
50
|
-
context,
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
return result;
|
|
54
|
-
},
|
|
55
|
-
context.task,
|
|
56
|
-
);
|
|
25
|
+
const task = await runTask({ merkurConfig, cliConfig, context });
|
|
57
26
|
|
|
58
27
|
await Promise.all(Object.values(task));
|
|
59
28
|
|
package/src/devClient/index.mjs
CHANGED
|
@@ -15,12 +15,14 @@ webSocket.subscribe(reload);
|
|
|
15
15
|
webSocket.subscribe(hmr);
|
|
16
16
|
|
|
17
17
|
addEventListener('load', function hookMerkurCreate() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
if (window?.__merkur__?.create) {
|
|
19
|
+
const originalMerkurCreate = window.__merkur__.create;
|
|
20
|
+
window.__merkur__.create = async function devClientHook(...rest) {
|
|
21
|
+
const widget = await originalMerkurCreate(...rest);
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
__merkur_dev__.widgets.push(widget);
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
return widget;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
26
28
|
});
|
package/src/merkurConfig.mjs
CHANGED
|
@@ -87,7 +87,7 @@ async function registerHooks({ merkurConfig }) {
|
|
|
87
87
|
emitter.on(
|
|
88
88
|
EMITTER_EVENTS.MERKUR_CONFIG,
|
|
89
89
|
function defaultTask({ merkurConfig, cliConfig }) {
|
|
90
|
-
const { staticFolder
|
|
90
|
+
const { staticFolder } = cliConfig;
|
|
91
91
|
|
|
92
92
|
merkurConfig.task = merkurConfig.task ?? {};
|
|
93
93
|
|
|
@@ -134,14 +134,6 @@ emitter.on(
|
|
|
134
134
|
);
|
|
135
135
|
});
|
|
136
136
|
|
|
137
|
-
if (runTasks.length !== 0) {
|
|
138
|
-
Object.keys(merkurConfig.task)
|
|
139
|
-
.filter((taskName) => !runTasks.includes(taskName))
|
|
140
|
-
.forEach((taskKey) => {
|
|
141
|
-
delete merkurConfig.task[taskKey];
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
|
|
145
137
|
return merkurConfig;
|
|
146
138
|
},
|
|
147
139
|
);
|
|
@@ -4,7 +4,7 @@ export function excludeVendorsFromSourceMapPlugin() {
|
|
|
4
4
|
return {
|
|
5
5
|
name: 'excludeVendorsFromSourceMapPlugin',
|
|
6
6
|
setup(build) {
|
|
7
|
-
build.onLoad({ filter:
|
|
7
|
+
build.onLoad({ filter: /\/node_modules\/.*\.js?$/ }, async (args) => {
|
|
8
8
|
const contents = await fs.readFile(args.path, { encoding: 'utf8' });
|
|
9
9
|
|
|
10
10
|
return {
|
package/src/runBuild.mjs
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
|
|
3
|
+
import esbuild from 'esbuild';
|
|
4
|
+
import { createLogger } from './logger.mjs';
|
|
5
|
+
|
|
6
|
+
export async function runBuild({ cliConfig, build, config }) {
|
|
7
|
+
const logger = createLogger(undefined, cliConfig);
|
|
8
|
+
const { watch } = cliConfig;
|
|
9
|
+
|
|
10
|
+
//es6 === es2015, es9 === es2018, es11 === es2020 es13 ===es2022
|
|
11
|
+
try {
|
|
12
|
+
const result = await (watch
|
|
13
|
+
? esbuild.context(build)
|
|
14
|
+
: esbuild.build(build));
|
|
15
|
+
|
|
16
|
+
if (config.analyze && result.metafile) {
|
|
17
|
+
logger.log(
|
|
18
|
+
await esbuild.analyzeMetafile(result.metafile, {
|
|
19
|
+
verbose: cliConfig.verbose,
|
|
20
|
+
}),
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
if (build.outdir) {
|
|
24
|
+
await fs.writeFile(
|
|
25
|
+
`${build.outdir}/${build.entryNames ?? config.name}.meta.json`,
|
|
26
|
+
JSON.stringify(result.metafile),
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (watch) {
|
|
32
|
+
await result.watch();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return result;
|
|
36
|
+
} catch (error) {
|
|
37
|
+
console.error(error);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
}
|
package/src/runTask.mjs
CHANGED
|
@@ -1,40 +1,44 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createBuildConfig } from './buildConfig.mjs';
|
|
2
|
+
import { createTaskConfig } from './taskConfig.mjs';
|
|
3
|
+
import { runBuild } from './runBuild.mjs';
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
+
export async function runTask({ cliConfig, merkurConfig, context }) {
|
|
6
|
+
const { runTasks } = cliConfig;
|
|
7
|
+
let task = { ...merkurConfig.task };
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
? esbuild.context(build)
|
|
14
|
-
: esbuild.build(build));
|
|
15
|
-
|
|
16
|
-
if (config.analyze && result.metafile) {
|
|
17
|
-
logger.log(
|
|
18
|
-
await esbuild.analyzeMetafile(result.metafile, {
|
|
19
|
-
verbose: cliConfig.verbose,
|
|
20
|
-
}),
|
|
21
|
-
);
|
|
9
|
+
if (runTasks.length !== 0) {
|
|
10
|
+
Object.keys(task)
|
|
11
|
+
.filter((taskName) => !runTasks.includes(taskName))
|
|
12
|
+
.forEach((taskKey) => {
|
|
13
|
+
delete task[taskKey];
|
|
14
|
+
});
|
|
15
|
+
}
|
|
22
16
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
`${build.outdir}/${build.entryNames ?? config.name}.meta.json`,
|
|
26
|
-
JSON.stringify(result.metafile),
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
17
|
+
return Object.keys(task).reduce(async (result, key) => {
|
|
18
|
+
const definition = task[key];
|
|
30
19
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
20
|
+
const config = await createTaskConfig({
|
|
21
|
+
definition,
|
|
22
|
+
merkurConfig,
|
|
23
|
+
cliConfig,
|
|
24
|
+
context,
|
|
25
|
+
});
|
|
26
|
+
const build = await createBuildConfig({
|
|
27
|
+
definition,
|
|
28
|
+
config,
|
|
29
|
+
merkurConfig,
|
|
30
|
+
cliConfig,
|
|
31
|
+
context,
|
|
32
|
+
});
|
|
33
|
+
result[definition.name] = await runBuild({
|
|
34
|
+
definition,
|
|
35
|
+
build,
|
|
36
|
+
merkurConfig,
|
|
37
|
+
cliConfig,
|
|
38
|
+
config,
|
|
39
|
+
context,
|
|
40
|
+
});
|
|
34
41
|
|
|
35
42
|
return result;
|
|
36
|
-
}
|
|
37
|
-
console.error(error);
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
43
|
+
}, context.task);
|
|
40
44
|
}
|
package/src/templates/footer.ejs
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
window.addEventListener('load', function () {
|
|
3
|
-
|
|
3
|
+
if (!window.__merkur__) {
|
|
4
|
+
console.error('Merkur is not available in the global scope. Make sure you have included Merkur in your project.');
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
window.__merkur__.create(<%- escapeToJSON(widgetProperties) %>)
|
|
4
9
|
.then(function (widget) {
|
|
5
10
|
widget.containerSelector = widget.containerSelector ?? '.merkur-main';
|
|
6
11
|
|
package/types.d.ts
CHANGED
|
@@ -108,7 +108,4 @@ export interface MerkurConfig {
|
|
|
108
108
|
}) => Partial<BuildOptions>;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
export function defineConfig({
|
|
112
|
-
merkurConfig: MerkurConfig,
|
|
113
|
-
cliConfig: CLIConfig,
|
|
114
|
-
}): Partial<MerkurConfig>;
|
|
111
|
+
export function defineConfig({ cliConfig: CLIConfig }): Partial<MerkurConfig>;
|