# @resolver-engine/imports

Latest version **0.3.3** (published 2019-07-03) · LGPL-3.0-or-later license · 0 weekly downloads

## Install

```sh
npm install @resolver-engine/imports
pnpm add @resolver-engine/imports
yarn add @resolver-engine/imports
bun add @resolver-engine/imports
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.3.3 |
| Published | 2019-07-03 |
| First published | 2019-01-29 |
| Weekly downloads | 0 |
| License | LGPL-3.0-or-later |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 5 |
| Unpacked size | 202.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 32 |
| Author | Crypto Punkers |
| Maintainers | ritave |

## Links

- npm: https://www.npmjs.com/package/@resolver-engine/imports
- Repository: https://github.com/Crypto-Punkers/resolver-engine
- Homepage: https://github.com/Crypto-Punkers/resolver-engine#readme
- Issues: https://github.com/Crypto-Punkers/resolver-engine/issues
- npm.io page: https://npm.io/package/@resolver-engine/imports

## Dependencies (5)

- [url](https://npm.io/package/url.md) ^0.11.0
- [debug](https://npm.io/package/debug.md) ^3.1.0
- [hosted-git-info](https://npm.io/package/hosted-git-info.md) ^2.6.0
- [path-browserify](https://npm.io/package/path-browserify.md) ^1.0.0
- [@resolver-engine/core](https://npm.io/package/@resolver-engine/core.md) ^0.3.3

## Recent versions

- 0.3.3 (latest) — 2019-07-03
- 0.3.2 — 2019-02-13
- 0.3.1 — 2019-02-13
- 0.3.0 — 2019-01-31
- 0.2.2 — 2019-01-29
- 0.2.1 — 2019-01-29
- 0.2.0 — 2019-01-29

## README

<p align="center">
  <img src="doc/Logo@2x.png?raw=true">
  <p align="center">Single API for resolving Solidity artefacts and imports</p>

  <p align="center">
    <a href="https://t.me/resolverengine"><img alt="Chat on telegram" src="https://img.shields.io/badge/chat-on%20telegram-blue.svg" /></a>
    <a href="https://circleci.com/gh/Crypto-Punkers/resolver-engine/tree/master"><img alt="Build status" src="https://img.shields.io/circleci/project/github/Crypto-Punkers/resolver-engine/master.svg" /></a>
  </p>
</p>

## Example usage

We provide a pre-built complete engine with _sane_ defaults.
Resolver-engine is a common importing interface for _all_ the Ethereum inventions out there.

```typescript
import { ImportFsEngine } from "@resolver-engine/import-fs";

ImportFsEngine()
  .require("github:OpenZeppelin/openzeppelin-solidity/contracts/ownership/Ownable.sol#v2.1.2")
  .then(file => console.log(`Loaded url ${file.url} with source: ${file.source}`);
```

Otherwise, you can build your own engines, suited to your needs.

```typescript
import { ResolverEngine } from "@resolver-engine/core";
import { parsers, resolvers } from "@resolver-engine/imports-fs";

const resolver = new ResolverEngine<string>()
  .addResolver(resolvers.FsResolver())
  .addResolver(resolvers.NodeResolver())
  .addParser(parsers.FsParser());

resolver
  .resolve("@openzeppelin-solidity/contracts/ownership/Ownable.sol")
  .then(fileSource => console.log(fileSource))
  .catch(console.error);
```

```typescript
import { parsers, resolvers, ResolverEngine } from "@resolver-engine/core";

const resolver = new ResolverEngine<string>().addResolver(resolvers.UriResolver()).addParser(parsers.UrlParser());

resolver.resolve("https://pastebin.com/raw/D8ziKX0a").then(console.log);
```

In the [`examples/` folder](examples/) more granular examples can be found.

### Published packages

| Package                                               | NPM                                                                                                                             | Description                                                                  |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| [`@resolver-engine/imports-fs`](/packages/imports-fs) | [![npm link](https://img.shields.io/badge/npm-imports--fs-blue.svg)](https://www.npmjs.com/package/@resolver-engine/imports-fs) | Solidity imports with filesystem support                                     |
| [`@resolver-engine/imports`](/packages/imports)       | [![npm link](https://img.shields.io/badge/npm-imports-blue.svg)](https://www.npmjs.com/package/@resolver-engine/imports)        | Browser-friendly version of Solidity imports                                 |
| [`@resolver-engine/core`](packages/core)              | [![npm link](https://img.shields.io/badge/npm-core-blue.svg)](https://www.npmjs.com/package/@resolver-engine/core)              | Core of the project consisting of the engine and interfaces                  |
| [`@resolver-engine/fs`](packages/fs)                  | [![npm link](https://img.shields.io/badge/npm-fs-blue.svg)](https://www.npmjs.com/package/@resolver-engine/fs)                  | Filesystem abstractions, basis for future artifacts resolver and many others |

## Long description

Each Solidity framework has different logic concerning Solidity import statements as well as creating different format of artifacts. This becomes problematic when target developers want to use multiple tools on the same codebase.

For example, Truffle artifacts are not compatible with 0xProject's solidity coverage tooling. Documentation generation doesn't support NPM-like Solidity imports which are supported by both Truffle and 0x, at the same time, neither of which support github import statements as the ones Remix does.

The goal of this library is to provide tooling for framework developers so that they can implement multiple artifacts and solidity importing with ease, as well as providing sane defaults that would standarize the functionallity.

<p align="center">
  <img src="doc/SequenceRender.png?raw=true">
</p>

---
_Source: https://npm.io/package/@resolver-engine/imports · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
