0.6.0 • Published 10 months ago

parse-es-import v0.6.0

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

parse-es-import

Inspired by parse-static-imports, and have the same return result as it, and can run both on browser/node sides because it is based on acron.

Will properly parse:

  • Default import. e.g. import utils from 'utils';
  • Star imports. e.g. import * as utils from 'utils';
  • Named imports. e.g. import { Foo as MyFoo } from 'utils';
  • Side effect only imports, e.g. import './App.css';
  • Multi-line imports, like

    import React, { useState, useCallback, useEffect } from 'react';

Installation

npm install --save parse-es-import

Usage

import fs from 'fs';
import parse from 'parse-es-import';

const file = fs.readFileSync('./path/to/file.js', 'utf8');
const results = parse(file);

console.log(JSON.stringify(results, null, 2));

API

  • content: String - Contents of code to parse.
  • options: Object - Receive all parameters of acorn.parse. Its default value is { ecmaVersion: 2021, sourceType: 'module' }.

Returns

{
  "imports": {},
  "exports": {}
}

imports

AttributeTypeDefault ValueDescription
moduleNameString''The name of the module imported or a relative path (e.g. 'react-dom')
starImportString''The name of the star imported module object, if present
namedImportsObject[][]List of named imports as a list of objects
defaultImportString''The name of the default import, if present
sideEffectOnlyBooleanfalseIf the import was side-effect only (e.g. import './App.css';)
startIndexNumber0Index of the starting character of the import statement
endIndexNumber0Index of the ending character + 1 of the import statement

Named import objects have the form:

AttributeTypeDefault ValueDescription
nameString''The name of the named import (e.g. { useState })
aliasStringnameWill be the alias of a named import if aliased, otherwise defaults to the named import (e.g. import { foo /* the named import */ as bar /* the alias */ } from 'module-name';)

exports

AttributeTypeDefault ValueDescription
moduleNameString''The name of the module exported
typeString''The type of module exported
valueString''The value of module exported or a relative path (e.g. '../add.js')
startIndexNumber0Index of the starting character of the export statement
endIndexNumber0Index of the ending character + 1 of the export statement
identifierListStringnullThe identifiers exported by this file
identifierTreeRecord<string, any>nullThe identifier tree exported by this file

Example

Content to parse:

import React from 'react';
import antd, { Button as AntButton, Alert } from 'antd';
import * as Hello from 'hello';

import 'xx.less';

export function Demo () {
  return <div>Hello World...</div>;
};

// this identifier is exported by obj
const A = 'A';
export const obj = { A: A };

The parse result will be:

{
  "imports": [
    {
      "moduleName": "react",
      "starImport": "",
      "defaultImport": "React",
      "namedImports": [],
      "sideEffectOnly": false,
      "startIndex": 1,
      "endIndex": 27
    },
    {
      "moduleName": "antd",
      "starImport": "",
      "defaultImport": "antd",
      "namedImports": [
        {
          "name": "Button",
          "alias": "AntButton"
        },
        {
          "name": "Alert",
          "alias": "Alert"
        }
      ],
      "sideEffectOnly": false,
      "startIndex": 28,
      "endIndex": 84
    },
    {
      "moduleName": "hello",
      "starImport": "Hello",
      "defaultImport": "",
      "namedImports": [],
      "sideEffectOnly": false,
      "startIndex": 85,
      "endIndex": 116
    },
    {
      "moduleName": "xx.less",
      "starImport": "",
      "defaultImport": "",
      "namedImports": [],
      "sideEffectOnly": true,
      "startIndex": 118,
      "endIndex": 135
    }
  ],
  "exports": [
    {
      "type": "FunctionDeclaration",
      "moduleName": "Demo",
      "value": "function Demo () {\n  return <div>Hello World...</div>;\n}",
      "startIndex": 137,
      "endIndex": 200
    },
    {
      "type": "VariableDeclaration",
      "moduleName": "obj",
      "value": "{ A: A }",
      "identifierList": [
        "A"
      ],
      "identifierTree": {
        "A": "A"
      },
      "startIndex": 256,
      "endIndex": 284
    }
  ]
}