pax_global_header00006660000000000000000000000064140562651450014522gustar00rootroot0000000000000052 comment=db407cf2953ad637a835c503648be26fbdffd873 rewrite-imports-3.0.0/000077500000000000000000000000001405626514500146765ustar00rootroot00000000000000rewrite-imports-3.0.0/.editorconfig000066400000000000000000000003231405626514500173510ustar00rootroot00000000000000# http://editorconfig.org root = true [*] indent_size = 2 indent_style = tab end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.{json,yml,md}] indent_style = space rewrite-imports-3.0.0/.github/000077500000000000000000000000001405626514500162365ustar00rootroot00000000000000rewrite-imports-3.0.0/.github/FUNDING.yml000066400000000000000000000000171405626514500200510ustar00rootroot00000000000000github: lukeed rewrite-imports-3.0.0/.github/workflows/000077500000000000000000000000001405626514500202735ustar00rootroot00000000000000rewrite-imports-3.0.0/.github/workflows/ci.yml000066400000000000000000000020171405626514500214110ustar00rootroot00000000000000name: CI on: push: branches: - '**' tags-ignore: - '**' pull_request: branches: - '**' tags-ignore: - '**' jobs: test: name: Node.js v${{ matrix.nodejs }} runs-on: ubuntu-latest strategy: matrix: nodejs: [8, 10, 12] steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.nodejs }} - name: Install run: npm install - name: Test w/o Coverage run: npm test coverage: name: Node.js v14 runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: 14 - name: Install run: | npm install npm install -g c8 - name: Test w/ Coverage run: c8 --include=src npm test - name: Report run: | c8 report --reporter=text-lcov > coverage.lcov bash <(curl -s https://codecov.io/bash) env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} rewrite-imports-3.0.0/.gitignore000066400000000000000000000000641405626514500166660ustar00rootroot00000000000000node_modules .DS_Store *-lock.* *.lock *.log /dist rewrite-imports-3.0.0/index.d.ts000066400000000000000000000001031405626514500165710ustar00rootroot00000000000000export function rewrite(source: string, require?: string): string; rewrite-imports-3.0.0/license000066400000000000000000000021201405626514500162360ustar00rootroot00000000000000MIT License Copyright (c) Luke Edwards (lukeed.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. rewrite-imports-3.0.0/package.json000066400000000000000000000016701405626514500171700ustar00rootroot00000000000000{ "version": "3.0.0", "name": "rewrite-imports", "repository": "lukeed/rewrite-imports", "description": "A tiny (349B) utility to rewrite `import` statements as `require()`s; via RegExp", "module": "dist/index.mjs", "unpkg": "dist/index.min.js", "main": "dist/index.js", "types": "index.d.ts", "license": "MIT", "author": { "name": "Luke Edwards", "email": "luke.edwards05@gmail.com", "url": "https://lukeed.com" }, "engines": { "node": ">=6" }, "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.js" }, "./package.json": "./package.json" }, "files": [ "*.d.ts", "dist" ], "scripts": { "build": "bundt", "test": "uvu -r esm test" }, "keywords": [ "regex", "rewrite", "modules", "imports", "requires", "aliases" ], "devDependencies": { "bundt": "^0.3.0", "esm": "3.2.25", "uvu": "0.5.1" } } rewrite-imports-3.0.0/readme.md000066400000000000000000000055031405626514500164600ustar00rootroot00000000000000# rewrite-imports [![CI](https://github.com/lukeed/rewrite-imports/actions/workflows/ci.yml/badge.svg)](https://github.com/lukeed/rewrite-imports/actions/workflows/ci.yml) A tiny (349B) utility to transform various `import` statements into `require()` calls, using regular expressions. > ***Looking for something _more_ backwards compatible?***
> Check out [`v1.4.0`](https://github.com/lukeed/rewrite-imports/tree/v1.4.0) which does not rely on destructured assignment! ## Caveats This module returns a string and **does not** provide a runtime nor does it evaluate the output. > :bulb: For this behavior, use [`rewrite-module`](https://github.com/lukeed/rewrite-module) or check out [`@taskr/esnext`](https://github.com/lukeed/taskr/tree/master/packages/esnext) for an example. The output requires a JavaScript runtime that supports `require` calls and [destructuring assignments](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring) with Objects. * At least `Node 6.x` is required * Or, for browsers: * A `require` shim is always needed – see [`fn`](#fn) * Ensure your target browsers support destructuring – see [chart](https://kangax.github.io/compat-table/es6/#test-destructuring,_assignment) If you have [false positives](https://github.com/lukeed/rewrite-imports/issues/8), you may want to use an AST to find actual `import` statements before transformation. > Check out an [example implementation](https://github.com/styleguidist/react-styleguidist/blob/82f22d217044dee6215e60696c39791ee168fc14/src/client/utils/transpileImports.js). ## Install ``` $ npm install --save rewrite-imports ``` ## Usage ```js import { rewrite } from 'rewrite-imports'; // or const { rewrite } = require('rewrite-imports'); rewrite(`import foo from '../bar'`); //=> const foo = require('../bar'); rewrite(`import { foo } from 'bar'`); //=> const { foo } = require('bar'); rewrite(`import * as path from 'path';`); //=> const path = require('path'); rewrite(`import { foo as bar, baz as bat, lol } from 'quz';`); //=> const { foo:bar, baz:bat, lol } = require('quz'); rewrite(`import foobar, { foo as FOO, bar } from 'foobar';`); //=> const foobar = require('foobar'); //=> const { foo:FOO, bar } = foobar; ``` ## API ### rewrite(input, fn) #### input Type: `String` The `import` statement(s) or the code containing `import` statement(s). > See [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import) for valid `import` statement syntax. #### fn Type: `String`
Default: `'require'` The `require`-like function name to use. Defaults to `require` but you may choose to pass the name of a custom shim function; for example, `__webpack_require__` may work for webpack in the browser. ## License MIT © [Luke Edwards](https://lukeed.com) rewrite-imports-3.0.0/src/000077500000000000000000000000001405626514500154655ustar00rootroot00000000000000rewrite-imports-3.0.0/src/index.js000066400000000000000000000014061405626514500171330ustar00rootroot00000000000000function destruct(keys, target) { var out=[]; while (keys.length) out.push(keys.shift().trim().replace(/ as /g, ':')); return 'const { ' + out.join(', ') + ' } = ' + target; } function generate(keys, dep, base) { if (keys.length && !base) return destruct(keys, dep); return 'const ' + base + ' = ' + dep + (keys.length ? ';\n' + destruct(keys, base) : ''); } export function rewrite(str, fn) { fn = fn || 'require'; return str.replace(/(^|;\s*|\r?\n+)import\s*((?:\*\s*as)?\s*([a-z$_][\w$]*)?\s*,?\s*(?:{([\s\S]*?)})?)?\s*(from)?\s*(['"`][^'"`]+['"`])(?=;?)(?=([^"'`]*["'`][^"'`]*["'`])*[^"'`]*$)/gi, function (raw, ws, _, base, req, fro, dep) { dep = fn + '(' + dep + ')'; return (ws||'') + (fro ? generate(req ? req.split(',') : [], dep, base) : dep); }); } rewrite-imports-3.0.0/test/000077500000000000000000000000001405626514500156555ustar00rootroot00000000000000rewrite-imports-3.0.0/test/index.js000066400000000000000000000202071405626514500173230ustar00rootroot00000000000000import { test } from 'uvu'; import * as assert from 'uvu/assert'; import { rewrite } from '../src'; function run(input, output, extra) { test(JSON.stringify(input), () => { let result = rewrite(input, extra); assert.is(result, output); assert.not.throws(() => { new Function(result) }); }); } // Single quotes // --- run( `import foo from 'foo'`, `const foo = require('foo')` ); run( `import foo from 'foo';`, `const foo = require('foo');` ); run( `import foo from './foo'`, `const foo = require('./foo')` ); run( `import foo from '../foo/bar'`, `const foo = require('../foo/bar')` ); run( `import foo from '../foo/bar';`, `const foo = require('../foo/bar');` ); // Double quotes // --- run( `import foo from "foo"`, `const foo = require("foo")` ); run( `import foo from "foo";`, `const foo = require("foo");` ); run( `import foo from "./foo"`, `const foo = require("./foo")` ); run( `import foo from "../foo/bar"`, `const foo = require("../foo/bar")` ); run( `import foo from "../foo/bar";`, `const foo = require("../foo/bar");` ); // Template quotes // --- run( "import foo from `foo`", "const foo = require(`foo`)" ); run( "import foo from `foo`;", "const foo = require(`foo`);" ); run( "import foo from `./foo`", "const foo = require(`./foo`)" ); run( "import foo from `../foo/bar`", "const foo = require(`../foo/bar`)" ); run( "import foo from `../foo/bar`;", "const foo = require(`../foo/bar`);" ); // Partial Imports // --- run( `import { foo, bar } from 'baz'`, `const { foo, bar } = require('baz')` ); run( `import { foo, bar } from '../baz'`, `const { foo, bar } = require('../baz')` ); run( "import { foo, bar } from `baz`", "const { foo, bar } = require(`baz`)" ); run( "import { foo, bar } from `../baz`", "const { foo, bar } = require(`../baz`)" ); // Mixed Imports // --- run( `import baz, { foo, bar } from 'baz'`, `const baz = require('baz');\nconst { foo, bar } = baz` ); run( `import baz, { foo, bar } from '../baz'`, `const baz = require('../baz');\nconst { foo, bar } = baz` ); run( `import baz, { foo } from 'baz';import bat, { foo as bar } from 'bat';`, `const baz = require('baz');\nconst { foo } = baz;const bat = require('bat');\nconst { foo:bar } = bat;` ); run( `import baz, { foo as bar, bar as bat } from 'baz'`, `const baz = require('baz');\nconst { foo:bar, bar:bat } = baz` ); run( `import baz, {foo as bar} from 'baz';import quz, {foo as bat} from 'quz';`, `const baz = require('baz');\nconst { foo:bar } = baz;const quz = require('quz');\nconst { foo:bat } = quz;` ); // Aliases // --- run( `import { default as main } from 'foo'`, `const { default:main } = require('foo')` ); run( `import { foo as bar } from 'baz'`, `const { foo:bar } = require('baz')` ); run( `import { bar, default as main } from '../foo'`, `const { bar, default:main } = require('../foo')` ); run( `import { foo as bar, default as main } from '../foo'`, `const { foo:bar, default:main } = require('../foo')` ); run( `import baz, { foo as bar, default as main } from '../foo'`, `const baz = require('../foo');\nconst { foo:bar, default:main } = baz` ); run( `import * as foo from '../foo'`, `const foo = require('../foo')` ); // Raw imports // --- run( `import 'bar'`, `require('bar')` ); run( `import './foo';`, `require('./foo');` ); run( `import './foo';import 'bar';`, `require('./foo');require('bar');` ); run( "import `./foo`;", "require(`./foo`);" ); run( "import `./foo`;import `bar`;", "require(`./foo`);require(`bar`);" ); // Multi-line // --- run( `import {\n\tfoo,\n\tbar,\n\tbat as baz\n} from 'baz'`, `const { foo, bar, bat:baz } = require('baz')` ); run( `import {\n\tfoo,\n\tbar,\n\tbat as baz\n} from '../baz';`, `const { foo, bar, bat:baz } = require('../baz');` ); // Muiltiple statements // --- run( `import foo from 'foo';import bar from 'bar';`, `const foo = require('foo');const bar = require('bar');` ); run( `import foo from 'foo'\nimport { baz1, baz2 } from 'baz'`, `const foo = require('foo')\nconst { baz1, baz2 } = require('baz')` ); run( `import 'bar';import './foo';`, `require('bar');require('./foo');` ); run( `import './foo'\n\nimport 'bar'`, `require('./foo')\n\nrequire('bar')` ); // Ensure Uniqueness // --- run( `import { promisify } from 'util';import { foo as bar } from './util';`, `const { promisify } = require('util');const { foo:bar } = require('./util');` ); run( `import util, { promisify } from 'util';import helpers, { foo as bar } from './util';`, `const util = require('util');\nconst { promisify } = util;const helpers = require('./util');\nconst { foo:bar } = helpers;` ); run( `import { h } from 'preact';import { Component } from 'preact';`, `const { h } = require('preact');const { Component } = require('preact');` ); // No spaces // --- run( `import'foo'`, `require('foo')` ); run( `import'foo';import'./bar';import baz from'baz';`, `require('foo');require('./bar');const baz = require('baz');` ); run( `import foo from'foo'`, `const foo = require('foo')` ); run( `import{foo,bar}from'baz'`, `const { foo, bar } = require('baz')` ); run( `import{foo,bar}from'../baz';;;`, `const { foo, bar } = require('../baz');;;` ); run( `import{foo,bar as baz}from'../baz'`, `const { foo, bar:baz } = require('../baz')` ); // Dashes // --- run( `import foo from "foo-bar"`, `const foo = require("foo-bar")` ); run( `import {foo, bar} from 'foo-bar';`, `const { foo, bar } = require('foo-bar');` ); run( `import baz, {foo, bar} from 'foo-bar'`, `const baz = require('foo-bar');\nconst { foo, bar } = baz` ); run( `import a, {b} from 'c'`, `const a = pizza('c');\nconst { b } = a`, 'pizza' ); // No-partial/mid selection // --- run( `import '$dimport';`, `require('$dimport');` ); run( `import 'dimport';`, `require('dimport');` ); run( `import foo from 'dimport';`, `const foo = require('dimport');` ); run( `import fooimportbar from '$import$';`, `const fooimportbar = require('$import$');` ); run( `import dimport,{foo}from'dimport';import bat,{foo as bar}from'bat';`, `const dimport = require('dimport');\nconst { foo } = dimport;const bat = require('bat');\nconst { foo:bar } = bat;` ); run( `import dimport, { foo } from 'dimport'; import bat, { foo as bar } from 'bat';`, `const dimport = require('dimport');\nconst { foo } = dimport; const bat = require('bat');\nconst { foo:bar } = bat;` ); run( `import { dimport } from 'dimport'; import './foo';`, `const { dimport } = require('dimport'); require('./foo');`, ); // Within a string // --- run( `var text = "import { dimport } from 'dimport'; import './foo';";`, `var text = "import { dimport } from 'dimport'; import './foo';";`, ); run( "var text = `import { dimport } from 'dimport'; import './foo';`;", "var text = `import { dimport } from 'dimport'; import './foo';`;", ); run( 'var text = `import { dimport } from "dimport"; import "./foo";`', 'var text = `import { dimport } from "dimport"; import "./foo";`', ); run( `var text = "import foo from 'foo'; import'./bar'"`, `var text = "import foo from 'foo'; import'./bar'"`, ); run( "var text=`import foo from 'foo'; import'./bar'`", "var text=`import foo from 'foo'; import'./bar'`", ); run( "var text=`import{foo}from'foo';import bar,{baz}from'./bar'`", "var text=`import{foo}from'foo';import bar,{baz}from'./bar'`", ); run( "var text=`\n\timport{foo}from'foo';\n\timport bar,{baz}from'./bar';\n`;", "var text=`\n\timport{foo}from'foo';\n\timport bar,{baz}from'./bar';\n`;", ); run( `var text='\\n\\timport{foo}from"foo";\\n\\timport bar,{baz}from"./bar";';`, `var text='\\n\\timport{foo}from"foo";\\n\\timport bar,{baz}from"./bar";';`, ); run( 'var text="import \'foo\';import`./bar`\\nimport\'baz\';";', 'var text="import \'foo\';import`./bar`\\nimport\'baz\';";', ); // Non-alphanum identifier // --- run( `import * as $ from "foobar";`, `const $ = require("foobar");` ); run( `import * as $ from "foobar";import * as _ from 'baz';`, `const $ = require("foobar");const _ = require('baz');` ); run( `import foo1 from 'foo';import { foo2, _lol } from 'bar';`, `const foo1 = require('foo');const { foo2, _lol } = require('bar');` ); run( `import $foo from 'foo'\nimport { $baz1, $01 } from 'baz'`, `const $foo = require('foo')\nconst { $baz1, $01 } = require('baz')` ); test.run();