パッケージの詳細

interpret

gulpjs95.9mMIT3.1.1

A dictionary of file extensions and associated module loaders.

coffee, coffee.md, coffeescript, es

readme

interpret

NPM version Downloads Build Status Coveralls Status

A dictionary of file extensions and associated module loaders.

What is it

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

How to use it

Consumers should use the exported extensions or jsVariants object to determine which module should be loaded for a given extension. If a matching extension is found, consumers should do the following:

  1. If the value is null, do nothing.
  2. If the value is a string, try to require it.
  3. If the value is an object, try to require the module property. If successful, the register property (a function) should be called with the module passed as the first argument. Advanced: An optional second argument can be provided to replace the default configuration for a hook.
  4. If the value is an array, iterate over it, attempting step #2 or #3 until one of the attempts does not throw.

API

This module provides two top-level properties: extensions and jsVariants.

Note: This module does not depend on any of the loaders it recommends; instead, end-users are expected to install the hooks they want to use for the file types they want to use. See supported extensions and their hooks in the sections below.

extensions

A mapping of file extensions to modules which provide a require.extensions loader.

File extension keys are all in the format of '.foo' or '.foo.bar' and module loader values are either null if the loader should fallthrough to node's loader, or a string representing the module to be required, an object of { module: 'foobar', register: function }, or an array containing those strings and/or objects.

A sample of an entry containing multiple hooks would look like:

{
  '.ts': [
    'ts-node/register',
    'sucrase/register/ts',
    {
      module: '@babel/register',
      register: function(hook) {
        hook({
          extensions: '.ts',
          rootMode: 'upward-optional',
          ignore: [ignoreNonBabelAndNodeModules],
        });
      },
    },
  ],
}

Supported extensions and their hooks

```yaml file=scripts/extensions.yaml .babel.js:

  • '@babel/register' .babel.jsx:
  • '@babel/register' .babel.ts:
  • '@babel/register' .babel.tsx:
  • '@babel/register' .cjs:
  • interpret/cjs-stub .coffee:
  • coffeescript/register .coffee.md:
  • coffeescript/register .cts:
  • ts-node/register .esbuild.js:
  • esbuild-register/dist/node .esbuild.jsx:
  • esbuild-register/dist/node .esbuild.ts:
  • esbuild-register/dist/node .esbuild.tsx:
  • esbuild-register/dist/node .esm.js:
  • esm .js:
  • built-in node.js loader .json:
  • built-in node.js loader .json5:
  • json5/lib/register .jsx:
  • '@babel/register'
  • sucrase/register/jsx .litcoffee:
  • coffeescript/register .mdx:
  • '@mdx-js/register' .mjs:
  • interpret/mjs-stub .node:
  • built-in node.js loader .sucrase.js:
  • sucrase/dist/register .sucrase.jsx:
  • sucrase/dist/register .sucrase.ts:
  • sucrase/dist/register .sucrase.tsx:
  • sucrase/dist/register .swc.js:
  • '@swc/register' .swc.jsx:
  • '@swc/register' .swc.ts:
  • '@swc/register' .swc.tsx:
  • '@swc/register' .toml:
  • toml-require .ts:
  • ts-node/register
  • sucrase/register/ts
  • '@babel/register'
  • esbuild-register/dist/node
  • '@swc/register' .tsx:
  • ts-node/register
  • sucrase/register/tsx
  • '@babel/register'
  • esbuild-register/dist/node
  • '@swc/register' .yaml:
  • yaml-hook/register .yml:
  • yaml-hook/register ```

jsVariants

The jsVariants is the same mapping as above, but only include the extensions which are variants of JavaScript.

Supported extensions and their hooks

```yaml file=scripts/jsVariants.yaml .babel.js:

  • '@babel/register' .babel.jsx:
  • '@babel/register' .babel.ts:
  • '@babel/register' .babel.tsx:
  • '@babel/register' .cjs:
  • interpret/cjs-stub .coffee:
  • coffeescript/register .coffee.md:
  • coffeescript/register .esbuild.js:
  • esbuild-register/dist/node .esbuild.jsx:
  • esbuild-register/dist/node .esbuild.ts:
  • esbuild-register/dist/node .esbuild.tsx:
  • esbuild-register/dist/node .esm.js:
  • esm .js:
  • built-in node.js loader .jsx:
  • '@babel/register'
  • sucrase/register/jsx .litcoffee:
  • coffeescript/register .mdx:
  • '@mdx-js/register' .mjs:
  • interpret/mjs-stub .sucrase.js:
  • sucrase/dist/register .sucrase.jsx:
  • sucrase/dist/register .sucrase.ts:
  • sucrase/dist/register .sucrase.tsx:
  • sucrase/dist/register .swc.js:
  • '@swc/register' .swc.jsx:
  • '@swc/register' .swc.ts:
  • '@swc/register' .swc.tsx:
  • '@swc/register' .ts:
  • ts-node/register
  • sucrase/register/ts
  • '@babel/register'
  • esbuild-register/dist/node
  • '@swc/register' .tsx:
  • ts-node/register
  • sucrase/register/tsx
  • '@babel/register'
  • esbuild-register/dist/node
  • '@swc/register' ```

