Skip to content

Commit

Permalink
fix: 🐛 definition of custom tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
mjancarik committed Nov 13, 2024
1 parent af82649 commit de74901
Show file tree
Hide file tree
Showing 10 changed files with 101 additions and 125 deletions.
31 changes: 18 additions & 13 deletions docs/docs/merkur-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ For example we create custom task for bundling ES11 version of Merkur widget ver
/**
* @type import('@merkur/cli').defineConfig
*/
export default function ({ cliConfig, emitter, }) {
export default function ({ cliConfig }) {
return {
task: {
es11: {
Expand All @@ -125,37 +125,42 @@ Or If you want to bundle Merkur widget and some JS asset for your Merkur widget
/**
* @type import('@merkur/cli').defineConfig
*/
export default function ({ cliConfig, emitter, }) {
export default function () {
return {
task: {
es13Asset: {
onMerkurConfig({ cliConfig, merkurConfig }) {
const { projectFolder, isProduction, staticFolder } = cliConfig;

merkurConfig.task.es13Asset = {
name: 'es13Asset',
folder: 'es13',
build: {
entryPoints: `${cliConfig.projectFolder}/src/customAsset.js`,
entryNames: !cliConfig.isProduction ? 'customAsset' : 'customAsset.[hash]',
build: {
entryPoints: [`${projectFolder}/src/customAsset.js`],
entryNames: !isProduction ? 'customAsset' : 'customAsset.[hash]',
platform: 'browser',
outdir: `${staticFolder}/es13`,
plugins: merkurConfig.task['es13'].build.plugins,
},
},
es9Asset: {
};

merkurConfig.task.es9Asset = {
name: 'es9Asset',
folder: 'es9',
build: {
entryPoints: `${cliConfig.projectFolder}/src/customAsset.js`,
entryNames: !cliConfig.isProduction ? 'customAsset' : 'customAsset.[hash]',
entryPoints: [`${projectFolder}/src/customAsset.js`],
entryNames: !isProduction ? 'customAsset' : 'customAsset.[hash]',
platform: 'browser',
target: 'es2018',
outdir: `${staticFolder}/es9`,
plugins: merkurConfig.task['es9'].build.plugins,
},
}
};

return merkurConfig;
},
onCliConfig({ cliConfig }) {
// add es13Asset task to be run for `merkur dev`
if (cliConfig.command === 'dev') {
cliConfig.runTask.push('es13Asset');
cliConfig.runTasks.push('es13Asset');
}
},
};
Expand Down
33 changes: 1 addition & 32 deletions packages/cli/src/commands/build.mjs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import chalk from 'chalk';

import { createBuildConfig } from '../buildConfig.mjs';
import { createCLIConfig } from '../CLIConfig.mjs';
import { createContext } from '../context.mjs';
import { createTaskConfig } from '../taskConfig.mjs';
import { runTask } from '../runTask.mjs';
import { createMerkurConfig } from '../merkurConfig.mjs';
import { createLogger } from '../logger.mjs';
Expand All @@ -28,36 +26,7 @@ export async function build({ args, command }) {

await clearBuildFolder({ merkurConfig, cliConfig });

const task = await Object.keys(merkurConfig.task).reduce(
async (result, key) => {
const definition = merkurConfig.task[key];

const config = await createTaskConfig({
definition,
merkurConfig,
cliConfig,
context,
});
const build = await createBuildConfig({
definition,
config,
merkurConfig,
cliConfig,
context,
});
result[definition.name] = await runTask({
definition,
build,
merkurConfig,
cliConfig,
config,
context,
});

return result;
},
context.task,
);
const task = await runTask({ merkurConfig, cliConfig, context });

await Promise.all(Object.values(task));

Expand Down
33 changes: 1 addition & 32 deletions packages/cli/src/commands/dev.mjs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import { createBuildConfig } from '../buildConfig.mjs';
import { createCLIConfig } from '../CLIConfig.mjs';
import { createContext } from '../context.mjs';
import { runDevServer } from '../devServer.mjs';
import { createTaskConfig } from '../taskConfig.mjs';
import { runTask } from '../runTask.mjs';
import { createMerkurConfig } from '../merkurConfig.mjs';
import { runSocketServer } from '../websocket.mjs';
Expand All @@ -24,36 +22,7 @@ export async function dev({ args, command }) {

await clearBuildFolder({ merkurConfig, cliConfig });

const task = await Object.keys(merkurConfig.task).reduce(
async (result, key) => {
const definition = merkurConfig.task[key];

const config = await createTaskConfig({
definition,
merkurConfig,
cliConfig,
context,
});
const build = await createBuildConfig({
definition,
config,
merkurConfig,
cliConfig,
context,
});
result[definition.name] = await runTask({
definition,
build,
merkurConfig,
cliConfig,
config,
context,
});

return result;
},
context.task,
);
const task = await runTask({ merkurConfig, cliConfig, context });

await Promise.all(Object.values(task));

Expand Down
8 changes: 0 additions & 8 deletions packages/cli/src/merkurConfig.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -134,14 +134,6 @@ emitter.on(
);
});

if (runTasks.length !== 0) {
Object.keys(merkurConfig.task)
.filter((taskName) => !runTasks.includes(taskName))
.forEach((taskKey) => {
delete merkurConfig.task[taskKey];
});
}

return merkurConfig;
},
);
Expand Down
40 changes: 40 additions & 0 deletions packages/cli/src/runBuild.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import fs from 'node:fs/promises';

import esbuild from 'esbuild';
import { createLogger } from './logger.mjs';

export async function runBuild({ cliConfig, build, config }) {
const logger = createLogger(undefined, cliConfig);
const { watch } = cliConfig;

//es6 === es2015, es9 === es2018, es11 === es2020 es13 ===es2022
try {
const result = await (watch
? esbuild.context(build)
: esbuild.build(build));

if (config.analyze && result.metafile) {
logger.log(
await esbuild.analyzeMetafile(result.metafile, {
verbose: cliConfig.verbose,
}),
);

if (build.outdir) {
await fs.writeFile(
`${build.outdir}/${build.entryNames ?? config.name}.meta.json`,
JSON.stringify(result.metafile),
);
}
}

if (watch) {
await result.watch();
}

return result;
} catch (error) {
console.error(error);
process.exit(1);
}
}
70 changes: 37 additions & 33 deletions packages/cli/src/runTask.mjs
Original file line number Diff line number Diff line change
@@ -1,40 +1,44 @@
import fs from 'node:fs/promises';
import { createBuildConfig } from './buildConfig.mjs';
import { createTaskConfig } from './taskConfig.mjs';
import { runBuild } from './runBuild.mjs';

import esbuild from 'esbuild';
import { createLogger } from './logger.mjs';
export async function runTask({ cliConfig, merkurConfig, context }) {
const { runTasks } = cliConfig;
let task = { ...merkurConfig.task };

export async function runTask({ cliConfig, build, config }) {
const logger = createLogger(undefined, cliConfig);
const { watch } = cliConfig;

//es6 === es2015, es9 === es2018, es11 === es2020 es13 ===es2022
try {
const result = await (watch
? esbuild.context(build)
: esbuild.build(build));

if (config.analyze && result.metafile) {
logger.log(
await esbuild.analyzeMetafile(result.metafile, {
verbose: cliConfig.verbose,
}),
);
if (runTasks.length !== 0) {
Object.keys(task)
.filter((taskName) => !runTasks.includes(taskName))
.forEach((taskKey) => {
delete task[taskKey];
});
}

if (build.outdir) {
await fs.writeFile(
`${build.outdir}/${build.entryNames ?? config.name}.meta.json`,
JSON.stringify(result.metafile),
);
}
}
return Object.keys(task).reduce(async (result, key) => {
const definition = task[key];

if (watch) {
await result.watch();
}
const config = await createTaskConfig({
definition,
merkurConfig,
cliConfig,
context,
});
const build = await createBuildConfig({
definition,
config,
merkurConfig,
cliConfig,
context,
});
result[definition.name] = await runBuild({
definition,
build,
merkurConfig,
cliConfig,
config,
context,
});

return result;
} catch (error) {
console.error(error);
process.exit(1);
}
}, context.task);
}
5 changes: 1 addition & 4 deletions packages/cli/types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,4 @@ export interface MerkurConfig {
}) => Partial<BuildOptions>;
}

export function defineConfig({
merkurConfig: MerkurConfig,
cliConfig: CLIConfig,
}): Partial<MerkurConfig>;
export function defineConfig({ cliConfig: CLIConfig }): Partial<MerkurConfig>;
2 changes: 1 addition & 1 deletion packages/create-widget/views/preact/template.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"dependencies": {
"@merkur/preact": "0.36.0"
"@merkur/preact": "0.37.0"
},
"devDependencies": {
"@testing-library/jest-dom": "^6.5.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/create-widget/views/svelte/template.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"dependencies": {
"@merkur/svelte": "0.36.0"
"@merkur/svelte": "0.37.0"
},
"devDependencies": {}
}
2 changes: 1 addition & 1 deletion packages/create-widget/views/uhtml/template.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"dependencies": {
"@merkur/uhtml": "0.36.0"
"@merkur/uhtml": "0.37.0"
},
"devDependencies": {}
}

0 comments on commit de74901

Please sign in to comment.