nicefox-graphdb 0.1.0

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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +417 -0
  3. package/package.json +78 -0
  4. package/packages/nicefox-graphdb/LICENSE +21 -0
  5. package/packages/nicefox-graphdb/README.md +417 -0
  6. package/packages/nicefox-graphdb/dist/auth.d.ts +66 -0
  7. package/packages/nicefox-graphdb/dist/auth.d.ts.map +1 -0
  8. package/packages/nicefox-graphdb/dist/auth.js +148 -0
  9. package/packages/nicefox-graphdb/dist/auth.js.map +1 -0
  10. package/packages/nicefox-graphdb/dist/backup.d.ts +51 -0
  11. package/packages/nicefox-graphdb/dist/backup.d.ts.map +1 -0
  12. package/packages/nicefox-graphdb/dist/backup.js +201 -0
  13. package/packages/nicefox-graphdb/dist/backup.js.map +1 -0
  14. package/packages/nicefox-graphdb/dist/cli-helpers.d.ts +17 -0
  15. package/packages/nicefox-graphdb/dist/cli-helpers.d.ts.map +1 -0
  16. package/packages/nicefox-graphdb/dist/cli-helpers.js +121 -0
  17. package/packages/nicefox-graphdb/dist/cli-helpers.js.map +1 -0
  18. package/packages/nicefox-graphdb/dist/cli.d.ts +3 -0
  19. package/packages/nicefox-graphdb/dist/cli.d.ts.map +1 -0
  20. package/packages/nicefox-graphdb/dist/cli.js +660 -0
  21. package/packages/nicefox-graphdb/dist/cli.js.map +1 -0
  22. package/packages/nicefox-graphdb/dist/db.d.ts +118 -0
  23. package/packages/nicefox-graphdb/dist/db.d.ts.map +1 -0
  24. package/packages/nicefox-graphdb/dist/db.js +245 -0
  25. package/packages/nicefox-graphdb/dist/db.js.map +1 -0
  26. package/packages/nicefox-graphdb/dist/executor.d.ts +272 -0
  27. package/packages/nicefox-graphdb/dist/executor.d.ts.map +1 -0
  28. package/packages/nicefox-graphdb/dist/executor.js +3579 -0
  29. package/packages/nicefox-graphdb/dist/executor.js.map +1 -0
  30. package/packages/nicefox-graphdb/dist/index.d.ts +54 -0
  31. package/packages/nicefox-graphdb/dist/index.d.ts.map +1 -0
  32. package/packages/nicefox-graphdb/dist/index.js +74 -0
  33. package/packages/nicefox-graphdb/dist/index.js.map +1 -0
  34. package/packages/nicefox-graphdb/dist/local.d.ts +7 -0
  35. package/packages/nicefox-graphdb/dist/local.d.ts.map +1 -0
  36. package/packages/nicefox-graphdb/dist/local.js +115 -0
  37. package/packages/nicefox-graphdb/dist/local.js.map +1 -0
  38. package/packages/nicefox-graphdb/dist/parser.d.ts +300 -0
  39. package/packages/nicefox-graphdb/dist/parser.d.ts.map +1 -0
  40. package/packages/nicefox-graphdb/dist/parser.js +1891 -0
  41. package/packages/nicefox-graphdb/dist/parser.js.map +1 -0
  42. package/packages/nicefox-graphdb/dist/remote.d.ts +6 -0
  43. package/packages/nicefox-graphdb/dist/remote.d.ts.map +1 -0
  44. package/packages/nicefox-graphdb/dist/remote.js +87 -0
  45. package/packages/nicefox-graphdb/dist/remote.js.map +1 -0
  46. package/packages/nicefox-graphdb/dist/routes.d.ts +31 -0
  47. package/packages/nicefox-graphdb/dist/routes.d.ts.map +1 -0
  48. package/packages/nicefox-graphdb/dist/routes.js +202 -0
  49. package/packages/nicefox-graphdb/dist/routes.js.map +1 -0
  50. package/packages/nicefox-graphdb/dist/translator.d.ts +136 -0
  51. package/packages/nicefox-graphdb/dist/translator.d.ts.map +1 -0
  52. package/packages/nicefox-graphdb/dist/translator.js +4849 -0
  53. package/packages/nicefox-graphdb/dist/translator.js.map +1 -0
  54. package/packages/nicefox-graphdb/dist/types.d.ts +133 -0
  55. package/packages/nicefox-graphdb/dist/types.d.ts.map +1 -0
  56. package/packages/nicefox-graphdb/dist/types.js +21 -0
  57. package/packages/nicefox-graphdb/dist/types.js.map +1 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Conrad Lelubre
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,417 @@
1
+ # NiceFox GraphDB
2
+
3
+ [![npm version](https://img.shields.io/npm/v/nicefox-graphdb.svg)](https://www.npmjs.com/package/nicefox-graphdb)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ A lightweight graph database with Cypher query support, powered by SQLite.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install nicefox-graphdb
12
+ ```
13
+
14
+ ## Quick Start
15
+
16
+ ```typescript
17
+ import { GraphDB } from 'nicefox-graphdb';
18
+
19
+ const db = await GraphDB({
20
+ url: 'https://my-graphdb.example.com',
21
+ project: 'myapp',
22
+ apiKey: process.env.GRAPHDB_API_KEY,
23
+ });
24
+
25
+ // Create nodes and relationships
26
+ await db.execute(`
27
+ CREATE (alice:User {name: 'Alice'})-[:FOLLOWS]->(bob:User {name: 'Bob'})
28
+ `);
29
+
30
+ // Query the graph
31
+ const users = await db.query('MATCH (u:User) RETURN u.name AS name');
32
+ console.log(users); // [{ name: 'Alice' }, { name: 'Bob' }]
33
+
34
+ db.close();
35
+ ```
36
+
37
+ ## Development vs Production Mode
38
+
39
+ NiceFox GraphDB automatically adapts based on the `NODE_ENV` environment variable:
40
+
41
+ | Mode | `NODE_ENV` | Behavior |
42
+ |------|-----------|----------|
43
+ | **Development** | `development` | Uses local SQLite database. `url` and `apiKey` are ignored. |
44
+ | **Production** | `production` (or unset) | Connects to remote server via HTTP. `url` and `apiKey` are required. |
45
+
46
+ This means you can use the **exact same code** in both environments:
47
+
48
+ ```typescript
49
+ // Works in both development and production!
50
+ const db = await GraphDB({
51
+ url: 'https://my-graphdb.example.com',
52
+ project: 'myapp',
53
+ apiKey: process.env.GRAPHDB_API_KEY,
54
+ });
55
+ ```
56
+
57
+ ### Development Mode
58
+
59
+ When `NODE_ENV=development`:
60
+ - A local SQLite database is created automatically
61
+ - No server setup required
62
+ - `url` and `apiKey` parameters are ignored
63
+ - Data persists at `./data/{env}/{project}.db` by default
64
+
65
+ ```bash
66
+ # Run your app in development mode
67
+ NODE_ENV=development node app.js
68
+ ```
69
+
70
+ ### Production Mode
71
+
72
+ When `NODE_ENV=production` (or unset):
73
+ - Connects to a remote GraphDB server via HTTP
74
+ - `url` and `apiKey` are required
75
+
76
+ ```bash
77
+ # Run your app in production mode
78
+ NODE_ENV=production GRAPHDB_API_KEY=xxx node app.js
79
+ ```
80
+
81
+ ## Configuration Options
82
+
83
+ | Option | Type | Required | Default | Description |
84
+ |--------|------|----------|---------|-------------|
85
+ | `url` | `string` | Yes | - | Base URL of the GraphDB server (used in production) |
86
+ | `project` | `string` | Yes | - | Project name |
87
+ | `apiKey` | `string` | No | - | API key for authentication (used in production) |
88
+ | `env` | `'production' \| 'test'` | No | `'production'` | Environment (determines database isolation) |
89
+ | `dataPath` | `string` | No | `'./data'` | Path for local data storage (development only). Use `':memory:'` for in-memory database |
90
+
91
+ ### Examples
92
+
93
+ ```typescript
94
+ // Production: connect to remote server
95
+ const db = await GraphDB({
96
+ url: 'https://graphdb.example.com',
97
+ project: 'myapp',
98
+ apiKey: 'your-api-key',
99
+ env: 'production',
100
+ });
101
+
102
+ // Development: use local SQLite (url/apiKey ignored)
103
+ // NODE_ENV=development
104
+ const db = await GraphDB({
105
+ url: 'https://graphdb.example.com', // ignored
106
+ project: 'myapp',
107
+ apiKey: 'your-api-key', // ignored
108
+ dataPath: './local-data', // custom data directory
109
+ });
110
+
111
+ // Testing: use in-memory database
112
+ // NODE_ENV=development
113
+ const db = await GraphDB({
114
+ url: 'https://graphdb.example.com',
115
+ project: 'test-project',
116
+ dataPath: ':memory:', // resets on each run
117
+ });
118
+ ```
119
+
120
+ ## API Reference
121
+
122
+ ### `GraphDB(options): Promise<GraphDBClient>`
123
+
124
+ Create a new GraphDB client. Returns a promise that resolves to a client instance.
125
+
126
+ ### `db.query<T>(cypher, params?): Promise<T[]>`
127
+
128
+ Execute a Cypher query and return results as an array.
129
+
130
+ ```typescript
131
+ const users = await db.query<{ name: string; age: number }>(
132
+ 'MATCH (u:User) WHERE u.age > $minAge RETURN u.name AS name, u.age AS age',
133
+ { minAge: 21 }
134
+ );
135
+ // users = [{ name: 'Alice', age: 25 }, { name: 'Bob', age: 30 }]
136
+ ```
137
+
138
+ ### `db.execute(cypher, params?): Promise<void>`
139
+
140
+ Execute a mutating query (CREATE, SET, DELETE, MERGE) without expecting return data.
141
+
142
+ ```typescript
143
+ await db.execute('CREATE (n:User {name: $name, email: $email})', {
144
+ name: 'Alice',
145
+ email: 'alice@example.com'
146
+ });
147
+ ```
148
+
149
+ ### `db.queryRaw<T>(cypher, params?): Promise<QueryResponse<T>>`
150
+
151
+ Execute a query and return the full response including metadata.
152
+
153
+ ```typescript
154
+ const response = await db.queryRaw('MATCH (n) RETURN n LIMIT 10');
155
+ console.log(response.meta.count); // Number of rows
156
+ console.log(response.meta.time_ms); // Query execution time in ms
157
+ console.log(response.data); // Array of results
158
+ ```
159
+
160
+ ### `db.createNode(label, properties?): Promise<string>`
161
+
162
+ Create a node and return its ID.
163
+
164
+ ```typescript
165
+ const userId = await db.createNode('User', { name: 'Alice', email: 'alice@example.com' });
166
+ ```
167
+
168
+ ### `db.getNode(label, filter): Promise<Record<string, unknown> | null>`
169
+
170
+ Find a node by label and properties.
171
+
172
+ ```typescript
173
+ const user = await db.getNode('User', { email: 'alice@example.com' });
174
+ if (user) {
175
+ console.log(user.name); // 'Alice'
176
+ }
177
+ ```
178
+
179
+ ### `db.updateNode(id, properties): Promise<void>`
180
+
181
+ Update properties on a node.
182
+
183
+ ```typescript
184
+ await db.updateNode(userId, { name: 'Alice Smith', verified: true });
185
+ ```
186
+
187
+ ### `db.deleteNode(id): Promise<void>`
188
+
189
+ Delete a node and all its relationships (DETACH DELETE).
190
+
191
+ ```typescript
192
+ await db.deleteNode(userId);
193
+ ```
194
+
195
+ ### `db.createEdge(sourceId, type, targetId, properties?): Promise<void>`
196
+
197
+ Create a relationship between two nodes.
198
+
199
+ ```typescript
200
+ await db.createEdge(aliceId, 'FOLLOWS', bobId, { since: '2024-01-01' });
201
+ ```
202
+
203
+ ### `db.health(): Promise<{ status: string; timestamp: string }>`
204
+
205
+ Check server health. In development mode, always returns `{ status: 'ok', ... }`.
206
+
207
+ ### `db.close(): void`
208
+
209
+ Close the client and release resources. **Always call this when done.**
210
+
211
+ ```typescript
212
+ const db = await GraphDB({ ... });
213
+ try {
214
+ // ... use db
215
+ } finally {
216
+ db.close();
217
+ }
218
+ ```
219
+
220
+ ## Cypher Quick Reference
221
+
222
+ ### Supported Clauses
223
+
224
+ | Clause | Example |
225
+ |--------|---------|
226
+ | `CREATE` | `CREATE (n:User {name: 'Alice'})` |
227
+ | `MATCH` | `MATCH (n:User) RETURN n` |
228
+ | `OPTIONAL MATCH` | `OPTIONAL MATCH (n)-[:KNOWS]->(m) RETURN m` |
229
+ | `MERGE` | `MERGE (n:User {email: $email})` |
230
+ | `WHERE` | `WHERE n.age > 21 AND n.active = true` |
231
+ | `SET` | `SET n.name = 'Bob', n.updated = true` |
232
+ | `DELETE` | `DELETE n` |
233
+ | `DETACH DELETE` | `DETACH DELETE n` |
234
+ | `RETURN` | `RETURN n.name AS name, count(*) AS total` |
235
+ | `WITH` | `WITH n, count(*) AS cnt WHERE cnt > 1` |
236
+ | `UNWIND` | `UNWIND $list AS item CREATE (n {value: item})` |
237
+ | `UNION / UNION ALL` | `MATCH (n:A) RETURN n UNION MATCH (m:B) RETURN m` |
238
+ | `ORDER BY` | `ORDER BY n.name DESC` |
239
+ | `SKIP / LIMIT` | `SKIP 10 LIMIT 5` |
240
+ | `DISTINCT` | `RETURN DISTINCT n.category` |
241
+ | `CASE/WHEN` | `RETURN CASE WHEN n.age > 18 THEN 'adult' ELSE 'minor' END` |
242
+ | `CALL` | `CALL db.labels() YIELD label RETURN label` |
243
+
244
+ ### Operators
245
+
246
+ | Category | Operators |
247
+ |----------|-----------|
248
+ | Comparison | `=`, `<>`, `<`, `>`, `<=`, `>=` |
249
+ | Logical | `AND`, `OR`, `NOT` |
250
+ | String | `CONTAINS`, `STARTS WITH`, `ENDS WITH` |
251
+ | List | `IN` |
252
+ | Null | `IS NULL`, `IS NOT NULL` |
253
+ | Pattern | `EXISTS` |
254
+ | Arithmetic | `+`, `-`, `*`, `/`, `%` |
255
+
256
+ ### Functions
257
+
258
+ **Aggregation:** `COUNT`, `SUM`, `AVG`, `MIN`, `MAX`, `COLLECT`
259
+
260
+ **Scalar:** `ID`, `coalesce`
261
+
262
+ **String:** `toUpper`, `toLower`, `trim`, `substring`, `replace`, `toString`, `split`
263
+
264
+ **List:** `size`, `head`, `last`, `tail`, `keys`, `range`
265
+
266
+ **Node/Relationship:** `labels`, `type`, `properties`
267
+
268
+ **Math:** `abs`, `ceil`, `floor`, `round`, `rand`, `sqrt`
269
+
270
+ **Date/Time:** `date`, `datetime`, `timestamp`
271
+
272
+ ### Variable-Length Paths
273
+
274
+ ```cypher
275
+ -- Find friends of friends (1 to 3 hops)
276
+ MATCH (a:User {name: 'Alice'})-[:KNOWS*1..3]->(b:User)
277
+ RETURN DISTINCT b.name
278
+ ```
279
+
280
+ ### Procedures
281
+
282
+ ```cypher
283
+ -- List all labels
284
+ CALL db.labels() YIELD label RETURN label
285
+
286
+ -- List all relationship types
287
+ CALL db.relationshipTypes() YIELD type RETURN type
288
+
289
+ -- List all property keys
290
+ CALL db.propertyKeys() YIELD key RETURN key
291
+ ```
292
+
293
+ ## Running the Server (Production)
294
+
295
+ For production deployments, run a dedicated server:
296
+
297
+ ```bash
298
+ # Start the server
299
+ npx nicefox-graphdb serve --port 3000 --data ./data
300
+
301
+ # Or with custom host binding
302
+ npx nicefox-graphdb serve --port 3000 --host 0.0.0.0 --data ./data
303
+ ```
304
+
305
+ ### Creating Projects
306
+
307
+ ```bash
308
+ # Create a new project (generates API keys)
309
+ npx nicefox-graphdb create myapp --data ./data
310
+
311
+ # Output:
312
+ # [created] production/myapp.db
313
+ # [created] test/myapp.db
314
+ # API Keys:
315
+ # production: nfx_abc123...
316
+ # test: nfx_def456...
317
+ ```
318
+
319
+ ### CLI Reference
320
+
321
+ ```bash
322
+ # Server
323
+ nicefox-graphdb serve [options]
324
+ -p, --port <port> Port to listen on (default: 3000)
325
+ -d, --data <path> Data directory (default: /var/data/nicefox-graphdb)
326
+ -H, --host <host> Host to bind to (default: localhost)
327
+ -b, --backup <path> Backup directory (enables backup endpoints)
328
+
329
+ # Project management
330
+ nicefox-graphdb create <project> Create new project with API keys
331
+ nicefox-graphdb delete <project> Delete project (use --force)
332
+ nicefox-graphdb list List all projects
333
+
334
+ # Environment management
335
+ nicefox-graphdb clone <project> Copy production to test
336
+ nicefox-graphdb wipe <project> Clear test database
337
+
338
+ # Direct queries
339
+ nicefox-graphdb query <env> <project> "CYPHER"
340
+
341
+ # Backup
342
+ nicefox-graphdb backup [options]
343
+ -o, --output <path> Backup directory
344
+ -p, --project <name> Backup specific project
345
+ --status Show backup status
346
+
347
+ # API keys
348
+ nicefox-graphdb apikey add <project>
349
+ nicefox-graphdb apikey list
350
+ nicefox-graphdb apikey remove <prefix>
351
+ ```
352
+
353
+ ## Why NiceFox?
354
+
355
+ | Feature | NiceFox GraphDB | Neo4j |
356
+ |---------|-----------------|-------|
357
+ | **Deployment** | Single package, zero config | Complex setup, JVM required |
358
+ | **Development** | Local SQLite, no server needed | Server required |
359
+ | **Backup** | Just copy the SQLite file | Enterprise license required |
360
+ | **Resource usage** | ~50MB RAM | 1GB+ RAM minimum |
361
+ | **Cypher support** | Core subset | Full |
362
+ | **Cost** | Free, MIT license | Free tier limited |
363
+
364
+ NiceFox is ideal for:
365
+ - Applications needing graph queries without ops burden
366
+ - Projects that outgrow JSON but don't need a full graph database
367
+ - Self-hosted deployments where simplicity matters
368
+ - Development and testing with instant local databases
369
+
370
+ ## Advanced Usage
371
+
372
+ ### Direct Database Access
373
+
374
+ For advanced use cases, you can access the underlying components:
375
+
376
+ ```typescript
377
+ import { GraphDatabase, Executor, parse, translate } from 'nicefox-graphdb';
378
+
379
+ // Direct database access
380
+ const db = new GraphDatabase('./my-database.db');
381
+ db.initialize();
382
+
383
+ const executor = new Executor(db);
384
+ const result = executor.execute('MATCH (n) RETURN n LIMIT 10');
385
+
386
+ db.close();
387
+
388
+ // Parse Cypher to AST
389
+ const parseResult = parse('MATCH (n:User) RETURN n');
390
+ if (parseResult.success) {
391
+ console.log(parseResult.query);
392
+ }
393
+
394
+ // Translate AST to SQL
395
+ const translation = translate(parseResult.query, {});
396
+ console.log(translation.statements);
397
+ ```
398
+
399
+ ### Running a Custom Server
400
+
401
+ ```typescript
402
+ import { createServer } from 'nicefox-graphdb';
403
+ import { serve } from '@hono/node-server';
404
+
405
+ const { app, dbManager } = createServer({
406
+ dataPath: './data',
407
+ apiKeys: {
408
+ 'my-api-key': { project: 'myapp', env: 'production' }
409
+ }
410
+ });
411
+
412
+ serve({ fetch: app.fetch, port: 3000 });
413
+ ```
414
+
415
+ ## License
416
+
417
+ [MIT](https://github.com/co-l/nicefox-graphdb/blob/main/LICENSE) - Conrad Lelubre
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "nicefox-graphdb",
3
+ "version": "0.1.0",
4
+ "description": "SQLite-based graph database with Cypher query support",
5
+ "type": "module",
6
+ "main": "packages/nicefox-graphdb/dist/index.js",
7
+ "types": "packages/nicefox-graphdb/dist/index.d.ts",
8
+ "bin": {
9
+ "nicefox-graphdb": "./packages/nicefox-graphdb/dist/cli.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./packages/nicefox-graphdb/dist/index.d.ts",
14
+ "import": "./packages/nicefox-graphdb/dist/index.js",
15
+ "default": "./packages/nicefox-graphdb/dist/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "packages/nicefox-graphdb/dist/**/*",
20
+ "README.md",
21
+ "LICENSE"
22
+ ],
23
+ "scripts": {
24
+ "prepare": "[ -d .git ] && cp hooks/pre-commit .git/hooks/ && chmod +x .git/hooks/pre-commit || true",
25
+ "test": "vitest run",
26
+ "test:watch": "vitest",
27
+ "test:coverage": "vitest run --coverage",
28
+ "dev": "pnpm --filter nicefox-graphdb-server dev",
29
+ "build": "pnpm -r build",
30
+ "tck": "npx tsx packages/server/test/tck/run-test.ts",
31
+ "prepublishOnly": "pnpm --filter nicefox-graphdb run build"
32
+ },
33
+ "dependencies": {
34
+ "better-sqlite3": "^11.0.0",
35
+ "hono": "^4.0.0",
36
+ "@hono/node-server": "^1.13.0",
37
+ "commander": "^12.0.0"
38
+ },
39
+ "devDependencies": {
40
+ "@types/better-sqlite3": "^7.6.0",
41
+ "@types/node": "^22.0.0",
42
+ "@vitest/coverage-v8": "^2.1.9",
43
+ "typescript": "^5.3.0",
44
+ "vitest": "^2.0.0"
45
+ },
46
+ "pnpm": {
47
+ "onlyBuiltDependencies": [
48
+ "better-sqlite3",
49
+ "esbuild"
50
+ ]
51
+ },
52
+ "keywords": [
53
+ "graph",
54
+ "database",
55
+ "graphdb",
56
+ "cypher",
57
+ "sqlite",
58
+ "typescript",
59
+ "neo4j",
60
+ "query"
61
+ ],
62
+ "author": "Conrad Lelubre",
63
+ "license": "MIT",
64
+ "repository": {
65
+ "type": "git",
66
+ "url": "git+https://github.com/co-l/nicefox-graphdb.git"
67
+ },
68
+ "homepage": "https://github.com/co-l/nicefox-graphdb#readme",
69
+ "bugs": {
70
+ "url": "https://github.com/co-l/nicefox-graphdb/issues"
71
+ },
72
+ "engines": {
73
+ "node": ">=18.0.0"
74
+ },
75
+ "publishConfig": {
76
+ "access": "public"
77
+ }
78
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Conrad Lelubre
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.