diff --git a/build/index.d.ts b/build/index.d.ts index 9cb4fbe..7fef4ae 100644 --- a/build/index.d.ts +++ b/build/index.d.ts @@ -1,7 +1,11 @@ +/** + * @author Tom Pennetta + * TODO: Don't reuse the same instance fo requestOptions for each call. + */ import * as request from "request"; export declare enum NEO4J_PROTOCOL { http = 0, - https = 1, + https = 1 } export interface INeo4jInternalPaths { extensions: any; @@ -131,7 +135,7 @@ export declare function updateProperties(entityOrEntityId: INeo4jEntity | number /** * @param {number} nodeId */ -export declare function getProperties(entityOrEntityId: INeo4jEntity | number, type: string): Promise<{}>; +export declare function getProperties(entityOrEntityId: INeo4jEntity | number, type: string): Promise; /** * @param {number} nodeId * @param {string} propertyName diff --git a/build/index.js b/build/index.js index 8837586..6da8972 100644 --- a/build/index.js +++ b/build/index.js @@ -1,8 +1,10 @@ +"use strict"; /** * @author Tom Pennetta * TODO: Don't reuse the same instance fo requestOptions for each call. */ -"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getRequestOptions = exports.setStreaming = exports.isStreaming = exports.isConnected = exports.deleteRelationship = exports.createRelationship = exports.getRelationship = exports.deleteAllProperties = exports.deleteProperty = exports.getProperty = exports.getProperties = exports.updateProperties = exports.setProperty = exports.getNodeDegree = exports.deleteNode = exports.createNode = exports.getNode = exports.cypher = exports.dropIndex = exports.listIndexesForLabel = exports.createIndex = exports.getAllPropertyKeys = exports.getRelationshipTypes = exports.connect = exports.NEO4J_PROTOCOL = void 0; const url = require("url"); const request = require("request"); //============================================================================== @@ -16,11 +18,11 @@ request.defaults({ //============================================================================== // Global constants. //============================================================================== +var NEO4J_PROTOCOL; (function (NEO4J_PROTOCOL) { NEO4J_PROTOCOL[NEO4J_PROTOCOL["http"] = 0] = "http"; NEO4J_PROTOCOL[NEO4J_PROTOCOL["https"] = 1] = "https"; -})(exports.NEO4J_PROTOCOL || (exports.NEO4J_PROTOCOL = {})); -var NEO4J_PROTOCOL = exports.NEO4J_PROTOCOL; +})(NEO4J_PROTOCOL = exports.NEO4J_PROTOCOL || (exports.NEO4J_PROTOCOL = {})); ; // TODO: Change to enums const NEO4J_ENTITY_TYPES = ["node", "relationship"]; @@ -520,8 +522,8 @@ function createRelationship(startNode, toNode, type, data) { } let body = { to: relationshipEndEndpointString, - type: type, - data: data + type, + data }; try { body = JSON.stringify(body); diff --git a/build/index.spec.js b/build/index.spec.js index 0b56640..ae51d0b 100644 --- a/build/index.spec.js +++ b/build/index.spec.js @@ -1,4 +1,5 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); require("mocha"); const chai = require("chai"); const neo4j = require("./index"); @@ -10,7 +11,7 @@ describe("Neo4j Typescript REST", function () { port: 7474, authentication: { username: "neo4j", - password: "neo4j" + password: "BMFOTybl51qxqcqHBgK9" }, streaming: true }; @@ -148,15 +149,13 @@ describe("Neo4j Typescript REST", function () { }); it("should execute several valid cypher statements", function (done) { let validCypher = { - statements: [ - { + statements: [{ statement: "MATCH (n) RETURN count(n)" - }, - { - statement: "MATCH (x) RETURN x" - } - ] + }] }; + validCypher.statements.push({ + statement: "MATCH (x) RETURN x" + }); neo4j.cypher(validCypher) .then((response) => { done(); @@ -175,7 +174,6 @@ describe("Neo4j Typescript REST", function () { }; neo4j.cypher(cypherRequest) .then((response) => { - console.log(JSON.stringify(response, null, "\t")); response.results[0].data[0].should.have.property("rest"); done(); }) @@ -474,7 +472,6 @@ describe("Neo4j Typescript REST", function () { neo4j.deleteRelationship(sampleNewRelationship) .then((response) => { done(); - ; }) .catch((reason) => { done(reason); diff --git a/package.json b/package.json index 44009c9..d38a1ce 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "neo4j-typescript", - "version": "0.1.6", + "version": "2.0.0", "description": "Typescript Library for Communicating with Neo4j over REST using Request", "engines": { - "node": ">=4.0.0" + "node": ">=12.22.0" }, "engineStrict": true, "repository": { @@ -13,10 +13,10 @@ "main": "build/index.js", "typings": "build/index.d.ts", "scripts": { - "prepublish": "typings install && npm run build", + "prepublish": "npx typings install && npm run build", "build": "rm -rf build/* && tsc -p .", "test": "tsc -p . && ./node_modules/.bin/istanbul cover -x \"**.spec.**\" ./node_modules/mocha/bin/_mocha --report lcovonly -- build/index.spec.js && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", - "postinstall": "typings install" + "postinstall": "npx typings install" }, "keywords": [ "typescript", @@ -30,6 +30,9 @@ "request": "^2.69.0" }, "devDependencies": { + "@types/chai": "^4.2.22", + "@types/mocha": "^9.0.0", + "@types/node": "^16.11.6", "chai": "^3.5.0", "coveralls": "^2.11.8", "form-data": "^1.0.0-rc4", @@ -37,7 +40,7 @@ "mocha": "^2.4.5", "mocha-lcov-reporter": "^1.2.0", "tslint": "^3.6.0", - "typescript": "^1.8.9" + "typescript": "^3.9.10" }, "bugs": { "url": "https://github.com/tpennetta/neo4j-typescript/issues" diff --git a/src/index.spec.ts b/src/index.spec.ts index 02e0a7e..256079d 100644 --- a/src/index.spec.ts +++ b/src/index.spec.ts @@ -1,6 +1,5 @@ import "mocha"; import * as chai from "chai"; -import * as util from "util"; import * as neo4j from "./index"; import * as request from "request"; @@ -30,7 +29,7 @@ describe("Neo4j Typescript REST", function() { done(response); }) .catch((reason) => { - done() + done(); }); }); it("should establish a new connection", function(done) { @@ -153,15 +152,13 @@ describe("Neo4j Typescript REST", function() { }); it("should execute several valid cypher statements", function(done) { let validCypher: neo4j.INeo4jCypherRequest = { - statements: [ - { + statements: [{ statement: "MATCH (n) RETURN count(n)" - }, - { - statement: "MATCH (x) RETURN x" - } - ] + }] }; + validCypher.statements.push({ + statement: "MATCH (x) RETURN x" + }); neo4j.cypher(validCypher) .then((response) => { done(); @@ -482,7 +479,7 @@ describe("Neo4j Typescript REST", function() { it("should delete newly created relationship", function(done) { neo4j.deleteRelationship(sampleNewRelationship) .then((response) => { - done();; + done(); }) .catch((reason) => { done(reason); diff --git a/src/index.ts b/src/index.ts index ceeaf78..1791ee6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,10 +3,8 @@ * TODO: Don't reuse the same instance fo requestOptions for each call. */ -import * as path from "path"; import * as url from "url"; import * as request from "request"; -import * as util from "util"; import * as http from "http"; //============================================================================== @@ -83,16 +81,16 @@ export interface INeo4jCypherResponse { data: [{ row: any[] }] - }] + }]; errors: [{ code?: string, message?: string - }] + }]; } export interface INeo4jIndexResponse { - property_keys: string[], - label: string + property_keys: string[]; + label: string; } export interface INeo4jEntity { @@ -148,7 +146,7 @@ let dbConfigUrl: url.Url = null; * @returns Promise */ export function connect(options: INeo4jConfig): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { if (connected && graphPaths && url.parse(graphPaths.node).hostname === options.host) { return resolve(graphPaths); } @@ -305,7 +303,7 @@ export function dropIndex(label: string, propertyName: string): Promise //============================================================================== export function cypher(cypherStatements: INeo4jCypherRequest): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let cypherEndpointString: string = `${graphPaths.transaction}/commit`; try { requestOptions.body = JSON.stringify(cypherStatements); @@ -338,7 +336,7 @@ export function cypher(cypherStatements: INeo4jCypherRequest): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let nodeEndpointString: string = `${graphPaths.node}/${id}`; request.get(nodeEndpointString, requestOptions, (err, response, body) => { if (err) { @@ -359,7 +357,7 @@ export function getNode(id: number): Promise { * @returns Promise */ export function createNode(data?: any): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let nodeEndpointString: string = graphPaths.node; data = data || {}; requestOptions.body = typeof data !== "string" ? JSON.stringify(data) : data; @@ -383,7 +381,7 @@ export function createNode(data?: any): Promise { * @returns Promise */ export function deleteNode(id: number): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let nodeEndpointString: string = `${graphPaths.node}/${id}`; request.del(nodeEndpointString, requestOptions, (err, response, body) => { if (err) { @@ -402,7 +400,7 @@ export function deleteNode(id: number): Promise { } export function getNodeDegree(nodeOrNodeId: INode | number, direction?: string, type?: string): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let degreeEndpointString = `${_getNeo4jEntityUrl(nodeOrNodeId, "node")}/degree`; direction = direction || "all"; if (direction && NEO4J_RELATIONSHIP_DIRECTION.indexOf(direction) !== -1) { @@ -411,7 +409,7 @@ export function getNodeDegree(nodeOrNodeId: INode | number, direction?: string, reject(`'direction' must be of value: ${NEO4J_RELATIONSHIP_DIRECTION}`); } if (type && typeof type === "string") { - degreeEndpointString = url.resolve(`${degreeEndpointString}/`, type) + degreeEndpointString = url.resolve(`${degreeEndpointString}/`, type); } request.get(degreeEndpointString, requestOptions, (err, response, body) => { if (err) { @@ -438,7 +436,7 @@ export function getNodeDegree(nodeOrNodeId: INode | number, direction?: string, * @returns Promise */ export function setProperty(entityOrEntityId: INeo4jEntity | number, type: string, propertyName: string, data: number | string | boolean | number[] | string[] | boolean[]): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let propertyEndpointString: string = null; try { propertyEndpointString = `${_getNeo4jEntityUrl(entityOrEntityId, type)}/properties/${propertyName}`; @@ -470,7 +468,7 @@ export function setProperty(entityOrEntityId: INeo4jEntity | number, type: strin * @returns Promise */ export function updateProperties(entityOrEntityId: INeo4jEntity | number, type: string, data: any): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let entityId: number = null; let propertiesEndpointString: string = `${_getNeo4jEntityUrl(entityOrEntityId, type)}/properties`; @@ -521,7 +519,7 @@ export function getProperties(entityOrEntityId: INeo4jEntity | number, type: str * @returns Promise */ export function getProperty(entityOrEntityId: INeo4jEntity | number, propertyName: string, type: string): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let propertyEndpointString: string = null; try { propertyEndpointString = `${_getNeo4jEntityUrl(entityOrEntityId, type)}/properties/${propertyName}`; @@ -548,7 +546,7 @@ export function getProperty(entityOrEntityId: INeo4jEntity | number, propertyNam * @returns Promise */ export function deleteProperty(entityOrEntityId: INeo4jEntity | number, propertyName: string, type: string): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let propertyEndpointString: string = null; try { propertyEndpointString = `${_getNeo4jEntityUrl(entityOrEntityId, type)}/properties/${propertyName}`; @@ -573,7 +571,7 @@ export function deleteProperty(entityOrEntityId: INeo4jEntity | number, property * @returns Promise */ export function deleteAllProperties(entityOrEntityId: INeo4jEntity | number, type: string): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let propertiesEndpointString: string = null; try { propertiesEndpointString = `${_getNeo4jEntityUrl(entityOrEntityId, type)}/properties`; @@ -598,7 +596,7 @@ export function deleteAllProperties(entityOrEntityId: INeo4jEntity | number, typ //============================================================================== export function getRelationship(relationshipId: number | IRelationship, direction?: string, types?: string[]): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { if (direction && NEO4J_RELATIONSHIP_DIRECTION.indexOf(direction) === -1) { reject(`Relationship 'direction' must be of type: ${NEO4J_RELATIONSHIP_DIRECTION}`); } @@ -618,7 +616,7 @@ export function getRelationship(relationshipId: number | IRelationship, directio } export function createRelationship(startNode: INode | string | number, toNode: INode | string | number, type?: string, data?: any): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let relationshipStartEndpointString: string = null; let relationshipEndEndpointString: string = null; try { @@ -654,7 +652,7 @@ export function createRelationship(startNode: INode | string | number, toNode: I } export function deleteRelationship(relationshipOrRelationshipId: number | IRelationship): Promise { - let promise = new Promise((resolve, reject) => { + let promise = new Promise((resolve, reject) => { let relationshipEndpointString: string = _getNeo4jEntityUrl(relationshipOrRelationshipId, "relationship"); request.del(relationshipEndpointString, requestOptions, (err, response, body) => { if (err) { diff --git a/tsconfig.json b/tsconfig.json index 633ae44..d50df43 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,6 +12,6 @@ "files": [ "src/index.ts", "src/index.spec.ts", - "typings/main.d.ts" + "typings/index.d.ts" ] } \ No newline at end of file