# @rdfjs/sink-map

> Map for RDF/JS Sinks including shortcut methods

Latest version **2.0.1** (published 2024-01-07) · MIT license · 0 weekly downloads

## Install

```sh
npm install @rdfjs/sink-map
pnpm add @rdfjs/sink-map
yarn add @rdfjs/sink-map
bun add @rdfjs/sink-map
```

## Health

**Score 43/100 (D)** — status: abandoned.

Positive: has types package; esm support; no vulnerabilities; high maintenance score; high quality score.

Warnings: low downloads.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 2.0.1 |
| Published | 2024-01-07 |
| First published | 2018-10-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/rdfjs__sink-map) |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Thomas Bergwinkl |
| Maintainers | bergos |
| Keywords | map, rdf, rdfjs, sink |

## Links

- npm: https://www.npmjs.com/package/@rdfjs/sink-map
- Repository: https://github.com/rdfjs-base/sink-map
- Issues: https://github.com/rdfjs-base/sink-map/issues
- npm.io page: https://npm.io/package/@rdfjs/sink-map

## Recent versions

- 2.0.1 (latest) — 2024-01-07
- 2.0.0 — 2022-10-09
- 1.0.1 — 2019-07-29
- 1.0.0 — 2018-10-10

## README

# @rdfjs/sink-map

[![build status](https://img.shields.io/github/actions/workflow/status/rdfjs-base/sink-map/test.yaml?branch=master)](https://github.com/rdfjs-base/sink-map/actions/workflows/test.yaml)
[![npm version](https://img.shields.io/npm/v/@rdfjs/sink-map.svg)](https://www.npmjs.com/package/@rdfjs/sink-map)

Map for [RDF/JS Sink](http://rdf.js.org/stream-spec/#sink-interface) including shortcut methods.

## Usage

The package provides Map from a string key to a Sink with a shortcut for `.import`.
Typical it's used to store parsers or serializers for specific media types.
As SinkMap extends from the [ECMAScript 2015 Map](https://www.ecma-international.org/ecma-262/6.0/#sec-map-objects) and doesn't overload any standard methods, methods like `set`, `get`, `has` or `delete` can be used as defined in the specification.

### Create a SinkMap
The constructor accepts arrays with key/sink pairs to fill the map:

```javascript
const map = new SinkMap([
  ['text/turtle', new ParserN3()]
])
```

It's also possible to create an empty map and add or extend it later using the `.set()` method:

```javascript
const map = new SinkMap()

map.set('text/turtle') = new ParserN3()
```

### Find a Sink

The `.get` method searches for the matching Sink and returns it:

```javascript
const map = new SinkMap([...])

const sink = map.get('text/turtle')

if (sink) {
  // found
} else {
  // not found
}
```

### Import shortcut

Usually you want to call the `.import` method of the matching Sink.
The map provides a shortcut for this.
It also has a `.import` method, but requires additionally the key as the first argument.
It returns `null` if no matching sink was found:

```javascript
const map = new SinkMap([...])

const input = fs.createReadStream('..')
const output = map.import('text/turtle', input)

if (output) {
  // found
} else {
  // not found
}
```

### Example

Here is a complete example where the map is used to store parsers and the `.import` shortcut is used to parse a string input:

```javascript
import SinkMap from '@rdfjs/sink-map'
import ParserN3 from '@rdfjs/parser-n3'
import { Readable } from 'readable-stream'

const map = new SinkMap([
  ['text/turtle', new ParserN3()]
])

const input = new Readable({
  read: () => {
    input.push(`
      PREFIX s: <http://schema.org/>

      [] a s:Person ;
        s:jobTitle "Professor" ;
        s:name "Jane Doe" ;
        s:telephone "(425) 123-4567" ;
        s:url <http://www.janedoe.com> .
    `)
    input.push(null)
  }
})

const output = map.import('text/turtle', input)

output.on('data', quad => {
  console.log(`${quad.subject.value} - ${quad.predicate.value} - ${quad.object.value}`)
})
```

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