prepin

An in-place pre-processor for javascript files using C style pre-compile syntax to compose custom builds from npm-packages

Usage no npm install needed!

<script type="module">
  import prepin from 'https://cdn.skypack.dev/prepin';
</script>

README

prepin

An in-place pre-processor for javascript files using C style pre-compile syntax to compose custom builds from npm-packages.

NPM version

Pre-processors found on npm require a different file for outputting processed changes. This is not ideal for in-place custom builds on already published packages. This pre-processors main purpose is to allow reduction of package size for e.g. single-page apps on not requiring modules based on macros given at transpile time.

Syntax

Follows C style pre-compiler syntax but requires // right in front to work in .js files.

// #if expression             // e.g. // #if macro == 1
// #if defined(macro)
// #ifdef macro
// #ifndef macro
// #elif expression           // e.g. // #elif macro == 2
// #else
// #endif
// # is a commented line

Example

Let's assume a example/sample.js file, which includes a package of large size which is required for a specific task is not used in a smaller custom build...

The original file:

// #ifndef small
const big = require('./big-package')
// #else
// # let big // define the alternative
// #endif

if (big) {
  // ...
}

If processing with prepin -m small sample.js you'll get:

// #ifndef small
// # const big = require('./big-package')
// #else
let big // define the alternative
// #endif

if (big) {
  // ...
}

CLI

prepin [options] [file]

Options:

  -m macro=1    define macro
  -o <output>   write output to file

Examples:

  cat sample.js | prepin -m small
      reads from stdin and transpiles using macro "small", writes to stdout.

  prepin -m small=1 -m other sample.js
      pre-process with macros small=1, other on sample.js

API

const Prepin = require('prepin')

const opts = {macros: {small: true}, input: 'sample.js', output: 'sample.js'}

new Prepin(opts).proc().catch((e) => console.error(e))

License

UNLICENSE