@metalsmith/js-bundle
Version:
A metalsmith plugin that bundles your JS using esbuild
1 lines • 13.6 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/es5.js","../src/index.js"],"sourcesContent":["import { transform, loadOptions } from '@babel/core'\n\nexport default function es5PluginInit() {\n return function es5Plugin(files, ms, done) {\n const isDev = ms.env('NODE_ENV') === 'development'\n const transforms = []\n const options = loadOptions({\n envName: ms.env('NODE_ENV'),\n presets: [\n [\n '@babel/preset-env',\n {\n useBuiltIns: 'entry',\n corejs: '3.22'\n }\n ]\n ],\n targets: '> 0.25%, not dead',\n minified: !isDev,\n comments: isDev,\n cwd: ms.directory()\n //inputSourceMap\n })\n Object.values(files).forEach((file) => {\n if (file.__babelPostProcess) {\n transforms.push(\n new Promise((resolve, reject) => {\n transform(file.contents.toString(), options, (err, result) => {\n if (err) reject(err)\n file.contents = Buffer.from(result.code)\n delete file.__babelPostProcess\n resolve()\n })\n })\n )\n }\n })\n Promise.all(transforms)\n .then(() => done())\n .catch(done)\n }\n}\n","import { build } from 'esbuild'\nimport { relative, extname } from 'path'\nimport es5Plugin from './es5.js'\n\nconst debugNs = '@metalsmith/js-bundle'\n\n/**\n * @typedef {import('esbuild').BuildOptions} Options\n */\n\n/**\n * Normalize plugin options\n * @param {Options} [options]\n * @param {import('metalsmith').Metalsmith} metalsmith\n * @returns {Object}\n */\nfunction normalizeOptions(options = {}, metalsmith, debug) {\n const entryPoints = options.entries || {}\n const msDir = metalsmith.directory()\n const isProd = metalsmith.env('NODE_ENV') !== 'development'\n const define = Object.entries(options.define || metalsmith.env()).reduce((acc, [name, value]) => {\n if (typeof value === 'undefined') {\n debug.warn('Define option \"%s\" value is undefined', name)\n acc[`process.env.${name}`] = 'undefined'\n return acc\n }\n // see notes at https://esbuild.github.io/api/#define, string values require explicit quotes\n acc[`process.env.${name}`] =\n typeof value === 'string'\n ? `'${value}'`\n : ['boolean', 'number', 'function'].includes(typeof value)\n ? value.toString()\n : JSON.stringify(value)\n return acc\n }, {})\n\n /** @type {Options} */\n const defaults = {\n bundle: true,\n minify: isProd,\n sourcemap: !isProd,\n platform: 'browser',\n target: 'es6',\n assetNames: '[dir]/[name]',\n drop: isProd ? ['console', 'debugger'] : []\n }\n\n /** @type {Options} */\n const overwrites = {\n entryPoints,\n absWorkingDir: msDir,\n outdir: relative(msDir, metalsmith.destination()),\n write: false,\n metafile: true,\n define\n }\n\n // eslint-disable-next-line no-unused-vars\n const { entries, ...otherOptions } = options\n\n return {\n ...defaults,\n ...otherOptions,\n ...overwrites\n }\n}\n\n/**\n * A metalsmith plugin that bundles your JS using [esbuild](https://esbuild.github.io)\n * @example\n *\n * metalsmith.use(\n * jsBundle({ entries: {\n * index: 'lib/index.js',\n * 'second/src/file': 'second/bundle/output.js'\n * }})\n * )\n * @param {Options} options\n * @returns {import('metalsmith').Plugin}\n */\nfunction initJsBundle(options = {}) {\n // esbuild does not support ES5 compilation\n // to avoid it throw an error, force at least ES6 and let esbuild do all the bundling, then postprocess and minify with babel\n let babelPostProcess = false\n if (options.target === 'es5') {\n babelPostProcess = true\n options.target = 'es6'\n options.minify = false\n }\n\n return function jsBundle(files, metalsmith, done) {\n const debug = metalsmith.debug(debugNs)\n const normalizedOptions = normalizeOptions(options, metalsmith, debug)\n const entrypoints = normalizedOptions.entryPoints\n\n debug('Running with options %O', normalizedOptions)\n if (Object.keys(entrypoints).length === 0) {\n debug.warn('No files to process, skipping.')\n done()\n return\n }\n\n const src = metalsmith.source()\n const dest = metalsmith.destination()\n\n const isFullyInSource = Object.values(entrypoints).every((sourcepath) => {\n return metalsmith.path(sourcepath).startsWith(src)\n })\n\n if (isFullyInSource) {\n debug.info('All entries to bundle are in metalsmith.source(), setting `outbase` to metalsmith.source()')\n normalizedOptions.outbase = src\n }\n\n normalizedOptions.entryPoints = Object.entries(entrypoints).reduce((mapped, current) => {\n const [dest, src] = current\n mapped[dest] = src\n return mapped\n }, {})\n\n const sourceRelPath = relative(metalsmith.directory(), src)\n\n build(normalizedOptions)\n .then((result) => {\n // the lines below until #L138 must be revisited, they can definitely be simplified.\n // esbuild outputFiles return absolute paths, while metafile.outputs has a { 'output/path': { inputs: { 'input/path' }, imports: {...}}} format\n // furthermore it looks like 'file' loader inputs will NOT be removed from the build\n debug(\n 'Finished processing files %O',\n result.outputFiles.map((o) => relative(dest, o.path))\n )\n\n // first read esbuild metafile to remove the compilation inputs from the build\n Object.values(result.metafile.outputs).forEach((o) => {\n if (o.inputs) {\n metalsmith.match(`${sourceRelPath}/**`, Object.keys(o.inputs)).forEach((input) => {\n delete files[relative(src, metalsmith.path(input))]\n })\n }\n })\n\n debug('Adding processed files to build')\n result.outputFiles.forEach((file) => {\n // strip the metalsmith.destination()\n const destPath = relative(dest, file.path)\n\n files[destPath] = {\n contents: Buffer.from(file.contents.buffer)\n }\n if (babelPostProcess && extname(destPath) === '.js') {\n files[destPath].__babelPostProcess = true\n }\n })\n\n if (babelPostProcess) {\n debug('Post-processing with babel')\n es5Plugin()(files, metalsmith, done)\n } else {\n done()\n }\n })\n .catch((err) => {\n done(err)\n })\n }\n}\n\nexport default initJsBundle\n"],"names":["es5PluginInit","es5Plugin","files","ms","done","isDev","env","transforms","options","loadOptions","envName","presets","useBuiltIns","corejs","targets","minified","comments","cwd","directory","Object","values","forEach","file","__babelPostProcess","push","Promise","resolve","reject","transform","contents","toString","err","result","Buffer","from","code","all","then","catch","debugNs","normalizeOptions","metalsmith","debug","entryPoints","entries","msDir","isProd","define","reduce","acc","name","value","warn","includes","JSON","stringify","defaults","bundle","minify","sourcemap","platform","target","assetNames","drop","overwrites","absWorkingDir","outdir","relative","destination","write","metafile","otherOptions","initJsBundle","babelPostProcess","jsBundle","normalizedOptions","entrypoints","keys","length","src","source","dest","isFullyInSource","every","sourcepath","path","startsWith","info","outbase","mapped","current","sourceRelPath","build","outputFiles","map","o","outputs","inputs","match","input","destPath","buffer","extname"],"mappings":"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"}