esmpile

0.1.5 • Public • Published

esmpile

Npm package version Npm package monthly downloads License: AGPL v3 Discord

This library allows for you to compile ESM source files using standard import paths. For instance, you can compile [https://raw.githubusercontent.com/garrettmflynn/esmpile/main/src/index.js]!

Resulting bundles support incremental changes and recompilation.

esmpile is a core library of the Brains@Play Framework

Getting Started

The List of Options

const options = {
    collection: 'global', // Specify the bundle name to draw from
    bundler: 'objecturl', // Specify how to bundle the file
    callbacks: {
        progress: {
            fetch:(path, i, total, done, failed, range) => {}, // Fetch-level updates for each file
            file: (path, i, total, done, failed) => {} // File-level updates for each dependency resolution
        }
    },
    debug: true, // Toggle debug messages in the Developer Console 
    fallback: true, // Toggle to fallback to compilation if direct import is not available
    forceNativeImport: false // Override output specifications which require text import
    output: { // Specify which information to output to the user
        text: true, // Use text for module creation and output using onImport
        objecturl: true,
        datauri: true
    },
    relativeTo: import.meta.url // Specify what file the paths are relative to. 
    // If using a bundler for your main JavaScript file, you may have to substitute with window.location.href...
}

Available Extensions

TypeScript

TypeScript support can be enabled by preloading the associated script:

await esm.load.script('./extensions/typescriptServices.min.js');

The extension code has been generated using our TypeScript Services minifier script.

Open Issues

  1. Live Edit Any ES Module: Allow for minimal recompiling of a single module (and dependents) after submitting updated text.

  2. Visualize Code Execution: This project could be extended by es-monitor to visualize the ESM code execution of an application.

  3. Develop a RegExp that handles export * as name from "path" syntax: We have a draft RegExp that extends the existing one for imports—but it stalls when importing self (likely because of the amount of basic exports in the files).

  4. Allow for Any Circular Dependencies: Currently we are falling back to direct imports for files with circular depenencies.

Developer Notes

  1. To maintain compatibility with iOS Safari and Chrome, we have replaced all import assertions with fetch calls and removed lookbehind expressions from regular expressions. This allows the demo to load (at all...) on iOS.

Acknowledgments

This library is maintained by Garrett Flynn, who uses contract work and community contributions through Open Collective to support himself along with others at Brains@Play.

Backers

Support us with a monthly donation and help us continue our activities!

Sponsors

Become a sponsor and get your logo here with a link to your site!

Readme

Keywords

none

Package Sidebar

Install

npm i esmpile

Weekly Downloads

2

Version

0.1.5

License

AGPL-3.0-or-later

Unpacked Size

4.27 MB

Total Files

36

Last publish

Collaborators

  • garrettmflynn