Socket
Socket
Sign inDemoInstall

interpret

Package Overview
Dependencies
0
Maintainers
2
Versions
42
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    interpret

A dictionary of file extensions and associated module loaders.


Version published
Weekly downloads
19M
decreased by-2.51%
Maintainers
2
Install size
10.2 kB
Created
Weekly downloads
 

Package description

What is interpret?

The interpret npm package is designed to be a dictionary of require extensions and associated file extensions. It allows developers to automatically register the appropriate require extension for files based on their file extensions. This is particularly useful when working with different types of files that need to be required in Node.js applications, such as .coffee, .ts, or .jsx files.

What are interpret's main functionalities?

Registering require extensions

This code retrieves the require extension for TypeScript files, allowing Node.js to understand how to process and import .ts files.

require('interpret').extensions['.ts']

Associating file extensions with custom handlers

This code demonstrates how to associate a custom file extension (.custom) with a custom compiler or handler to be used when requiring files with that extension.

var interpret = require('interpret');
var extensions = interpret.extensions;
extensions['.custom'] = require('my-custom-compiler');

Other packages similar to interpret

Readme

Source

interpret

A dictionary of file extensions and associated module loaders.

NPM

What is it

This is used by Liftoff to automatically require dependencies for configuration files, and by rechoir for registering module loaders.

API

extensions

Map file types to modules which provide a require.extensions loader.

{
  '.babel.js': 'babel/register',
  '.cirru': 'cirru-script/lib/register',
  '.cjsx': 'node-cjsx/register',
  '.co': 'coco',
  '.coffee': 'coffee-script/register',
  '.coffee.md': 'coffee-script/register',
  '.csv': 'require-csv',
  '.iced': 'iced-coffee-script/register',
  '.iced.md': 'iced-coffee-script/register',
  '.ini': 'require-ini',
  '.js': null,
  '.json': null,
  '.json5': 'json5/lib/require',
  '.jsx': 'node-jsx',
  '.litcoffee': 'coffee-script/register',
  '.liticed': 'iced-coffee-script/register',
  '.ls': 'LiveScript',
  '.toml': 'toml-require',
  '.ts': 'typescript-register',
  '.wisp': 'wisp/engine/node',
  '.xml': 'require-xml',
  '.yaml': 'require-yaml',
  '.yml': 'require-yaml'
}

legacy

Check here to see if a legacy module should be loaded upon failure to load the main module. If a legacy module is available it is recommended to use try/catch around the requires to avoid crashing the process upon failure to load the main module.

{
  '.coffee': 'coffee-script' // old versions of coffee-script didn't have the `register` module
}

register

Check here to see if setup is needed for the module register itself with require.extensions. If a method is returned, call it with the module.

{
  'toml-require': function (module) {
    module.install();
  }
}

configurations

These configuration options should be passed into any register function with the same key.

// configurations
{
  'node-jsx': {
    extension: '.jsx',
    harmony: true
  }
}
// register
{
  'node-jsx': function (module, config) {
    module.install(config);
  }
}

jsVariants

Extensions which are javascript variants.

{
  '.js': null,
  '.babel.js': 'babel/register',
  '.cirru': 'cirru-script/lib/register',
  '.cjsx': 'node-cjsx/register',
  '.co': 'coco',
  '.coffee': 'coffee-script/register',
  '.coffee.md': 'coffee-script/register',
  '.iced': 'iced-coffee-script/register',
  '.iced.md': 'iced-coffee-script/register',
  '.jsx': 'node-jsx',
  '.litcoffee': 'coffee-script/register',
  '.liticed': 'iced-coffee-script/register',
  '.ls': 'LiveScript',
  '.ts': 'typescript-register',
  '.wisp': 'wisp/engine/node'
}

Example Usage

const interpret = require('interpret');
const path = require('path');
const resolve = require('resolve');

// register support for a defined extension
function register(filepath, cwd) {
  // find the extension of the requested filename
  var ext = path.extname(filepath);
  // see if this extension is already supported
  if (Object.keys(require.extensions).indexOf(ext) !== -1) {
    return;
  }
  // if no cwd is specified, assume we want to use the
  // directory the requested file exists in
  if (!cwd) {
    cwd = path.dirname(path.resolve(filepath));
  }
  // find out which module is needed to read this extension
  var moduleName = interpret.extensions[ext];
  // if a module exists for this extension, make it usable
  if (moduleName) {
    // find the module relative to cwd that can add support for this extension
    // optionally deal with legacy modules here
    var module = resolve.sync(moduleName, {basedir: cwd});
    // require it
    var compiler = require(module);
    // see if there is a method needed beyond requiring to enable support
    var register = interpret.register[moduleName];
    var config = interpret.configurations[moduleName];
    // if there is, run it
    if (register) {
      register(compiler, config);
    }
  }
}

Note: this is more or less exactly how rechoir works.

Keywords

FAQs

Last updated on 15 Mar 2015

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc