An open API service indexing awesome lists of open source software.

https://github.com/neo4-js/neo4-js

Neo4-js is a object-graph mapper for JavaScript and neo4j with full flow-type support.
https://github.com/neo4-js/neo4-js

flow flowtype neo4j nodejs ogm orm-library

Last synced: about 2 months ago
JSON representation

Neo4-js is a object-graph mapper for JavaScript and neo4j with full flow-type support.

Awesome Lists containing this project

README

        

# Neo4-js

[![Build Status](https://travis-ci.org/neo4-js/neo4-js.svg?branch=master)](https://travis-ci.org/neo4-js/neo4-js) [![dependencies Status](https://david-dm.org/neo4-js/neo4-js/status.svg)](https://david-dm.org/janpeter/neo4js) [![devDependencies Status](https://david-dm.org/neo4-js/neo4-js/dev-status.svg)](https://david-dm.org/neo4-js/neo4-js?type=dev) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)

Neo4-js is a object-graph mapper for JavaScript and neo4j with full TypeScript support. Neo4-js hides repetitive queries such as the basic CRUD operations to the developer. For best development experience use TypeScript to obtain good autocomplete results.

## Usage

With neo4-js you are able to quickly define your data model but maintain complete control over your models. The following code snipped shows how you can work with neo4-js.

```
type PersonProps = {
name?: StringProperty;
};

type TaskProps = {
title?: StringProperty;
done?: boolean;
};

class PersonModel extends Model {}
const Person: PersonModel = new PersonModel("Person");

class TaskModel extends Model {}
const Task: TaskModel = new TaskModel("Task");

const TaskCreatorRelation = relation
.from(() => Person)
.to(() => Task)
.via("created");

const TaskAssigneeRelation = relation
.from(Person)
.to(Task)
.via("assigned");

@model(Person)
class PersonInstance extends ModelInstance {
@hasMany(Task, TaskCreatorRelation)
tasks: HasManyActions;

@hasMany(Task, TaskAssigneeRelation)
assignedTasks: HasManyActions;
}

@model(Task)
class TaskInstance extends ModelInstance {
@hasOne(() => Person, () => TaskCreatorRelation)
creator: HasOneActions;
}

(async () => {
const paul: PersonInstance = await Person.create({ name: "Paul" });

const propsArray: TaskProps[] = [
{
title: "Buy milk",
},
{
title: "Buy beer",
done: false,
},
];

const tasks: TaskInstance[] = await paul.tasks.create(propsArray);
})();
```

## Documentation

The documentation is not completed yet but you'll find the basics on [neo4.js.org](https://neo4.js.org). Any help is very much appreciated!

## Installing

To use neo4-js properly you need to add TypeScript to your project. For now we also install `ts-node` so that we are able to run our code without compiling it manually before running.

```
yarn add -D typescript ts-node
```

I recommend using the following `tsconfig.json` configuration.

```
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"target": "ES6",
"experimentalDecorators": true,
}
}
```

You might also install Docker to quickly create a neo4j database without any further installations. For neo4-js I used the following bash script to start a neo4j instance in docker. To run it you might create a scripts directory and add the following to `neo4j-startup.sh`, make sure you can execute the script with `chmod 777 neo4j-startup.sh` (because why not 777 on my local machine :P).

```
# REST PORT: 10000
# BOLT PORT: 10001
echo "docker run -p 10000:7474 -p 10001:7687 --rm --env=NEO4J_AUTH=none neo4j"
docker run -p 10000:7474 -p 10001:7687 --rm --env=NEO4J_AUTH=none neo4j
```

The only runtime dependency you need to start using neo4-js is neo4-js itself.

```
yarn add neo4-js
```

## Built With

* [TypeScript](https://www.typescriptlang.org/) - TypeScript is a typed superset of Javascript that compiles to plain Javascript.

## Contributing

Feel free to send a pull request or create an issue for bugs or feature requests.

## Authors

* **Jan Schlacher** - *Initial work*

## License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details