{"id":13508861,"url":"https://github.com/gulpjs/interpret","last_synced_at":"2025-05-14T22:09:00.931Z","repository":{"id":15222013,"uuid":"17950592","full_name":"gulpjs/interpret","owner":"gulpjs","description":"A dictionary of file extensions and associated module loaders.","archived":false,"fork":false,"pushed_at":"2024-08-15T19:15:20.000Z","size":152,"stargazers_count":260,"open_issues_count":8,"forks_count":48,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-27T15:45:29.564Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gulpjs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["gulpjs","phated","yocontra"],"tidelift":"npm/gulp","open_collective":"gulpjs"}},"created_at":"2014-03-20T16:52:15.000Z","updated_at":"2025-03-14T18:02:13.000Z","dependencies_parsed_at":"2024-01-11T19:19:08.303Z","dependency_job_id":"8798d0fc-dd09-4d78-8aac-f07f5096f5b0","html_url":"https://github.com/gulpjs/interpret","commit_stats":{"total_commits":149,"total_committers":33,"mean_commits":4.515151515151516,"dds":0.6778523489932886,"last_synced_commit":"c09bf70bc73d020b9d387223e7b74708687fdb47"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gulpjs%2Finterpret","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gulpjs%2Finterpret/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gulpjs%2Finterpret/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gulpjs%2Finterpret/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gulpjs","download_url":"https://codeload.github.com/gulpjs/interpret/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252310952,"owners_count":21727516,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T02:00:59.572Z","updated_at":"2025-05-14T22:08:55.896Z","avatar_url":"https://github.com/gulpjs.png","language":"JavaScript","funding_links":["https://github.com/sponsors/gulpjs","https://github.com/sponsors/phated","https://github.com/sponsors/yocontra","https://tidelift.com/funding/github/npm/gulp","https://opencollective.com/gulpjs"],"categories":["JavaScript","others"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://gulpjs.com\"\u003e\n    \u003cimg height=\"257\" width=\"114\" src=\"https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# interpret\n\n[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][ci-image]][ci-url] [![Coveralls Status][coveralls-image]][coveralls-url]\n\nA dictionary of file extensions and associated module loaders.\n\n## What is it\n\nThis is used by [Liftoff] to automatically require dependencies for configuration files, and by [rechoir] for registering module loaders.\n\n## How to use it\n\nConsumers 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:\n\n1.  If the value is null, do nothing.\n2.  If the value is a string, try to require it.\n3.  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.\n4.  If the value is an array, iterate over it, attempting step #2 or #3 until one of the attempts does not throw.\n\n## API\n\nThis module provides two top-level properties: `extensions` and `jsVariants`.\n\n**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.\n\n### `extensions`\n\nA mapping of file extensions to modules which provide a [require.extensions] loader.\n\nFile 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,\nor a string representing the module to be required, an object of `{ module: 'foobar', register: function }`, or an array containing those strings and/or objects.\n\nA sample of an entry containing multiple hooks would look like:\n\n```js\n{\n  '.ts': [\n    'ts-node/register',\n    'sucrase/register/ts',\n    {\n      module: '@babel/register',\n      register: function(hook) {\n        hook({\n          extensions: '.ts',\n          rootMode: 'upward-optional',\n          ignore: [ignoreNonBabelAndNodeModules],\n        });\n      },\n    },\n  ],\n}\n```\n\n**Supported extensions and their hooks**\n\n```yaml file=scripts/extensions.yaml\n.babel.js:\n  - '@babel/register'\n.babel.jsx:\n  - '@babel/register'\n.babel.ts:\n  - '@babel/register'\n.babel.tsx:\n  - '@babel/register'\n.cjs:\n  - interpret/cjs-stub\n.coffee:\n  - coffeescript/register\n.coffee.md:\n  - coffeescript/register\n.cts:\n  - ts-node/register\n.esbuild.js:\n  - esbuild-register/dist/node\n.esbuild.jsx:\n  - esbuild-register/dist/node\n.esbuild.ts:\n  - esbuild-register/dist/node\n.esbuild.tsx:\n  - esbuild-register/dist/node\n.esm.js:\n  - esm\n.js:\n  - built-in node.js loader\n.json:\n  - built-in node.js loader\n.json5:\n  - json5/lib/register\n.jsx:\n  - '@babel/register'\n  - sucrase/register/jsx\n.litcoffee:\n  - coffeescript/register\n.mdx:\n  - '@mdx-js/register'\n.mjs:\n  - interpret/mjs-stub\n.node:\n  - built-in node.js loader\n.sucrase.js:\n  - sucrase/dist/register\n.sucrase.jsx:\n  - sucrase/dist/register\n.sucrase.ts:\n  - sucrase/dist/register\n.sucrase.tsx:\n  - sucrase/dist/register\n.swc.js:\n  - '@swc/register'\n.swc.jsx:\n  - '@swc/register'\n.swc.ts:\n  - '@swc/register'\n.swc.tsx:\n  - '@swc/register'\n.toml:\n  - toml-require\n.ts:\n  - ts-node/register\n  - sucrase/register/ts\n  - '@babel/register'\n  - esbuild-register/dist/node\n  - '@swc/register'\n.tsx:\n  - ts-node/register\n  - sucrase/register/tsx\n  - '@babel/register'\n  - esbuild-register/dist/node\n  - '@swc/register'\n.yaml:\n  - yaml-hook/register\n.yml:\n  - yaml-hook/register\n```\n\n### `jsVariants`\n\nThe `jsVariants` is the same mapping as above, but only include the extensions which are variants of JavaScript.\n\n**Supported extensions and their hooks**\n\n```yaml file=scripts/jsVariants.yaml\n.babel.js:\n  - '@babel/register'\n.babel.jsx:\n  - '@babel/register'\n.babel.ts:\n  - '@babel/register'\n.babel.tsx:\n  - '@babel/register'\n.cjs:\n  - interpret/cjs-stub\n.coffee:\n  - coffeescript/register\n.coffee.md:\n  - coffeescript/register\n.esbuild.js:\n  - esbuild-register/dist/node\n.esbuild.jsx:\n  - esbuild-register/dist/node\n.esbuild.ts:\n  - esbuild-register/dist/node\n.esbuild.tsx:\n  - esbuild-register/dist/node\n.esm.js:\n  - esm\n.js:\n  - built-in node.js loader\n.jsx:\n  - '@babel/register'\n  - sucrase/register/jsx\n.litcoffee:\n  - coffeescript/register\n.mdx:\n  - '@mdx-js/register'\n.mjs:\n  - interpret/mjs-stub\n.sucrase.js:\n  - sucrase/dist/register\n.sucrase.jsx:\n  - sucrase/dist/register\n.sucrase.ts:\n  - sucrase/dist/register\n.sucrase.tsx:\n  - sucrase/dist/register\n.swc.js:\n  - '@swc/register'\n.swc.jsx:\n  - '@swc/register'\n.swc.ts:\n  - '@swc/register'\n.swc.tsx:\n  - '@swc/register'\n.ts:\n  - ts-node/register\n  - sucrase/register/ts\n  - '@babel/register'\n  - esbuild-register/dist/node\n  - '@swc/register'\n.tsx:\n  - ts-node/register\n  - sucrase/register/tsx\n  - '@babel/register'\n  - esbuild-register/dist/node\n  - '@swc/register'\n```\n\n## License\n\nMIT\n\n\u003c!-- prettier-ignore-start --\u003e\n\n[downloads-image]: https://img.shields.io/npm/dm/interpret.svg?style=flat-square\n\n[npm-url]: https://www.npmjs.com/package/interpret\n\n[npm-image]: https://img.shields.io/npm/v/interpret.svg?style=flat-square\n\n[ci-url]: https://github.com/gulpjs/interpret/actions?query=workflow:dev\n\n[ci-image]: https://img.shields.io/github/workflow/status/gulpjs/interpret/dev?style=flat-square\n\n[coveralls-url]: https://coveralls.io/r/gulpjs/interpret\n\n[coveralls-image]: https://img.shields.io/coveralls/gulpjs/interpret/master.svg?style=flat-square\n\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- prettier-ignore-start --\u003e\n\n[Liftoff]: http://github.com/gulpjs/liftoff\n\n[rechoir]: http://github.com/gulpjs/rechoir\n\n[require.extensions]: https://nodejs.org/api/modules.html#requireextensions\n\n\u003c!-- prettier-ignore-end --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgulpjs%2Finterpret","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgulpjs%2Finterpret","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgulpjs%2Finterpret/lists"}