3.2.0 • Published 5 months ago

bitumen v3.2.0

Weekly downloads
-
License
BSD-2-Clause
Repository
github
Last release
5 months ago

Overview

bitumen is a collection of utilities, types, and opinionated configuration for Babel, ESLint, Rollup, TypeScript, and Vitest.

Supported Environments

  • Client side: Last two versions of Chrome, Edge, Firefox (+ ESR), and Safari
  • Server side: Maintained versions of Node.js

Usage

Configuration

Babel

  • Targets maintained versions of Node.js and the last two versions of Chrome, Edge, Firefox (+ ESR), and Safari;
  • transpiles TypeScript to JavaScript and rewrites import extensions .?(c|m)ts?(x) → .?(c|m)js;
  • preserves ECMAScript modules (i.e. no CommonJS conversion); and
  • enables support for import attributes.

Option 1: šŸ“ package.json

{
  "babel": {
    "extends": "bitumen/configuration/babel"
  }
}

Option 2: šŸ“ babel.config.js

import base from 'bitumen/configuration/babel';

export default {
  ...base,
  // custom configuration and overrides
};

ESLint

Configuration for JavaScript, TypeScript, and optionally React, based on:

PluginPreset(s)
@eslint/jsrecommended
@typescript-eslintstrict-type-checked, stylistic-type-checked
eslint-plugin-import-xrecommended, typescript
eslint-plugin-reactall
eslint-plugin-react-hooksrecommended

šŸ“ .eslintrc.cjs

const base = require('bitumen/configuration/eslint');
const react = require('bitumen/configuration/eslint-react');

/** @type {import('eslint').Linter.Config} */
module.exports = {
  ...base,
  ...react,
  // custom configuration and overrides
};

Rollup

šŸ“ rollup.config.js

import configure from 'bitumen/configuration/rollup';

import packageJson from './package.json';

export default configure(packageJson);

configure() returns a configuration object which:

  • Reads entry points from package.json's exports field (no conditionals, null targets, or patterns).
  • Writes distributable output to DIST_PATH, mirroring the directory structure of BUILD_PATH.
  • Writes CommonJS modules to .cjs files and ES modules to .js files.
  • Excludes test directories __mocks__, __tests__ from the output.
  • Copies Sass stylesheets (.scss) from SRC_PATH to DIST_PATH.
  • Copies TypeScript type declarations (.d.ts) from BUILD_PATH to DIST_PATH, giving them a .d.ts extension for ESM and a .d.cts extension for CommonJS.

The following environment variables must be set at runtime:

  • BUILD_PATH: Where Babel and tsc output files can be found.
  • DIST_PATH: Where Rollup is to write its distributable output.
  • FORMAT: Type of modules to output; either 'es' (ESM) or 'cjs' (CommonJS).
  • SRC_PATH: Where the original source code is located.

TypeScript

šŸ“ tsconfig.json

{
  "extends": "bitumen/configuration/typescript",
  // custom configuration and overrides
}

Vitest

  • Automatically clears mocks after each test,
  • enables globals for automatic DOM clean-up between UI tests,
  • looks for tests and mocks under ./src,
  • requires 100% istanbul coverage,
  • turns off watch mode by default, and
  • uses thread workers for reduced overhead.

šŸ“ vitest.config.js

import base from 'bitumen/configuration/vitest';

/** @type {import('vitest/config').UserConfig} */
export default {
  ...base,
  // custom configuration and overrides
};

Library

bitumen exposes named exports from the following entry points:

  • collections
  • configuration
  • mixins
  • types
  • utils

For example, to implement SortedSet from collections:

import {SortedSet} from 'bitumen/collections';

const set = new SortedSet();

Type Declarations

For proper module and type resolution, set option compilerOptions.module to 'NodeNext' in jsconfig.json or tsconfig.json.

šŸ’” bitumen's TypeScript configuration is already set up this way.

3.2.0

5 months ago

3.1.0

10 months ago

3.0.0

10 months ago

2.3.0

1 year ago

2.2.0

1 year ago

2.1.0

2 years ago

1.2.0

2 years ago

1.1.0

2 years ago

2.0.0

2 years ago

1.0.0

2 years ago

0.10.0

2 years ago

0.11.0

2 years ago

0.9.0

2 years ago

0.8.0

2 years ago

0.7.0

3 years ago

0.3.0

3 years ago

0.5.0

3 years ago

0.4.0

3 years ago

0.3.1

3 years ago

0.6.1

3 years ago

0.6.0

3 years ago

0.2.1

3 years ago

0.2.0

3 years ago

0.1.1

3 years ago

0.1.0

3 years ago