@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 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((s,a)=>a(s),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 s=JSON.parse(e.data);this.next(s)}catch(s){console.error(s)}},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 p({to:t,command:e,changed:s}){if(t==="browser"&&e==="refresh"){if(await Promise.all(s.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 i=new URL(r.href);n=r.cloneNode(),n.onload=()=>{r.remove(),c()},n.onerror=()=>{r.remove(),c()},n.href=new URL(`${i.origin}${i.pathname}?${u.toString()}`)}if(r.nodeName==="SCRIPT"){let i=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(`${i.origin}${i.pathname}?${u.toString()}`)}r.parentNode.insertBefore(n,r.nextSibling)}))),!s.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:i,containerSelector:f,container:_,slot:b}=o,k={props:c,state:r,$external:n,name:u,version:i,containerSelector:f,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(p);addEventListener("load",function(){let e=window.__merkur__.create;window.__merkur__.create=async function(...a){let o=await e(...a);return h.widgets.push(o),o}});})();
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.0",
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": "af826493e5ed4b37602dd43ce89a59baeeb1bada"
70
+ "gitHead": "7237693f163d80defa4a19071419c697cc8785fa"
71
71
  }
@@ -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 Object.keys(merkurConfig.task).reduce(
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
 
@@ -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 Object.keys(merkurConfig.task).reduce(
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
 
@@ -15,12 +15,14 @@ webSocket.subscribe(reload);
15
15
  webSocket.subscribe(hmr);
16
16
 
17
17
  addEventListener('load', function hookMerkurCreate() {
18
- const originalMerkurCreate = window.__merkur__.create;
19
- window.__merkur__.create = async function devClientHook(...rest) {
20
- const widget = await originalMerkurCreate(...rest);
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
- __merkur_dev__.widgets.push(widget);
23
+ __merkur_dev__.widgets.push(widget);
23
24
 
24
- return widget;
25
- };
25
+ return widget;
26
+ };
27
+ }
26
28
  });
@@ -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, runTasks } = cliConfig;
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: /node_modules/ }, async (args) => {
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 {
@@ -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 fs from 'node:fs/promises';
1
+ import { createBuildConfig } from './buildConfig.mjs';
2
+ import { createTaskConfig } from './taskConfig.mjs';
3
+ import { runBuild } from './runBuild.mjs';
2
4
 
3
- import esbuild from 'esbuild';
4
- import { createLogger } from './logger.mjs';
5
+ export async function runTask({ cliConfig, merkurConfig, context }) {
6
+ const { runTasks } = cliConfig;
7
+ let task = { ...merkurConfig.task };
5
8
 
6
- export async function runTask({ 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
- );
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
- if (build.outdir) {
24
- await fs.writeFile(
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
- if (watch) {
32
- await result.watch();
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
- } catch (error) {
37
- console.error(error);
38
- process.exit(1);
39
- }
43
+ }, context.task);
40
44
  }
@@ -1,6 +1,11 @@
1
1
  <script>
2
2
  window.addEventListener('load', function () {
3
- __merkur__.create(<%- escapeToJSON(widgetProperties) %>)
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>;