npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@x-configs/rollup-config

v0.0.29

Published

A Rollup helper for defining configs when bundling packages.

Downloads

12

Readme

@x-configs/rollup-config

A Rollup helper for defining configs when bundling packages.

Install

npm i -D @x-configs/rollup-config

Usage

function defineJsConfig(pkg: PackageJson, opts?: JsOptions): RollupOptions;
function defineDtsConfig(pkg: PackageJson, opts?: DtsOptions): RollupOptions;


/**
 * A valid `picomatch` glob pattern, or array of patterns.
 */
type JsOptions = {
    /**
     * The root directory to output.
     */
    dest?: string;
    /**
     * The bundle's entry points (e.g. your main.js or app.js or index.js).
     * @default 'src/index.ts'
     * @see {@link https://rollupjs.org/configuration-options/#input }
     */
    input?: string;
    /**
     * @see {@link https://rollupjs.org/configuration-options/#output-name }
     */
    output?: {
        /**
         * Necessary for iife/umd bundles that exports values in which case it is the global variable name representing your bundle.
         * Other scripts on the same page can use this variable name to access the exports of your bundle.
         * @see {@link https://rollupjs.org/configuration-options/#name }
         */
        name?: string;
        /**
         * If `true`, a separate sourcemap file will be created.
         * If `"inline"`, the sourcemap will be appended to the resulting `output` file as a data URI.
         * If `"hidden"` works like `true` except that the corresponding sourcemap comments in the bundled files are suppressed.
         * @see {@link https://rollupjs.org/configuration-options/#output-sourcemap }
         */
        sourcemap?: boolean | 'inline' | 'hidden';
        /**
         * By default, sourcemap files generated by Rollup uses relative URLs to reference the files they describe.
         * By providing an absolute base URL, e.g. `https://example.com`, sourcemaps will use absolute URLs instead.
         * @see {@link https://rollupjs.org/configuration-options/#output-sourcemapbaseurl }
         */
        sourcemapBaseUrl?: string;
        /**
         * What export mode to use. Defaults to `auto`, which guesses your intentions based on what the `input` module exports.
         * @default 'auto'
         * @see {@link https://rollupjs.org/configuration-options/#output-exports }
         */
        exports?: OutputOptions['exports'];
        /**
         * This will minify the wrapper code generated by rollup. Note that this does not affect code written by the user. This option is useful when bundling pre-minified code.
         * @see {@link https://rollupjs.org/configuration-options/#output-compact }
         */
        compact?: boolean;
        /**
         * Whether to extend the global variable defined by the `name` option in `umd` or `iife` formats.
         * When `true`, the global variable will be defined as (`global.name = global.name || {}`).
         * When `true`, the global defined by `name` will be overwritten like (`global.name = {}`).
         * @see {@link https://rollupjs.org/configuration-options/#output-extend }
         */
        extend?: boolean;
        /**
         * Re-parses each generated chunk to detect if the generated code is valid JavaScript.
         * This can be useful to debug output generated by plugins that use the `renderChunk` hook to transform code.
         * @see {@link https://rollupjs.org/configuration-options/#output-validate }
         */
        validate?: boolean;
        /**
         * Which language features Rollup can safely use in generated code.
         * This will not transpile any user code but only change the code Rollup uses in wrappers and helpers.
         *
         * @see {@link https://rollupjs.org/configuration-options/#output-generatedcode }
         */
        generatedCode?: OutputOptions['generatedCode'];
        /**
         * A string to `prepend` to the bundle.
         * You can also supply a function that returns a Promise that resolves to a string to generate it asynchronously (Note: `banner` and `footer` options will not break sourcemaps)
         * @see {@link https://rollupjs.org/configuration-options/#output-banner-output-footer }
         */
        banner?: OutputOptions['banner'];
        /**
         * A string to `append` to the bundle.
         * You can also supply a function that returns a Promise that resolves to a string to generate it asynchronously (Note: `banner` and `footer` options will not break sourcemaps)
         * @see {@link https://rollupjs.org/configuration-options/#output-banner-output-footer }
         */
        footer?: OutputOptions['footer'];
        /**
         * Similar to `output.banner`, except that the code goes inside any format-specific wrapper.
         * @see {@link https://rollupjs.org/configuration-options/#output-intro-output-outro }
         */
        intro?: OutputOptions['intro'];
        /**
         * Similar to `output.footer`, except that the code goes inside any format-specific wrapper.
         * @see {@link https://rollupjs.org/configuration-options/#output-intro-output-outro }
         */
        outro?: OutputOptions['outro'];
        /**
         * Specifies id: variableName pairs necessary for external imports in umd/iife bundles.
         * @see {@link https://rollupjs.org/configuration-options/#output-globals }
         */
        globals?: OutputOptions['globals'];
    };
    /**
     * Specifies the format of the generated bundle: `cjs`, `esm`, `iife`, `umd`
     * @see {@link https://rollupjs.org/configuration-options/#output-format }
     */
    formats?: {
        cjs?: boolean;
        esm?: boolean;
        iife?: boolean;
        umd?: boolean;
    };
    /**
     * Which language features Rollup can safely use in generated code.
     * This will not transpile any user code but only change the code Rollup uses in wrappers and helpers.
     *
     * @default
     * { arrowFunctions: true, constBindings: true }
     *
     * @see {@link https://rollupjs.org/configuration-options/#output-generatedcode }
     */
    generatedCode?: 'es5' | 'es2015' | {
        /**
         * Whether to use arrow functions for auto-generated code snippets.
         * Note that in certain places like module wrappers, Rollup will keep using regular functions wrapped in parentheses as in some JavaScript engines, these will provide noticeably better performance.
         * @see {@link https://rollupjs.org/configuration-options/#output-generatedcode-arrowfunctions }
         */
        arrowFunctions?: boolean;
        /**
         * This will use `const` instead of `å` in certain places and helper functions.
         * This will allow Rollup to generate more efficient helpers due to block scoping.
         * @see {@link https://rollupjs.org/configuration-options/#output-generatedcode-constbindings }
         */
        constBindings?: boolean;
        /**
         * Allows the use of shorthand notation in objects when the property name matches the value.
         * @see {@link https://rollupjs.org/configuration-options/#output-generatedcode-objectshorthand }
         */
        objectShorthand?: boolean;
        /**
         * Determine whether reserved words like "default" can be used as prop names without using quotes.
         * This will make the syntax of the generated code ES3 compliant.
         * Note however that for full ES3 compliance, you may also need to polyfill some builtin functions like `Object.keys` or `Array.prototype.forEach`.
         * @default true
         * @see {@link https://rollupjs.org/configuration-options/#output-generatedcode-reservednamesasprops }
         */
        reservedNamesAsProps?: boolean;
        /**
         * Allows choosing one of the presets listed above while overriding some options.
         * @see {@link https://rollupjs.org/configuration-options/#output-generatedcode-preset }
         */
        preset?: 'es5' | 'es2015';
        /**
         * Whether to allow the use of `Symbol` in auto-generated code snippets.
         * Currently, this only controls if namespaces will have the `Symbol.toStringTag` property set to the correct value of Module, which means that for a namespace, `String(namespace)` logs `[object Module]`. This again is used for feature detection in certain libraries and frameworks.
         * @see {@link https://rollupjs.org/configuration-options/#output-generatedcode-symbols }
         */
        symbols?: boolean;
    };
    /**
     * Either a function that takes an id and returns true (external) or true (not external), or an Array of module IDs, or regular expressions to match module IDs, that should remain external to the bundle. Can also be just a single ID or regular expression.
     * @see {@link https://rollupjs.org/configuration-options/#external }
     */
    external?: ExternalOption;
    /**
     * Specifies id: variableName pairs necessary for external imports in umd/iife bundles.
     * @see {@link https://rollupjs.org/configuration-options/#output-globals }
     */
    globals?: OutputOptions['globals'];
    /**
     * Path to the tsconfig path to use
     * @default './tsconfig.json'
     */
    tsconfig?: string;
    plugins?: {
        /**
         * A Rollup plugin for seamless integration between Rollup and Typescript.
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-typescript#options }
         */
        typescript?: RollupTypescriptOptions;
        /**
         * A Rollup plugin which replaces targeted strings in files while bundling.
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-replace#options }
         */
        replace?: RollupReplaceOptions;
        /**
         * A Rollup plugin to convert CommonJS modules to ES6, so they can be included in a Rollup bundle
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-commonjs#options }
         */
        commonjs?: boolean | RollupCommonJSOptions;
        /**
         * A Rollup plugin which locates modules using the `Node resolution algorithm`, for using third party modules in node_modules
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-node-resolve#options }
         */
        nodeResolve?: RollupNodeResolveOptions;
        /**
         * A Rollup plugin which Converts .json files to ES6 modules.
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-json#options }
         */
        json?: boolean | RollupJsonOptions;
        /**
         * A Rollup plugin to generate a minified bundle with terser.
         * The plugin accepts a terser Options object as input parameter, to modify the default behaviour.
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-terser#options }
         * @see {@link https://github.com/terser/terser#minify-options }
         * @see {@link https://terser.org/docs/options/ }
         */
        terser?: boolean | Options;
        /**
         * A Rollup plugin for defining aliases when bundling packages.
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-alias#options }
         */
        alias?: RollupAliasOptions;
        /**
         * A Rollup plugin to remove debugger statements and functions like assert.equal and console.log from your code.
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-strip#options }
         */
        strip?: boolean | RollupStripOptions;
    };
};

