Skip to content

Commit

Permalink
docs(bundler): add some docs to bundler.js
Browse files Browse the repository at this point in the history
  • Loading branch information
hulxv committed Sep 22, 2024
1 parent 36091a5 commit 9593490
Showing 1 changed file with 30 additions and 19 deletions.
49 changes: 30 additions & 19 deletions crates/metassr-bundler/src/bundle.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
const { rspack } = require('@rspack/core');
const path = require('path');

/**
* Safely parses a JSON string, returning undefined if parsing fails.
* @param {string} json - The JSON string to parse.
* @returns {Object|undefined} - Parsed object or undefined if parsing fails.
*/
function safelyParseJSON(json) {
try {
return JSON.parse(json)
return JSON.parse(json);
} catch (_) {
return undefined
return undefined;
}
}

// Default configuration object for rspack bundling process
let config = {

output: {
Expand Down Expand Up @@ -82,39 +88,44 @@ let config = {
},
],

}
}

/**
* Bundles web resources using rspack.
* @param {Object|string} entry - The entry point(s) for the bundling process (can be a string or JSON object).
* @param {string} dist - The distribution path where bundled files will be output.
* @returns {Promise} - Resolves when bundling is successful, rejects if there is an error.
*/
async function web_bundling(entry, dist) {

// Create a bundler instance using the config and parameters
const compiler = rspack(
{
...config,
entry: safelyParseJSON(entry) ?? entry,
...config, // Merge with the default config
entry: safelyParseJSON(entry) ?? entry, // Parse entry if it's JSON, otherwise use it as is
output: dist ? {
...config.output,
path: path.join(process.cwd(), dist)
path: path.join(process.cwd(), dist), // Use current working directory and output path
} : config.output,

name: 'Client',
mode: 'development',
devtool: 'source-map',
stats: { preset: 'errors-warnings', timings: true, colors: true },
target: 'web',
// minimize: true,
name: 'Client', // Name of the bundle (Client)
mode: 'production', // Set mode to development (for non-minimized builds)
devtool: 'source-map', // Enable source maps for better debugging
stats: { preset: 'errors-warnings', timings: true, colors: true }, // Customize bundling stats output
target: 'web', // Set the target environment to web (for browser usage)
}

);

// Return a promise that runs the bundling process and resolves or rejects based on the result
return new Promise((resolve, reject) => {
return compiler.run((error, stats) => {
// Handle errors during the bundling process
if (error) {
reject(error.message);
reject(error.message); // Reject with the error message if bundling fails
}

// Check if there are any errors in the bundling stats
if (error || stats?.hasErrors()) {
reject(stats.toString("errors-only"));
reject(stats.toString("errors-only")); // Reject with errors-only details from stats
}
resolve(0);
resolve(0); // Resolve successfully when bundling is complete
});
});
}
Expand Down

0 comments on commit 9593490

Please sign in to comment.