Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
84 lines
3.1 KiB
Text
84 lines
3.1 KiB
Text
import path from 'path'
|
|
import fs from 'fs'
|
|
import * as esbuild from 'esbuild'
|
|
|
|
export function NodeGlobalsPolyfillPlugin({
|
|
buffer = false,
|
|
// define = {},
|
|
process = true,
|
|
} = {}): esbuild.Plugin {
|
|
return {
|
|
name: 'node-globals-polyfill',
|
|
setup({ initialOptions, onResolve, onLoad }) {
|
|
onResolve({ filter: /_node-buffer-polyfill_\.js/ }, (arg) => {
|
|
return {
|
|
path: path.resolve(__dirname, '../Buffer.js'),
|
|
}
|
|
})
|
|
onResolve({ filter: /_node-process-polyfill_\.js/ }, (arg) => {
|
|
return {
|
|
path: path.resolve(__dirname, '../process.js'),
|
|
}
|
|
})
|
|
|
|
// TODO esbuild cannot use virtual modules for inject: https://github.com/evanw/esbuild/issues/2762
|
|
// onLoad({ filter: /_virtual-process-polyfill_\.js/ }, (arg) => {
|
|
// const data = fs
|
|
// .readFileSync(path.resolve(__dirname, '../process.js'))
|
|
// .toString()
|
|
|
|
// const keys = Object.keys(define)
|
|
// return {
|
|
// loader: 'js',
|
|
// contents: data.replace(
|
|
// `const defines = {}`,
|
|
// 'const defines = {\n' +
|
|
// keys
|
|
// .filter((x) => x.startsWith('process.'))
|
|
// .sort((a, b) => a.length - b.length)
|
|
// .map(
|
|
// (k) =>
|
|
// ` ${JSON.stringify(k).replace(
|
|
// 'process.',
|
|
// '',
|
|
// )}: ${define[k]},`,
|
|
// )
|
|
// .join('\n') +
|
|
// '\n}',
|
|
// ),
|
|
// }
|
|
// })
|
|
onResolve({ filter: /_virtual-process-polyfill_\.js/ }, () => {
|
|
return {
|
|
path: path.resolve(__dirname, '../process.js'),
|
|
}
|
|
})
|
|
onResolve({ filter: /_virtual-buffer-polyfill_\.js/ }, () => {
|
|
return {
|
|
path: path.resolve(__dirname, '../_buffer.js'),
|
|
}
|
|
})
|
|
|
|
const polyfills: string[] = []
|
|
if (process) {
|
|
polyfills.push(
|
|
path.resolve(__dirname, '../_virtual-process-polyfill_.js'),
|
|
)
|
|
}
|
|
if (buffer) {
|
|
polyfills.push(
|
|
path.resolve(__dirname, '../_virtual-buffer-polyfill_.js'),
|
|
)
|
|
}
|
|
if (initialOptions.inject) {
|
|
initialOptions.inject.push(...polyfills)
|
|
// handle duplicate plugin
|
|
initialOptions.inject = [...new Set(initialOptions.inject)]
|
|
} else {
|
|
initialOptions.inject = [...polyfills]
|
|
}
|
|
},
|
|
}
|
|
}
|
|
|
|
export default NodeGlobalsPolyfillPlugin
|