@grafeo-db/js 0.1.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/index.d.ts +134 -4
  2. package/index.js +321 -5
  3. package/package.json +43 -7
  4. package/README.md +0 -29
package/index.d.ts CHANGED
@@ -1,5 +1,135 @@
1
- // grafeo-js - Node.js/TypeScript bindings for Grafeo
2
- // Pre-alpha - bindings are under development.
3
- // See https://grafeo.dev for current status.
1
+ /* tslint:disable */
2
+ /* eslint-disable */
4
3
 
5
- export {};
4
+ /* auto-generated by NAPI-RS */
5
+
6
+ /** Returns the active SIMD instruction set for vector operations. */
7
+ export declare function simdSupport(): string
8
+ /** Returns the Grafeo version. */
9
+ export declare function version(): string
10
+ export type JsGrafeoDB = GrafeoDB
11
+ /** Your connection to a Grafeo database. */
12
+ export declare class GrafeoDB {
13
+ /** Create a database. Pass a path for persistence, or omit for in-memory. */
14
+ static create(path?: string | undefined | null): JsGrafeoDb
15
+ /** Open an existing database at the given path. */
16
+ static open(path: string): JsGrafeoDb
17
+ /** Execute a GQL query. Returns a Promise<QueryResult>. */
18
+ execute(query: string, params?: any | undefined | null): Promise<QueryResult>
19
+ /** Execute a Cypher query. */
20
+ executeCypher(query: string, params?: any | undefined | null): Promise<QueryResult>
21
+ /** Execute a Gremlin query. */
22
+ executeGremlin(query: string, params?: any | undefined | null): Promise<QueryResult>
23
+ /** Execute a GraphQL query. */
24
+ executeGraphql(query: string, params?: any | undefined | null): Promise<QueryResult>
25
+ /** Execute a SPARQL query against the RDF triple store. */
26
+ executeSparql(query: string): Promise<QueryResult>
27
+ /** Create a node with labels and optional properties. */
28
+ createNode(labels: Array<string>, properties?: object | undefined | null): JsNode
29
+ /** Create an edge between two nodes. */
30
+ createEdge(sourceId: number, targetId: number, edgeType: string, properties?: object | undefined | null): JsEdge
31
+ /** Get a node by ID. */
32
+ getNode(id: number): JsNode | null
33
+ /** Get an edge by ID. */
34
+ getEdge(id: number): JsEdge | null
35
+ /** Delete a node by ID. Returns true if the node existed. */
36
+ deleteNode(id: number): boolean
37
+ /** Delete an edge by ID. Returns true if the edge existed. */
38
+ deleteEdge(id: number): boolean
39
+ /** Set a property on a node. */
40
+ setNodeProperty(id: number, key: string, value: unknown): void
41
+ /** Set a property on an edge. */
42
+ setEdgeProperty(id: number, key: string, value: unknown): void
43
+ /** Get the number of nodes. */
44
+ get nodeCount(): number
45
+ /** Get the number of edges. */
46
+ get edgeCount(): number
47
+ /** Begin a transaction. */
48
+ beginTransaction(): Transaction
49
+ /** Create a vector similarity index on a node property. */
50
+ createVectorIndex(label: string, property: string, dimensions?: number | undefined | null, metric?: string | undefined | null, m?: number | undefined | null, efConstruction?: number | undefined | null): Promise<void>
51
+ /** Search for the k nearest neighbors of a query vector. */
52
+ vectorSearch(label: string, property: string, query: Array<number>, k: number, ef?: number | undefined | null): Promise<Array<Array<number>>>
53
+ /** Bulk-insert nodes with vector properties. */
54
+ batchCreateNodes(label: string, property: string, vectors: Array<Array<number>>): Promise<Array<number>>
55
+ /** Batch search for nearest neighbors of multiple query vectors. */
56
+ batchVectorSearch(label: string, property: string, queries: Array<Array<number>>, k: number, ef?: number | undefined | null): Promise<Array<Array<Array<number>>>>
57
+ /** Close the database. */
58
+ close(): void
59
+ }
60
+ /** A node in the graph with labels and properties. */
61
+ export declare class JsNode {
62
+ /** Get the node ID. */
63
+ get id(): number
64
+ /** Get the node labels. */
65
+ get labels(): Array<string>
66
+ /** Get a property value by key. */
67
+ get(key: string): unknown
68
+ /** Get all properties as a plain object. */
69
+ properties(): object
70
+ /** Check if the node has a specific label. */
71
+ hasLabel(label: string): boolean
72
+ /** String representation. */
73
+ toString(): string
74
+ }
75
+ /** An edge (relationship) between two nodes with a type and properties. */
76
+ export declare class JsEdge {
77
+ /** Get the edge ID. */
78
+ get id(): number
79
+ /** Get the edge type (relationship type). */
80
+ get edgeType(): string
81
+ /** Get the source node ID. */
82
+ get sourceId(): number
83
+ /** Get the target node ID. */
84
+ get targetId(): number
85
+ /** Get a property value by key. */
86
+ get(key: string): unknown
87
+ /** Get all properties as a plain object. */
88
+ properties(): object
89
+ /** String representation. */
90
+ toString(): string
91
+ }
92
+ /** Results from a query - access rows, nodes, and edges. */
93
+ export declare class QueryResult {
94
+ /** Get column names. */
95
+ get columns(): Array<string>
96
+ /** Get number of rows. */
97
+ get length(): number
98
+ /** Query execution time in milliseconds (if available). */
99
+ get executionTimeMs(): number | null
100
+ /** Number of rows scanned during execution (if available). */
101
+ get rowsScanned(): number | null
102
+ /** Get a single row by index as a plain object. */
103
+ get(index: number): object
104
+ /** Get all rows as an array of objects. */
105
+ toArray(): Array<object>
106
+ /** Get first column of first row (single value). */
107
+ scalar(): unknown
108
+ /** Get nodes found in the result. */
109
+ nodes(): Array<JsNode>
110
+ /** Get edges found in the result. */
111
+ edges(): Array<JsEdge>
112
+ /** Get all rows as an array of arrays (no column names). */
113
+ rows(): object
114
+ }
115
+ /**
116
+ * A database transaction with explicit commit/rollback.
117
+ *
118
+ * In Node.js 22+, use with `using` for automatic cleanup:
119
+ * ```js
120
+ * using tx = db.beginTransaction();
121
+ * await tx.execute("INSERT (:Person {name: 'Alice'})");
122
+ * tx.commit();
123
+ * // auto-rollback if commit not called
124
+ * ```
125
+ */
126
+ export declare class Transaction {
127
+ /** Execute a query within this transaction. */
128
+ execute(query: string, params?: any | undefined | null): Promise<QueryResult>
129
+ /** Commit the transaction. */
130
+ commit(): void
131
+ /** Roll back the transaction. */
132
+ rollback(): void
133
+ /** Whether the transaction is still active. */
134
+ get isActive(): boolean
135
+ }
package/index.js CHANGED
@@ -1,5 +1,321 @@
1
- throw new Error(
2
- 'grafeo-js is pre-alpha and not yet implemented. ' +
3
- 'Please see https://grafeo.dev for the current status. ' +
4
- 'For production use, consider the Python bindings: https://pypi.org/project/grafeo/'
5
- );
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /* prettier-ignore */
4
+
5
+ /* auto-generated by NAPI-RS */
6
+
7
+ const { existsSync, readFileSync } = require('fs')
8
+ const { join } = require('path')
9
+
10
+ const { platform, arch } = process
11
+
12
+ let nativeBinding = null
13
+ let localFileExisted = false
14
+ let loadError = null
15
+
16
+ function isMusl() {
17
+ // For Node 10
18
+ if (!process.report || typeof process.report.getReport !== 'function') {
19
+ try {
20
+ const lddPath = require('child_process').execSync('which ldd').toString().trim()
21
+ return readFileSync(lddPath, 'utf8').includes('musl')
22
+ } catch (e) {
23
+ return true
24
+ }
25
+ } else {
26
+ const { glibcVersionRuntime } = process.report.getReport().header
27
+ return !glibcVersionRuntime
28
+ }
29
+ }
30
+
31
+ switch (platform) {
32
+ case 'android':
33
+ switch (arch) {
34
+ case 'arm64':
35
+ localFileExisted = existsSync(join(__dirname, 'grafeo.android-arm64.node'))
36
+ try {
37
+ if (localFileExisted) {
38
+ nativeBinding = require('./grafeo.android-arm64.node')
39
+ } else {
40
+ nativeBinding = require('@grafeo-db/js-android-arm64')
41
+ }
42
+ } catch (e) {
43
+ loadError = e
44
+ }
45
+ break
46
+ case 'arm':
47
+ localFileExisted = existsSync(join(__dirname, 'grafeo.android-arm-eabi.node'))
48
+ try {
49
+ if (localFileExisted) {
50
+ nativeBinding = require('./grafeo.android-arm-eabi.node')
51
+ } else {
52
+ nativeBinding = require('@grafeo-db/js-android-arm-eabi')
53
+ }
54
+ } catch (e) {
55
+ loadError = e
56
+ }
57
+ break
58
+ default:
59
+ throw new Error(`Unsupported architecture on Android ${arch}`)
60
+ }
61
+ break
62
+ case 'win32':
63
+ switch (arch) {
64
+ case 'x64':
65
+ localFileExisted = existsSync(
66
+ join(__dirname, 'grafeo.win32-x64-msvc.node')
67
+ )
68
+ try {
69
+ if (localFileExisted) {
70
+ nativeBinding = require('./grafeo.win32-x64-msvc.node')
71
+ } else {
72
+ nativeBinding = require('@grafeo-db/js-win32-x64-msvc')
73
+ }
74
+ } catch (e) {
75
+ loadError = e
76
+ }
77
+ break
78
+ case 'ia32':
79
+ localFileExisted = existsSync(
80
+ join(__dirname, 'grafeo.win32-ia32-msvc.node')
81
+ )
82
+ try {
83
+ if (localFileExisted) {
84
+ nativeBinding = require('./grafeo.win32-ia32-msvc.node')
85
+ } else {
86
+ nativeBinding = require('@grafeo-db/js-win32-ia32-msvc')
87
+ }
88
+ } catch (e) {
89
+ loadError = e
90
+ }
91
+ break
92
+ case 'arm64':
93
+ localFileExisted = existsSync(
94
+ join(__dirname, 'grafeo.win32-arm64-msvc.node')
95
+ )
96
+ try {
97
+ if (localFileExisted) {
98
+ nativeBinding = require('./grafeo.win32-arm64-msvc.node')
99
+ } else {
100
+ nativeBinding = require('@grafeo-db/js-win32-arm64-msvc')
101
+ }
102
+ } catch (e) {
103
+ loadError = e
104
+ }
105
+ break
106
+ default:
107
+ throw new Error(`Unsupported architecture on Windows: ${arch}`)
108
+ }
109
+ break
110
+ case 'darwin':
111
+ localFileExisted = existsSync(join(__dirname, 'grafeo.darwin-universal.node'))
112
+ try {
113
+ if (localFileExisted) {
114
+ nativeBinding = require('./grafeo.darwin-universal.node')
115
+ } else {
116
+ nativeBinding = require('@grafeo-db/js-darwin-universal')
117
+ }
118
+ break
119
+ } catch {}
120
+ switch (arch) {
121
+ case 'x64':
122
+ localFileExisted = existsSync(join(__dirname, 'grafeo.darwin-x64.node'))
123
+ try {
124
+ if (localFileExisted) {
125
+ nativeBinding = require('./grafeo.darwin-x64.node')
126
+ } else {
127
+ nativeBinding = require('@grafeo-db/js-darwin-x64')
128
+ }
129
+ } catch (e) {
130
+ loadError = e
131
+ }
132
+ break
133
+ case 'arm64':
134
+ localFileExisted = existsSync(
135
+ join(__dirname, 'grafeo.darwin-arm64.node')
136
+ )
137
+ try {
138
+ if (localFileExisted) {
139
+ nativeBinding = require('./grafeo.darwin-arm64.node')
140
+ } else {
141
+ nativeBinding = require('@grafeo-db/js-darwin-arm64')
142
+ }
143
+ } catch (e) {
144
+ loadError = e
145
+ }
146
+ break
147
+ default:
148
+ throw new Error(`Unsupported architecture on macOS: ${arch}`)
149
+ }
150
+ break
151
+ case 'freebsd':
152
+ if (arch !== 'x64') {
153
+ throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
154
+ }
155
+ localFileExisted = existsSync(join(__dirname, 'grafeo.freebsd-x64.node'))
156
+ try {
157
+ if (localFileExisted) {
158
+ nativeBinding = require('./grafeo.freebsd-x64.node')
159
+ } else {
160
+ nativeBinding = require('@grafeo-db/js-freebsd-x64')
161
+ }
162
+ } catch (e) {
163
+ loadError = e
164
+ }
165
+ break
166
+ case 'linux':
167
+ switch (arch) {
168
+ case 'x64':
169
+ if (isMusl()) {
170
+ localFileExisted = existsSync(
171
+ join(__dirname, 'grafeo.linux-x64-musl.node')
172
+ )
173
+ try {
174
+ if (localFileExisted) {
175
+ nativeBinding = require('./grafeo.linux-x64-musl.node')
176
+ } else {
177
+ nativeBinding = require('@grafeo-db/js-linux-x64-musl')
178
+ }
179
+ } catch (e) {
180
+ loadError = e
181
+ }
182
+ } else {
183
+ localFileExisted = existsSync(
184
+ join(__dirname, 'grafeo.linux-x64-gnu.node')
185
+ )
186
+ try {
187
+ if (localFileExisted) {
188
+ nativeBinding = require('./grafeo.linux-x64-gnu.node')
189
+ } else {
190
+ nativeBinding = require('@grafeo-db/js-linux-x64-gnu')
191
+ }
192
+ } catch (e) {
193
+ loadError = e
194
+ }
195
+ }
196
+ break
197
+ case 'arm64':
198
+ if (isMusl()) {
199
+ localFileExisted = existsSync(
200
+ join(__dirname, 'grafeo.linux-arm64-musl.node')
201
+ )
202
+ try {
203
+ if (localFileExisted) {
204
+ nativeBinding = require('./grafeo.linux-arm64-musl.node')
205
+ } else {
206
+ nativeBinding = require('@grafeo-db/js-linux-arm64-musl')
207
+ }
208
+ } catch (e) {
209
+ loadError = e
210
+ }
211
+ } else {
212
+ localFileExisted = existsSync(
213
+ join(__dirname, 'grafeo.linux-arm64-gnu.node')
214
+ )
215
+ try {
216
+ if (localFileExisted) {
217
+ nativeBinding = require('./grafeo.linux-arm64-gnu.node')
218
+ } else {
219
+ nativeBinding = require('@grafeo-db/js-linux-arm64-gnu')
220
+ }
221
+ } catch (e) {
222
+ loadError = e
223
+ }
224
+ }
225
+ break
226
+ case 'arm':
227
+ if (isMusl()) {
228
+ localFileExisted = existsSync(
229
+ join(__dirname, 'grafeo.linux-arm-musleabihf.node')
230
+ )
231
+ try {
232
+ if (localFileExisted) {
233
+ nativeBinding = require('./grafeo.linux-arm-musleabihf.node')
234
+ } else {
235
+ nativeBinding = require('@grafeo-db/js-linux-arm-musleabihf')
236
+ }
237
+ } catch (e) {
238
+ loadError = e
239
+ }
240
+ } else {
241
+ localFileExisted = existsSync(
242
+ join(__dirname, 'grafeo.linux-arm-gnueabihf.node')
243
+ )
244
+ try {
245
+ if (localFileExisted) {
246
+ nativeBinding = require('./grafeo.linux-arm-gnueabihf.node')
247
+ } else {
248
+ nativeBinding = require('@grafeo-db/js-linux-arm-gnueabihf')
249
+ }
250
+ } catch (e) {
251
+ loadError = e
252
+ }
253
+ }
254
+ break
255
+ case 'riscv64':
256
+ if (isMusl()) {
257
+ localFileExisted = existsSync(
258
+ join(__dirname, 'grafeo.linux-riscv64-musl.node')
259
+ )
260
+ try {
261
+ if (localFileExisted) {
262
+ nativeBinding = require('./grafeo.linux-riscv64-musl.node')
263
+ } else {
264
+ nativeBinding = require('@grafeo-db/js-linux-riscv64-musl')
265
+ }
266
+ } catch (e) {
267
+ loadError = e
268
+ }
269
+ } else {
270
+ localFileExisted = existsSync(
271
+ join(__dirname, 'grafeo.linux-riscv64-gnu.node')
272
+ )
273
+ try {
274
+ if (localFileExisted) {
275
+ nativeBinding = require('./grafeo.linux-riscv64-gnu.node')
276
+ } else {
277
+ nativeBinding = require('@grafeo-db/js-linux-riscv64-gnu')
278
+ }
279
+ } catch (e) {
280
+ loadError = e
281
+ }
282
+ }
283
+ break
284
+ case 's390x':
285
+ localFileExisted = existsSync(
286
+ join(__dirname, 'grafeo.linux-s390x-gnu.node')
287
+ )
288
+ try {
289
+ if (localFileExisted) {
290
+ nativeBinding = require('./grafeo.linux-s390x-gnu.node')
291
+ } else {
292
+ nativeBinding = require('@grafeo-db/js-linux-s390x-gnu')
293
+ }
294
+ } catch (e) {
295
+ loadError = e
296
+ }
297
+ break
298
+ default:
299
+ throw new Error(`Unsupported architecture on Linux: ${arch}`)
300
+ }
301
+ break
302
+ default:
303
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
304
+ }
305
+
306
+ if (!nativeBinding) {
307
+ if (loadError) {
308
+ throw loadError
309
+ }
310
+ throw new Error(`Failed to load native binding`)
311
+ }
312
+
313
+ const { GrafeoDB, JsNode, JsEdge, QueryResult, Transaction, simdSupport, version } = nativeBinding
314
+
315
+ module.exports.GrafeoDB = GrafeoDB
316
+ module.exports.JsNode = JsNode
317
+ module.exports.JsEdge = JsEdge
318
+ module.exports.QueryResult = QueryResult
319
+ module.exports.Transaction = Transaction
320
+ module.exports.simdSupport = simdSupport
321
+ module.exports.version = version
package/package.json CHANGED
@@ -1,7 +1,24 @@
1
1
  {
2
2
  "name": "@grafeo-db/js",
3
- "version": "0.1.4",
3
+ "version": "0.4.1",
4
4
  "description": "Node.js/TypeScript bindings for Grafeo - a high-performance embeddable graph database",
5
+ "main": "index.js",
6
+ "types": "index.d.ts",
7
+ "napi": {
8
+ "name": "grafeo",
9
+ "triples": {
10
+ "defaults": true,
11
+ "additional": [
12
+ "aarch64-apple-darwin",
13
+ "aarch64-unknown-linux-gnu",
14
+ "aarch64-unknown-linux-musl"
15
+ ]
16
+ }
17
+ },
18
+ "files": [
19
+ "index.js",
20
+ "index.d.ts"
21
+ ],
5
22
  "keywords": [
6
23
  "graph",
7
24
  "database",
@@ -10,22 +27,41 @@
10
27
  "sparql",
11
28
  "knowledge-graph",
12
29
  "native",
13
- "napi"
30
+ "napi",
31
+ "embedded"
14
32
  ],
15
33
  "author": "StevenBtw",
16
- "license": "MIT",
34
+ "license": "AGPL-3.0-or-later",
17
35
  "repository": {
18
36
  "type": "git",
19
37
  "url": "https://github.com/GrafeoDB/grafeo.git",
20
- "directory": "crates/bindings/js"
38
+ "directory": "crates/bindings/node"
21
39
  },
22
40
  "homepage": "https://grafeo.dev",
23
41
  "bugs": {
24
42
  "url": "https://github.com/GrafeoDB/grafeo/issues"
25
43
  },
26
- "main": "index.js",
27
- "types": "index.d.ts",
28
44
  "engines": {
29
45
  "node": ">=18"
46
+ },
47
+ "scripts": {
48
+ "artifacts": "napi artifacts",
49
+ "build": "napi build --platform --release --features full",
50
+ "build:debug": "napi build --platform",
51
+ "test": "vitest run",
52
+ "prepublishOnly": "napi prepublish -t npm",
53
+ "version": "napi version"
54
+ },
55
+ "devDependencies": {
56
+ "@napi-rs/cli": "^2.18.0",
57
+ "vitest": "^4.0.18"
58
+ },
59
+ "optionalDependencies": {
60
+ "@grafeo-db/js-win32-x64-msvc": "0.4.1",
61
+ "@grafeo-db/js-darwin-x64": "0.4.1",
62
+ "@grafeo-db/js-linux-x64-gnu": "0.4.1",
63
+ "@grafeo-db/js-darwin-arm64": "0.4.1",
64
+ "@grafeo-db/js-linux-arm64-gnu": "0.4.1",
65
+ "@grafeo-db/js-linux-arm64-musl": "0.4.1"
30
66
  }
31
- }
67
+ }
package/README.md DELETED
@@ -1,29 +0,0 @@
1
- # @grafeo-db/js
2
-
3
- Node.js/TypeScript bindings for [Grafeo](https://grafeo.dev) - a high-performance, pure-Rust, embeddable graph database.
4
-
5
- ## Status
6
-
7
- **Pre-alpha** - The Node.js bindings are under development.
8
-
9
- For production use, please use the [Python bindings](https://pypi.org/project/grafeo/) which are fully functional.
10
-
11
- ## Installation
12
-
13
- ```bash
14
- npm install @grafeo-db/js
15
- ```
16
-
17
- ## Planned Features
18
-
19
- - Native Node.js bindings via napi-rs
20
- - Full TypeScript type definitions
21
- - Support for GQL, Cypher, SPARQL, and GraphQL query languages
22
- - Zero-copy data transfer where possible
23
- - Async/await API
24
-
25
- ## Links
26
-
27
- - [Documentation](https://grafeo.dev)
28
- - [GitHub](https://github.com/GrafeoDB/grafeo)
29
- - [Python Package](https://pypi.org/project/grafeo/)