3.2.0 • Published 11 months ago

bitumen v3.2.0

Weekly downloads
-
License
BSD-2-Clause
Repository
github
Last release
11 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

11 months ago

3.1.0

1 year ago

3.0.0

1 year ago

2.3.0

2 years ago

2.2.0

2 years 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

3 years ago

0.10.0

3 years ago

0.11.0

3 years ago

0.9.0

3 years ago

0.8.0

3 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