ng-implementation/my-workspace/projects/sae-lib/node_modules/shepherd.js/rollup.config.mjs
2025-08-08 10:57:00 +02:00

205 lines
5.4 KiB
JavaScript

import autoprefixer from 'autoprefixer';
import { execaCommand } from 'execa';
import fs from 'fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import cssnanoPlugin from 'cssnano';
import { babel } from '@rollup/plugin-babel';
import serve from 'rollup-plugin-serve';
import livereload from 'rollup-plugin-livereload';
import filesize from 'rollup-plugin-filesize';
import license from 'rollup-plugin-license';
import postcss from 'rollup-plugin-postcss';
import replace from '@rollup/plugin-replace';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import sveltePreprocess from 'svelte-preprocess';
import svelte from 'rollup-plugin-svelte';
import { visualizer } from 'rollup-plugin-visualizer';
import { emitDts } from 'svelte2tsx';
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
const banner = ['/*!', pkg.name, pkg.version, '*/\n'].join(' ');
const env = process.env.DEVELOPMENT ? 'development' : 'production';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const plugins = [
svelte({
preprocess: sveltePreprocess({
typescript: true
}),
emitCss: true
}),
nodeResolve({
browser: true,
exportConditions: ['svelte'],
extensions: ['.js', '.json', '.mjs', '.svelte', '.ts'],
modulesOnly: true
}),
replace({
'process.env.NODE_ENV': JSON.stringify(env)
}),
babel({
extensions: ['.cjs', '.js', '.ts', '.mjs', '.html', '.svelte']
}),
postcss({
plugins: [autoprefixer, cssnanoPlugin],
extract: 'css/shepherd.css'
}),
license({
banner
}),
filesize(),
visualizer()
];
// If we are running with --environment DEVELOPMENT, serve via browsersync for local development
if (process.env.DEVELOPMENT) {
plugins.push(serve({ contentBase: ['.', 'dist', 'dummy'], open: true }));
plugins.push(livereload());
}
export default [
{
input: 'src/shepherd.ts',
output: {
dir: 'tmp/esm',
entryFileNames: '[name].mjs',
format: 'es',
sourcemap: true
},
plugins: [
{
name: 'Build Declarations',
buildStart: async () => {
console.log('Generating Svelte declarations for ESM');
await emitDts({
svelteShimsPath: import.meta.resolve(
'svelte2tsx/svelte-shims-v4.d.ts'
),
declarationDir: 'tmp/esm'
});
console.log('Rename .svelte.d.ts to .d.svelte.ts');
await execaCommand(
`renamer --find .svelte.d.ts --replace .d.svelte.ts tmp/esm/**`,
{
stdio: 'inherit'
}
);
}
},
...plugins,
{
name: 'After build tweaks',
closeBundle: async () => {
console.log('Copying CSS to the root');
await execaCommand(`mkdir -p ./dist/css`, {
stdio: 'inherit'
});
await execaCommand(
`cp ./tmp/esm/css/shepherd.css ./dist/css/shepherd.css`,
{
stdio: 'inherit'
}
);
console.log('Rollup TS declarations to one file');
await execaCommand(
`pnpm dts-bundle-generator --no-check -o ./dist/esm/shepherd.d.mts ./tmp/esm/shepherd.d.ts`,
{
stdio: 'inherit'
}
);
console.log('Move shepherd.js from tmp to dist');
await execaCommand(
`mv ./tmp/esm/shepherd.mjs ./tmp/esm/shepherd.mjs.map ./dist/esm/`,
{
stdio: 'inherit'
}
);
}
}
]
},
{
input: 'src/shepherd.ts',
output: {
dir: 'tmp/cjs',
entryFileNames: '[name].cjs',
format: 'cjs',
sourcemap: true
},
plugins: [
{
name: 'Build Declarations',
buildStart: async () => {
console.log('Generating Svelte declarations for CJS');
await emitDts({
svelteShimsPath: import.meta.resolve(
'svelte2tsx/svelte-shims-v4.d.ts'
),
declarationDir: 'tmp/cjs'
});
console.log('Rename .svelte.d.ts to .d.svelte.ts');
await execaCommand(
`renamer --find .svelte.d.ts --replace .d.svelte.ts tmp/cjs/**`,
{
stdio: 'inherit'
}
);
}
},
...plugins,
{
name: 'After build tweaks',
closeBundle: async () => {
console.log('Rollup TS declarations to one file');
await execaCommand(
`pnpm dts-bundle-generator --no-check -o ./dist/cjs/shepherd.d.cts ./tmp/cjs/shepherd.d.ts`,
{
stdio: 'inherit'
}
);
console.log('Move shepherd.js from tmp to dist');
await execaCommand(
`mv ./tmp/cjs/shepherd.cjs ./tmp/cjs/shepherd.cjs.map ./dist/cjs/`,
{
stdio: 'inherit'
}
);
console.log('Fix CJS export default -> export =');
const declarationFile = path.join(
__dirname,
'dist/cjs',
'shepherd.d.cts'
);
let content = fs.readFileSync(declarationFile, 'utf8');
content = content.replace(
/export {[\n\r]+[ \t]+Shepherd as default,[\n\r]};/g,
'export = Shepherd;'
);
fs.writeFileSync(declarationFile, content);
}
}
]
}
];