/**
 * DtsOptions
 */
type DtsOptions = {
    /**
     * The root directory to output.
     */
    dest?: string;
    /**
     * The entry file
     * @default 'src/index.ts'
     */
    input?: string;
    /**
     * The `dts` file to output
     * @default pkg.types || pkg.exports?.types || 'lib/index.d.ts'
     */
    output?: string;
    /**
     * Either a function that takes an id and returns true (external) or true (not external), or an Array of module IDs, or regular expressions to match module IDs, that should remain external to the bundle. Can also be just a single ID or regular expression.
     * @see {@link https://rollupjs.org/configuration-options/#external }
     */
    external?: ExternalOption;
    plugins?: {
        /**
         * This is a plugin that lets you roll-up your `.d.ts` definition files.
         * @see {@link https://www.npmjs.com/package/rollup-plugin-dts }
         */
        dts?: Options$1;
        /**
         * A Rollup plugin which replaces targeted strings in files while bundling.
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-replace#options }
         */
        replace?: RollupReplaceOptions;
        /**
         * A Rollup plugin for defining aliases when bundling packages.
         * @see {@link https://www.npmjs.com/package/@rollup/plugin-alias#options }
         */
        alias?: RollupAliasOptions;
    };
}

Examples

import { env } from 'node:process';
import { readFileSync } from 'node:fs';
import { defineJsConfig, defineDtsConfig } from '@x-configs/rollup-config';

const pkgJson = JSON.parse(readFileSync('./package.json', 'utf-8'));
const isDevEnv = /^dev/i.test(env.NODE_ENV);

const input = 'src/index.ts';
const dest = isDevEnv ? `../../dev/${pkgJson.name}` : `../../prod/${pkgJson.name}`;

// plugins
const plugins = {
  terser: isDevEnv
    ? false
    : {
        compress: {
          ecma: 2022,
        },
        mangle: {},
        format: {
          comments: 'some',
        },
      },
};

const configs = [
  defineJsConfig(pkgJson, {
    dest,
    input,
    output: {
      sourcemap: isDevEnv,
    },
    plugins,
  }),

  defineDtsConfig(pkgJson, {
    input,
    output: 'lib/index.d.ts',
    dest,
  }),
];

export default configs;