License

MIT

更新履歴

Changelog

3.1.1 (2022-06-29)

Bug Fixes

  • Include cjs-stub in npm bundle (4f7d798)

3.1.0 (2022-06-29)

Features

  • Add .cts to support typescript 4.7 (#90) (c1ffa36)

3.0.0 (2022-04-12)

⚠ BREAKING CHANGES

  • Provide default configuration in register functions (#83)
  • Only load sucrase tsx hook for .tsx extension
  • Normalize repository, dropping node <10.13 support (#80)
  • Remove legacy node-jsx hook
  • Remove deprecated typescript-node hook
  • Remove deprecated typescript-register hook
  • Remove unmaintained typescript-require hook
  • Replace legacy require-yaml with yaml-hook
  • Remove legacy require-xml support
  • Remove legacy/deprecated babel hooks
  • Remove legacy buble support
  • Remove legacy cirru-script support
  • Remove legacy node-cjsx support
  • Remove legacy coco support
  • Remove legacy/deprecated coffeescript hooks
  • Remove legacy require-csv support
  • Remove legacy earlgrey support
  • Remove legacy iced-coffee-script support
  • Remove legacy require-ini support
  • Remove legacy json5 hook
  • Remove legacy livescript support
  • Remove legacy wisp support
  • Drop legacy loaders & extensions (#79)
  • Ensure babel only transforms files that match the full extension

Features

  • Add .cjs extension and stub hook (#75) (7989161)
  • Add @swc/register as a loader for .ts and .tsx extensions (#74) (f160451)
  • Add esbuild-register for typescript extensions (#77) (963f5fa)
  • Add new extensions as JS variants (8a8df59)
  • Add sucrase hook as alternative for .jsx (58f678e)
  • Add support for .esbuild.(js|jsx|ts|tsx) extensions (fcb9672)
  • Add support for .sucrase.(js|jsx|ts|tsx) extensions (216ad12)
  • Add support for .swc.(js|jsx|ts|tsx) extensions (c054cf2)
  • Allow register function configuration to be overridden (7856f7e)
  • Leverage endsWith instead of RegExp in matchers (#82) (6404724)
  • Provide default configuration in register functions (#83) (7856f7e)
  • Support .babel.(jsx|tsx) extensions (1e3d0f8)
  • Support .mdx extension hook (#85) (cd24c39)

Bug Fixes

  • Apply correct ordering to esbuild-register (fcfbdb4)
  • Ensure babel only transforms files that match the full extension (81ed502)
  • Ensure esbuild-register only applies to ts or tsx files (5680b3f)
  • Only load sucrase tsx hook for .tsx extension (e9376a1)

Miscellaneous Chores

  • Drop legacy loaders & extensions (#79) (18a0319)
  • Normalize repository, dropping node <10.13 support (#80) (7b69c63)
  • Remove deprecated typescript-node hook (18a0319)
  • Remove deprecated typescript-register hook (18a0319)
  • Remove legacy buble support (18a0319)
  • Remove legacy cirru-script support (18a0319)
  • Remove legacy coco support (18a0319)
  • Remove legacy earlgrey support (18a0319)
  • Remove legacy iced-coffee-script support (18a0319)
  • Remove legacy json5 hook (18a0319)
  • Remove legacy livescript support (18a0319)
  • Remove legacy node-cjsx support (18a0319)
  • Remove legacy node-jsx hook (18a0319)
  • Remove legacy require-csv support (18a0319)
  • Remove legacy require-ini support (18a0319)
  • Remove legacy require-xml support (18a0319)
  • Remove legacy wisp support (18a0319)
  • Remove legacy/deprecated babel hooks (18a0319)
  • Remove legacy/deprecated coffeescript hooks (18a0319)
  • Remove unmaintained typescript-require hook (18a0319)
  • Replace legacy require-yaml with yaml-hook (18a0319)