@merkur/cli 0.37.5 → 0.37.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@merkur/cli",
3
- "version": "0.37.5",
3
+ "version": "0.37.8",
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": "af943715deec4b2e509eab4c2a8f6389fd1d4822"
70
+ "gitHead": "3a0dd00def5bb8bdcdc00c4ee10d4d151094fd94"
71
71
  }
@@ -0,0 +1,16 @@
1
+ import { createCLIConfig } from './CLIConfig.mjs';
2
+ import { createContext } from './context.mjs';
3
+ import { createMerkurConfig } from './merkurConfig.mjs';
4
+
5
+ export async function createCommandConfig({ args, command }) {
6
+ const context = await createContext();
7
+ const baseCliConfig = await createCLIConfig({ args, command });
8
+
9
+ const { merkurConfig, cliConfig } = await createMerkurConfig({
10
+ args,
11
+ cliConfig: baseCliConfig,
12
+ context,
13
+ });
14
+
15
+ return { context, merkurConfig, cliConfig };
16
+ }
@@ -1,9 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
 
3
- import { createCLIConfig } from '../CLIConfig.mjs';
4
- import { createContext } from '../context.mjs';
3
+ import { createCommandConfig } from '../commandConfig.mjs';
5
4
  import { runTask } from '../runTask.mjs';
6
- import { createMerkurConfig } from '../merkurConfig.mjs';
7
5
  import { createLogger } from '../logger.mjs';
8
6
  import { time } from '../utils.mjs';
9
7
  import { handleExit } from '../handleExit.mjs';
@@ -12,14 +10,11 @@ import { clearBuildFolder } from '../clearBuildFolder.mjs';
12
10
  export async function build({ args, command }) {
13
11
  const buildTime = time();
14
12
 
15
- const context = await createContext();
16
- const baseCliConfig = await createCLIConfig({ args, command });
17
-
18
- const { merkurConfig, cliConfig } = await createMerkurConfig({
13
+ const { context, cliConfig, merkurConfig } = await createCommandConfig({
19
14
  args,
20
- cliConfig: baseCliConfig,
21
- context,
15
+ command,
22
16
  });
17
+
23
18
  const logger = createLogger(undefined, cliConfig);
24
19
 
25
20
  await handleExit({ context });
@@ -3,10 +3,8 @@ import path from 'node:path';
3
3
 
4
4
  import chalk from 'chalk';
5
5
 
6
- import { createCLIConfig } from '../CLIConfig.mjs';
7
- import { createContext } from '../context.mjs';
6
+ import { createCommandConfig } from '../commandConfig.mjs';
8
7
  import { createLogger } from '../logger.mjs';
9
- import { createMerkurConfig } from '../merkurConfig.mjs';
10
8
  import { handleExit } from '../handleExit.mjs';
11
9
 
12
10
  export const CUSTOM_PART = {
@@ -15,15 +13,10 @@ export const CUSTOM_PART = {
15
13
  };
16
14
 
17
15
  export async function custom({ args, command }) {
18
- const context = await createContext();
19
- let baseCliConfig = await createCLIConfig({ args, command });
20
-
21
- const { merkurConfig, cliConfig } = await createMerkurConfig({
16
+ const { context, cliConfig, merkurConfig } = await createCommandConfig({
22
17
  args,
23
- cliConfig: baseCliConfig,
24
- context,
18
+ command,
25
19
  });
26
-
27
20
  const logger = createLogger('Custom command:', cliConfig);
28
21
 
29
22
  await handleExit({ context });
@@ -1,21 +1,15 @@
1
- import { createCLIConfig } from '../CLIConfig.mjs';
2
- import { createContext } from '../context.mjs';
1
+ import { createCommandConfig } from '../commandConfig.mjs';
3
2
  import { runDevServer } from '../devServer.mjs';
4
3
  import { runTask } from '../runTask.mjs';
5
- import { createMerkurConfig } from '../merkurConfig.mjs';
6
4
  import { runSocketServer } from '../websocket.mjs';
7
5
  import { runWidgetServer } from '../widgetServer.mjs';
8
6
  import { handleExit } from '../handleExit.mjs';
9
7
  import { clearBuildFolder } from '../clearBuildFolder.mjs';
10
8
 
11
9
  export async function dev({ args, command }) {
12
- const context = await createContext();
13
- const baseCliConfig = await createCLIConfig({ args, command });
14
-
15
- const { merkurConfig, cliConfig } = await createMerkurConfig({
10
+ const { context, cliConfig, merkurConfig } = await createCommandConfig({
16
11
  args,
17
- cliConfig: baseCliConfig,
18
- context,
12
+ command,
19
13
  });
20
14
 
21
15
  await handleExit({ context });
@@ -1,18 +1,12 @@
1
- import { createCLIConfig } from '../CLIConfig.mjs';
2
- import { createContext } from '../context.mjs';
1
+ import { createCommandConfig } from '../commandConfig.mjs';
3
2
  import { runDevServer } from '../devServer.mjs';
4
- import { createMerkurConfig } from '../merkurConfig.mjs';
5
3
  import { runWidgetServer } from '../widgetServer.mjs';
6
4
  import { handleExit } from '../handleExit.mjs';
7
5
 
8
6
  export async function start({ args, command }) {
9
- const context = await createContext();
10
- let baseCliConfig = await createCLIConfig({ args, command });
11
-
12
- const { merkurConfig, cliConfig } = await createMerkurConfig({
7
+ const { context, cliConfig, merkurConfig } = await createCommandConfig({
13
8
  args,
14
- cliConfig: baseCliConfig,
15
- context,
9
+ command,
16
10
  });
17
11
 
18
12
  await handleExit({ context });
@@ -3,20 +3,14 @@ import process from 'node:process';
3
3
 
4
4
  import { npmRunPath } from 'npm-run-path';
5
5
 
6
- import { createCLIConfig } from '../CLIConfig.mjs';
7
- import { createContext } from '../context.mjs';
6
+ import { createCommandConfig } from '../commandConfig.mjs';
8
7
  import { createLogger } from '../logger.mjs';
9
- import { createMerkurConfig } from '../merkurConfig.mjs';
10
8
  import { handleExit } from '../handleExit.mjs';
11
9
 
12
10
  export async function test({ args, commandArgs, command }) {
13
- const context = await createContext();
14
- let baseCliConfig = await createCLIConfig({ args, command });
15
-
16
- const { merkurConfig, cliConfig } = await createMerkurConfig({
11
+ const { context, cliConfig, merkurConfig } = await createCommandConfig({
17
12
  args,
18
- cliConfig: baseCliConfig,
19
- context,
13
+ command,
20
14
  });
21
15
  const logger = createLogger('testRunner', cliConfig);
22
16
 
package/src/devServer.mjs CHANGED
@@ -27,6 +27,7 @@ export async function runDevServer({ context, merkurConfig, cliConfig }) {
27
27
  template,
28
28
  templateFolder,
29
29
  serverTemplateFolder,
30
+ templateFolders,
30
31
  path: playgroundPath,
31
32
  widgetHandler,
32
33
  } = merkurConfig.playground;
@@ -52,7 +53,11 @@ export async function runDevServer({ context, merkurConfig, cliConfig }) {
52
53
  asyncMiddleware(async (req, res) => {
53
54
  const isDevCommand = command === COMMAND_NAME.DEV;
54
55
 
55
- const widgetProperties = await widgetHandler(req, res);
56
+ const widgetProperties = await widgetHandler(req, res, {
57
+ context,
58
+ merkurConfig,
59
+ cliConfig,
60
+ });
56
61
 
57
62
  // TODO refactor
58
63
  if (isDevCommand) {
@@ -127,9 +132,12 @@ export async function runDevServer({ context, merkurConfig, cliConfig }) {
127
132
  fs.readFileSync(template, 'utf8'),
128
133
  {
129
134
  views: [
130
- serverTemplateFolder,
131
- path.dirname(template),
132
- templateFolder,
135
+ ...new Set([
136
+ serverTemplateFolder,
137
+ path.dirname(template),
138
+ templateFolder,
139
+ ...templateFolders,
140
+ ]),
133
141
  ],
134
142
  },
135
143
  );
@@ -169,7 +177,8 @@ export async function runDevServer({ context, merkurConfig, cliConfig }) {
169
177
  }
170
178
 
171
179
  logger.error(error);
172
- res.status(500).json({
180
+ // TODO send html page with preview of error for better DX
181
+ res.status(error?.status ?? 500).json({
173
182
  error: {
174
183
  message: `Something is wrong with the @merkur/cli/devServer: ${error.message}`,
175
184
  stack: error.stack,
@@ -189,12 +189,22 @@ emitter.on(
189
189
  function playground({ merkurConfig, cliConfig }) {
190
190
  merkurConfig.playground = {
191
191
  template: path.resolve(`${cliConfig.cliFolder}/templates/playground.ejs`),
192
+ // @deprecated Use templateFolders instead.
192
193
  templateFolder: path.resolve(`${cliConfig.cliFolder}/templates`),
194
+ // @deprecated Use templateFolders instead.
193
195
  serverTemplateFolder: path.resolve(
194
196
  `${cliConfig.projectFolder}/server/playground/templates`,
195
197
  ),
198
+ /**
199
+ * This new variable will replace the old templateFolders. So we already
200
+ * include all of the default folders in here.
201
+ */
202
+ templateFolders: [
203
+ path.resolve(`${cliConfig.cliFolder}/templates`),
204
+ path.resolve(`${cliConfig.projectFolder}/server/playground/templates`),
205
+ ],
196
206
  path: '/',
197
- widgetHandler: async (req) => {
207
+ widgetHandler: async (req, res, { merkurConfig }) => {
198
208
  const { protocol, host } = merkurConfig.widgetServer;
199
209
  let widgetProperties = null;
200
210
  const params = merkurConfig.playground.widgetParams(req);
@@ -207,6 +217,7 @@ emitter.on(
207
217
  if (!response.ok) {
208
218
  const error = new Error(widgetProperties?.error?.message);
209
219
  error.stack = widgetProperties?.error?.stack;
220
+ error.status = response.status ?? 500;
210
221
  throw error;
211
222
  }
212
223
 
package/types.d.ts CHANGED
@@ -47,8 +47,15 @@ export interface DevServer {
47
47
 
48
48
  export interface Playground {
49
49
  template: string;
50
+ /**
51
+ * @deprecated Use templateFolders instead.
52
+ */
50
53
  templateFolder: string;
54
+ /**
55
+ * @deprecated Use templateFolders instead.
56
+ */
51
57
  serverTemplateFolder: string;
58
+ templateFolders: string[];
52
59
  path: string;
53
60
  widgetHandler(req: Request, res: Response): Record<string, unknown>;
54
61
  widgetParams(req: Request): URLSearchParams;